]> pd.if.org Git - zos/blobdiff - klib/strtok.c
klib and makefile
[zos] / klib / strtok.c
diff --git a/klib/strtok.c b/klib/strtok.c
new file mode 100644 (file)
index 0000000..d3595a3
--- /dev/null
@@ -0,0 +1,52 @@
+#include <string.h>
+
+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;
+}