]> pd.if.org Git - pdclib/commitdiff
Reviewed / implemented.
authorsolar <unknown>
Thu, 22 Jan 2004 06:56:19 +0000 (06:56 +0000)
committersolar <unknown>
Thu, 22 Jan 2004 06:56:19 +0000 (06:56 +0000)
functions/string/strtok.c

index 1828f3949a6fab297e27f0cf6d7b354168ec6fcc..69b45a73cb8aeb0753395907425beed9643ce13f 100644 (file)
@@ -5,27 +5,35 @@
 // This code is Public Domain. Use, modify, and redistribute at will.
 // ----------------------------------------------------------------------------
 
-char * strtok( char * restrict s1, const char * restrict s2 ) { /* TODO */ };
-
-/* PDPC code - unreviewed
+char * strtok( char * restrict src, const char * restrict seperators )
 {
-    static char *old = NULL;
-    char *p;
-    size_t len;
-    size_t remain;
-    
-    if (s1 != NULL) old = s1;
-    if (old == NULL) return (NULL);
-    p = old;
-    len = strspn(p, s2);
-    remain = strlen(p);
-    if (remain <= len) { old = NULL; return (NULL); }
-    p += len;
-    len = strcspn(p, s2);
-    remain = strlen(p);
-    if (remain <= len) { old = NULL; return (p); }
-    *(p + len) = '\0';
-    old = p + len + 1;
-    return (p);
+    static char * store = NULL;
+    size_t token_length;
+
+    if ( src != NULL )
+    {
+        // new string
+        store = src;
+    }
+    if ( store == NULL )
+    {
+        // no old string, no new string, nothing to do
+        return NULL;
+    }
+    src += strspn( src, seperators ); // skipping leading seperators
+    if ( strlen( src ) == 0 )
+    {
+        // no more to parse
+        return ( store = NULL );
+    }
+    token_length = strcspn( src, seperators );
+    if ( src[ token_length ] == '\0' )
+    {
+        // parsed to end of string
+        store = NULL;
+        return src;
+    }
+    src[ token_length ] = '\0';
+    store = src + token_length + 1;
+    return src;
 }
-*/