X-Git-Url: https://pd.if.org/git/?p=zos;a=blobdiff_plain;f=klib%2Fstrtok.c;fp=klib%2Fstrtok.c;h=d3595a31cdfcc0e0224e2eeade67f7537c4c05ad;hp=0000000000000000000000000000000000000000;hb=5c0e560e481e2e97b793f7574e849a5882781df9;hpb=e57b692bd3a86ee40fd89416a06fd696f1ff3bf9 diff --git a/klib/strtok.c b/klib/strtok.c new file mode 100644 index 0000000..d3595a3 --- /dev/null +++ b/klib/strtok.c @@ -0,0 +1,52 @@ +#include + +char *strtok(char *s1, const char *s2) { + static char *tmp = NULL; + const char *p = s2; + + if (s1 != NULL) { + /* new string */ + tmp = s1; + } else { + /* old string continued */ + if (tmp == NULL) { + /* No old string, no new string, nothing to do */ + return NULL; + } + s1 = tmp; + } + + /* skipping leading s2 characters */ + while (*p && *s1) { + if ( *s1 == *p ) { + /* found seperator; skip and start over */ + ++s1; + p = s2; + continue; + } + ++p; + } + + if (!*s1) { + /* no more to parse */ + return ( tmp = NULL ); + } + + /* skipping non-s2 characters */ + tmp = s1; + while (*tmp) { + p = s2; + while (*p) { + if (*tmp == *p++) { + /* found seperator; overwrite with '\0', position tmp, return */ + *tmp++ = '\0'; + return s1; + } + } + ++tmp; + } + + /* parsed to end of string */ + tmp = NULL; + return s1; +}