diff options
Diffstat (limited to 'lib_generic/string.c')
-rw-r--r-- | lib_generic/string.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/lib_generic/string.c b/lib_generic/string.c index b375b8124..6e69457e5 100644 --- a/lib_generic/string.c +++ b/lib_generic/string.c @@ -307,6 +307,53 @@ char * strpbrk(const char * cs,const char * ct) } #endif +#ifndef __HAVE_ARCH_STRTOK_R +/** + * strtok - Split a string into tokens + * @s: The string to be searched + * @ct: The characters to search for + * + * Dumped from rockbox-3.1 strok.c: + * Copyright (C) 2002 by Daniel Stenberg + * $Id: strtok.c 17847 2008-06-28 18:10:04Z bagder $ + */ +char * +strtok_r(char *ptr, const char *sep, char **end) +{ + if (!ptr) + /* we got NULL input so then we get our last position instead */ + ptr = *end; + + /* pass all letters that are including in the separator string */ + while (*ptr && strchr(sep, *ptr)) + ++ptr; + + if (*ptr) { + /* so this is where the next piece of string starts */ + char *start = ptr; + + /* set the end pointer to the first byte after the start */ + *end = start + 1; + + /* scan through the string to find where it ends, it ends on a + null byte or a character that exists in the separator string */ + while (**end && !strchr(sep, **end)) + ++*end; + + if (**end) { + /* the end is not a null byte */ + **end = '\0'; /* zero terminate it! */ + ++*end; /* advance last pointer to beyond the null byte */ + } + + return start; /* return the position where the string starts */ + } + + /* we ended up on a null byte, there are no more strings to find! */ + return NULL; +} +#endif + #ifndef __HAVE_ARCH_STRTOK /** * strtok - Split a string into tokens |