]> pd.if.org Git - pdclib/blobdiff - functions/string/strtok.c
Re-import from Subversion.
[pdclib] / functions / string / strtok.c
index 1e588e84bb1e52d9390c83bab8945eec82ca5b44..70d2cd702fe196b7bf8d2a68a078312bdadc3681 100644 (file)
@@ -1,8 +1,39 @@
-// ----------------------------------------------------------------------------
-// $Id$
-// ----------------------------------------------------------------------------
-// Public Domain C Library - http://pdclib.sourceforge.net
-// This code is Public Domain. Use, modify, and redistribute at will.
-// ----------------------------------------------------------------------------
+/* ----------------------------------------------------------------------------
+ * $Id$
+ * ----------------------------------------------------------------------------
+ * Public Domain C Library - http://pdclib.sourceforge.net
+ * This code is Public Domain. Use, modify, and redistribute at will.
+ * --------------------------------------------------------------------------*/
 
-char * strtok( char * restrict s1, const char * restrict s2 ) { /* TODO */ };
+char * strtok( char * restrict src, const char * restrict seperators )
+{
+    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;
+}