diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2013-03-14 05:42:27 +0000 |
---|---|---|
committer | <> | 2013-04-03 16:25:08 +0000 |
commit | c4dd7a1a684490673e25aaf4fabec5df138854c4 (patch) | |
tree | 4d57c44caae4480efff02b90b9be86f44bf25409 /TSRM/tsrm_strtok_r.c | |
download | php2-c4dd7a1a684490673e25aaf4fabec5df138854c4.tar.gz |
Imported from /home/lorry/working-area/delta_php2/php-5.4.13.tar.bz2.HEADphp-5.4.13master
Diffstat (limited to 'TSRM/tsrm_strtok_r.c')
-rw-r--r-- | TSRM/tsrm_strtok_r.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/TSRM/tsrm_strtok_r.c b/TSRM/tsrm_strtok_r.c new file mode 100644 index 0000000..e9ad26a --- /dev/null +++ b/TSRM/tsrm_strtok_r.c @@ -0,0 +1,63 @@ +#include <stdio.h> + +#include "tsrm_config_common.h" +#include "tsrm_strtok_r.h" + +static inline int in_character_class(char ch, const char *delim) +{ + while (*delim) { + if (*delim == ch) { + return 1; + } + delim++; + } + return 0; +} + +char *tsrm_strtok_r(char *s, const char *delim, char **last) +{ + char *token; + + if (s == NULL) { + s = *last; + } + + while (*s && in_character_class(*s, delim)) { + s++; + } + if (!*s) { + return NULL; + } + + token = s; + + while (*s && !in_character_class(*s, delim)) { + s++; + } + if (!*s) { + *last = s; + } else { + *s = '\0'; + *last = s + 1; + } + return token; +} + +#if 0 + +main() +{ + char foo[] = "/foo/bar//\\barbara"; + char *last; + char *token; + + token = tsrm_strtok_r(foo, "/\\", &last); + while (token) { + printf ("Token = '%s'\n", token); + token = tsrm_strtok_r(NULL, "/\\", &last); + } + + return 0; +} + +#endif |