[BZ #5614]
authorUlrich Drepper <drepper@redhat.com>
Tue, 15 Jan 2008 19:11:51 +0000 (19:11 +0000)
committerUlrich Drepper <drepper@redhat.com>
Tue, 15 Jan 2008 19:11:51 +0000 (19:11 +0000)
2008-01-15  Ulrich Drepper  <drepper@redhat.com>
[BZ #5614]
* string/bits/string2.h (__strtok_r_1c): Always update *__NEXTP.
(__strtok_r): Simplify.
* string/tester.c (test_strtok_r): Add test case for futile search
with single-character seach string.

ChangeLog
string/bits/string2.h
string/tester.c

index 3fa1637..92e86ae 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-01-15  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #5614]
+       * string/bits/string2.h (__strtok_r_1c): Always update *__NEXTP.
+       (__strtok_r): Simplify.
+       * string/tester.c (test_strtok_r): Add test case for futile search
+       with single-character seach string.
+
 2008-01-12  Ulrich Drepper  <drepper@redhat.com>
 
        * po/ko.po: Update from translation team.
index 6a18a1a..d298bed 100644 (file)
@@ -1,5 +1,5 @@
 /* Machine-independant string function optimizations.
-   Copyright (C) 1997-2003, 2004, 2007 Free Software Foundation, Inc.
+   Copyright (C) 1997-2003, 2004, 2007, 2008 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -1163,10 +1163,9 @@ __strpbrk_c3 (__const char *__s, int __accept1, int __accept2,
 # ifndef _HAVE_STRING_ARCH_strtok_r
 #  define __strtok_r(s, sep, nextp) \
   (__extension__ (__builtin_constant_p (sep) && __string2_1bptr_p (sep)              \
-                 ? (((__const char *) (sep))[0] != '\0'                      \
-                    && ((__const char *) (sep))[1] == '\0'                   \
-                    ? __strtok_r_1c (s, ((__const char *) (sep))[0], nextp)  \
-                    : __strtok_r (s, sep, nextp))                            \
+                 && ((__const char *) (sep))[0] != '\0'                      \
+                 && ((__const char *) (sep))[1] == '\0'                      \
+                 ? __strtok_r_1c (s, ((__const char *) (sep))[0], nextp)     \
                  : __strtok_r (s, sep, nextp)))
 # endif
 
@@ -1189,8 +1188,8 @@ __strtok_r_1c (char *__s, char __sep, char **__nextp)
            __s[-1] = '\0';
            break;
          }
-      *__nextp = __s;
     }
+  *__nextp = __s;
   return __result;
 }
 # if defined __USE_POSIX || defined __USE_MISC
index cccef3a..1c0efe0 100644 (file)
@@ -1,5 +1,5 @@
 /* Tester for string functions.
-   Copyright (C) 1995-2001, 2003, 2005 Free Software Foundation, Inc.
+   Copyright (C) 1995-2001, 2003, 2005, 2008 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
@@ -840,9 +840,13 @@ test_strtok_r (void)
   equal(strtok_r((char *)NULL, ",", &cp), "c", 29);
   check(strtok_r((char *)NULL, ",", &cp) == NULL, 30);
   equal(one+6, "gh", 31);                      /* Stomped past end? */
-  equal(one, "a", 32);                 /* Stomped old tokens? */
+  equal(one, "a", 32);                         /* Stomped old tokens? */
   equal(one+2, "b", 33);
   equal(one+4, "c", 34);
+  strcpy (one, ":::");
+  cp = NULL;
+  check (strtok_r (one, ":", &cp) == NULL, 35);        /* Must store pointer in cp. */
+  check (strtok_r (NULL, ":", &cp) == NULL, 36);
 }
 
 static void