From 3a89f66cfd0d00972a8f49fddd0d21d34b0c2748 Mon Sep 17 00:00:00 2001 From: Timothy Bess <tdbgamer@gmail.com> Date: Sun, 18 Mar 2018 00:05:13 -0400 Subject: [PATCH] * simplify strtok implementation --- src/string/src/lib.rs | 28 ++-------------------------- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/src/string/src/lib.rs b/src/string/src/lib.rs index c795ee16..c97302b9 100644 --- a/src/string/src/lib.rs +++ b/src/string/src/lib.rs @@ -324,33 +324,9 @@ pub unsafe extern "C" fn strstr(s1: *const c_char, s2: *const c_char) -> *mut c_ #[no_mangle] pub extern "C" fn strtok(s1: *mut c_char, delimiter: *const c_char) -> *mut c_char { - // Loosely based on GLIBC implementation + static mut HAYSTACK: *mut c_char = ptr::null_mut(); unsafe { - static mut HAYSTACK: *mut c_char = ptr::null_mut(); - if !s1.is_null() { - HAYSTACK = s1; - } else if HAYSTACK.is_null() { - return ptr::null_mut(); - } - - // Skip past any extra delimiter left over from previous call - HAYSTACK = HAYSTACK.add(strspn(HAYSTACK, delimiter)); - if *HAYSTACK == 0 { - HAYSTACK = ptr::null_mut(); - return ptr::null_mut(); - } - - // Build token by injecting null byte into delimiter - let token = HAYSTACK; - HAYSTACK = strpbrk(token, delimiter); - if !HAYSTACK.is_null() { - HAYSTACK.write(0); - HAYSTACK = HAYSTACK.add(1); - } else { - HAYSTACK = ptr::null_mut(); - } - - return token; + return strtok_r(s1, delimiter, &mut HAYSTACK); } } -- GitLab