]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - string/strtok.c
powerpc: Fix build of wcscpy with --disable-multi-arch
[thirdparty/glibc.git] / string / strtok.c
index f45b760f74aea23ad57a63fe0da207b97d96751b..2eebc0a0dc9e4ce3bf3728d6361b691093c9b913 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,1996,1997,1999,2000,2001 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2019 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
 
 #include <string.h>
 
 
-static char *olds;
-
-#undef strtok
-
 /* Parse S into tokens separated by characters in DELIM.
    If S is NULL, the last string strtok() was called with is
    used.  For example:
@@ -30,37 +25,11 @@ static char *olds;
        x = strtok(s, "-");             // x = "abc"
        x = strtok(NULL, "-=");         // x = "def"
        x = strtok(NULL, "=");          // x = NULL
-               // s = "abc\0-def\0"
+               // s = "abc\0=-def\0"
 */
 char *
-strtok (s, delim)
-     char *s;
-     const char *delim;
+strtok (char *s, const char *delim)
 {
-  char *token;
-
-  if (s == NULL)
-    s = olds;
-
-  /* Scan leading delimiters.  */
-  s += strspn (s, delim);
-  if (*s == '\0')
-    {
-      olds = s;
-      return NULL;
-    }
-
-  /* Find the end of the token.  */
-  token = s;
-  s = strpbrk (token, delim);
-  if (s == NULL)
-    /* This token finishes the string.  */
-    olds = __rawmemchr (token, '\0');
-  else
-    {
-      /* Terminate the token and make OLDS point past it.  */
-      *s = '\0';
-      olds = s + 1;
-    }
-  return token;
+  static char *olds;
+  return __strtok_r (s, delim, &olds);
 }