From a889bb181db6afe42b8a55ad721066ed8121238e Mon Sep 17 00:00:00 2001 From: Philippe Houdoin Date: Mon, 4 Oct 2004 23:44:15 +0000 Subject: [PATCH] Add thread-safe strtok_r() function. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9192 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kernel/libroot/posix/string/strtok.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/kernel/libroot/posix/string/strtok.c b/src/kernel/libroot/posix/string/strtok.c index d5538d3f7d..1db66098d9 100644 --- a/src/kernel/libroot/posix/string/strtok.c +++ b/src/kernel/libroot/posix/string/strtok.c @@ -6,27 +6,38 @@ #include #include - static char *___strtok = NULL; char * -strtok(char *s, char const *ct) +strtok_r(char *s, char const *ct, char **save_ptr) { char *sbegin, *send; + + if (!s && !save_ptr) + return NULL; - sbegin = s ? s : ___strtok; + sbegin = s ? s : *save_ptr; if (!sbegin) { return NULL; } sbegin += strspn(sbegin,ct); if (*sbegin == '\0') { - ___strtok = NULL; + if (save_ptr) + *save_ptr = NULL; return NULL; } send = strpbrk(sbegin, ct); if (send && *send != '\0') *send++ = '\0'; - ___strtok = send; + if (save_ptr) + *save_ptr = send; return sbegin; } + +char * +strtok(char *s, char const *ct) +{ + return strtok_r(s, ct, &___strtok); +} +