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