X-Git-Url: https://pd.if.org/git/?p=pdclib;a=blobdiff_plain;f=functions%2Fstring%2Fstrtok.c;h=70d2cd702fe196b7bf8d2a68a078312bdadc3681;hp=1828f3949a6fab297e27f0cf6d7b354168ec6fcc;hb=1d9d92ba957a0b8307c9a65c35867fde68e6533b;hpb=0a5395faab237ba9008352b0f4bee9659bbd3d5f diff --git a/functions/string/strtok.c b/functions/string/strtok.c index 1828f39..70d2cd7 100644 --- a/functions/string/strtok.c +++ b/functions/string/strtok.c @@ -1,31 +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 */ }; - -/* 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; } -*/