Messages in this thread Patch in this message | | | Date | Mon, 12 Jul 1999 19:57:39 +0200 (CEST) | From | Ingo Oeser <> | Subject | [PATCH] strtok() -> strsep() Part 2.1 |
| |
Hi all, Dear Linus,
thanks for including my first patch of this issue. But we are not finished, yet.
Part 2.1 of a patch (against 2.3.10) that is going to remove strtok() entirely.
Modifications done:
* Fixed an typo, that breaks the bevavior and causes Oopses/core dumps
* changed strsep() behave like the one in libc (which accepts empty tokens, and returns them)
* implemented strsepe, that skips empty tokens (as strtok() does)
* exported strsep() and strsepe() for every architecture, that exports strtok()
PS: Linus: Part 2.2 will go to linux-kernel only, because it affects more than your code.
Thanks and regards
Ingo Oeser
diff -ru linux-2.3.10.vanilla/arch/alpha/kernel/alpha_ksyms.c linux/arch/alpha/kernel/alpha_ksyms.c --- linux-2.3.10.vanilla/arch/alpha/kernel/alpha_ksyms.c Tue Jun 22 19:46:52 1999 +++ linux/arch/alpha/kernel/alpha_ksyms.c Sun Jul 11 19:48:08 1999 @@ -88,6 +88,8 @@ EXPORT_SYMBOL(strncat); EXPORT_SYMBOL(strstr); EXPORT_SYMBOL(strtok); +EXPORT_SYMBOL(strsep); +EXPORT_SYMBOL(strsepe); EXPORT_SYMBOL(strpbrk); EXPORT_SYMBOL(strchr); EXPORT_SYMBOL(strrchr); diff -ru linux-2.3.10.vanilla/arch/arm/kernel/armksyms.c linux/arch/arm/kernel/armksyms.c --- linux-2.3.10.vanilla/arch/arm/kernel/armksyms.c Thu Jun 17 10:11:35 1999 +++ linux/arch/arm/kernel/armksyms.c Sun Jul 11 19:51:20 1999 @@ -153,6 +153,8 @@ EXPORT_SYMBOL_NOVERS(strspn); EXPORT_SYMBOL_NOVERS(strpbrk); EXPORT_SYMBOL_NOVERS(strtok); +EXPORT_SYMBOL_NOVERS(strsep); +EXPORT_SYMBOL_NOVERS(strsepe); EXPORT_SYMBOL_NOVERS(strrchr); EXPORT_SYMBOL_NOVERS(memset); EXPORT_SYMBOL_NOVERS(memcpy); diff -ru linux-2.3.10.vanilla/arch/i386/kernel/i386_ksyms.c linux/arch/i386/kernel/i386_ksyms.c --- linux-2.3.10.vanilla/arch/i386/kernel/i386_ksyms.c Tue Jun 29 18:59:26 1999 +++ linux/arch/i386/kernel/i386_ksyms.c Sun Jul 11 19:47:22 1999 @@ -62,6 +62,8 @@ EXPORT_SYMBOL_NOVERS(__put_user_4); EXPORT_SYMBOL(strtok); +EXPORT_SYMBOL(strsep); +EXPORT_SYMBOL(strsepe); EXPORT_SYMBOL(strpbrk); EXPORT_SYMBOL(strstr); diff -ru linux-2.3.10.vanilla/arch/mips/kernel/mips_ksyms.c linux/arch/mips/kernel/mips_ksyms.c --- linux-2.3.10.vanilla/arch/mips/kernel/mips_ksyms.c Sat Jun 26 02:40:12 1999 +++ linux/arch/mips/kernel/mips_ksyms.c Sun Jul 11 19:49:41 1999 @@ -51,6 +51,8 @@ EXPORT_SYMBOL_NOVERS(strnlen); EXPORT_SYMBOL_NOVERS(strrchr); EXPORT_SYMBOL_NOVERS(strtok); +EXPORT_SYMBOL_NOVERS(strsep); +EXPORT_SYMBOL_NOVERS(strsepe); EXPORT_SYMBOL_NOVERS(strpbrk); EXPORT_SYMBOL(clear_page); diff -ru linux-2.3.10.vanilla/arch/ppc/kernel/ppc_ksyms.c linux/arch/ppc/kernel/ppc_ksyms.c --- linux-2.3.10.vanilla/arch/ppc/kernel/ppc_ksyms.c Mon Jun 28 22:40:39 1999 +++ linux/arch/ppc/kernel/ppc_ksyms.c Sun Jul 11 19:50:09 1999 @@ -106,6 +106,8 @@ EXPORT_SYMBOL(strrchr); EXPORT_SYMBOL(strpbrk); EXPORT_SYMBOL(strtok); +EXPORT_SYMBOL(strsep); +EXPORT_SYMBOL(strsepe); EXPORT_SYMBOL(strstr); EXPORT_SYMBOL(strlen); EXPORT_SYMBOL(strnlen); diff -ru linux-2.3.10.vanilla/arch/sparc/kernel/sparc_ksyms.c linux/arch/sparc/kernel/sparc_ksyms.c --- linux-2.3.10.vanilla/arch/sparc/kernel/sparc_ksyms.c Tue Jul 6 05:35:17 1999 +++ linux/arch/sparc/kernel/sparc_ksyms.c Sun Jul 11 19:48:50 1999 @@ -236,6 +236,8 @@ EXPORT_SYMBOL(strchr); EXPORT_SYMBOL(strrchr); EXPORT_SYMBOL(strpbrk); +EXPORT_SYMBOL(strsep); +EXPORT_SYMBOL(strsepe); EXPORT_SYMBOL(strtok); EXPORT_SYMBOL(strstr); EXPORT_SYMBOL(strspn); diff -ru linux-2.3.10.vanilla/arch/sparc64/kernel/sparc64_ksyms.c linux/arch/sparc64/kernel/sparc64_ksyms.c --- linux-2.3.10.vanilla/arch/sparc64/kernel/sparc64_ksyms.c Tue Jul 6 05:35:18 1999 +++ linux/arch/sparc64/kernel/sparc64_ksyms.c Sun Jul 11 19:50:24 1999 @@ -256,6 +256,8 @@ EXPORT_SYMBOL(strrchr); EXPORT_SYMBOL(strpbrk); EXPORT_SYMBOL(strtok); +EXPORT_SYMBOL(strsep); +EXPORT_SYMBOL(strsepe); EXPORT_SYMBOL(strstr); EXPORT_SYMBOL(strspn); diff -ru linux-2.3.10.vanilla/include/linux/string.h linux/include/linux/string.h --- linux-2.3.10.vanilla/include/linux/string.h Fri Jun 25 23:35:42 1999 +++ linux/include/linux/string.h Sun Jul 11 19:04:05 1999 @@ -21,6 +21,10 @@ extern char * strpbrk(const char *,const char *); extern char * strtok(char *,const char *); extern char * strsep(char **,const char *); +#ifdef __KERNEL__ +/* temporary strtok() replacement, please don't use it in new code! -ioe */ +extern char * strsepe(char **,const char *); +#endif /* __KERNEL__ */ extern char * strstr(const char *,const char *); extern __kernel_size_t strlen(const char *); extern __kernel_size_t strnlen(const char *,__kernel_size_t); diff -ru linux-2.3.10.vanilla/lib/string.c linux/lib/string.c --- linux-2.3.10.vanilla/lib/string.c Tue Jul 6 05:02:10 1999 +++ linux/lib/string.c Sun Jul 11 18:55:48 1999 @@ -240,17 +240,40 @@ char * strsep(char **s, const char * ct) { - char *sbegin=*s; - if (!sbegin) + char *sbegin; + if (!s || !(*s)) + return NULL; + + sbegin=*s; + + if (*sbegin == '\0') return NULL; + *s = strpbrk( sbegin, ct); + if (*s && **s != '\0') + *(*s)++ = '\0'; + return (sbegin); +} +#endif + +#ifndef __HAVE_ARCH_STRSEPE + +/* Same as strsep, but skips empty tokens. */ +char * strsepe(char **s, const char * ct) +{ + char *sbegin; + if (!s || !(*s)) + return NULL; + + sbegin=*s; + sbegin += strspn(sbegin,ct); if (*sbegin == '\0') return NULL; *s = strpbrk( sbegin, ct); if (*s && **s != '\0') - **s++ = '\0'; + *(*s)++ = '\0'; return (sbegin); } #endif -- Feel the power of the penguin - run linux@your.pc <esc>:x
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |