Update.
authorUlrich Drepper <drepper@redhat.com>
Wed, 21 Feb 2001 15:39:07 +0000 (15:39 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 21 Feb 2001 15:39:07 +0000 (15:39 +0000)
2001-02-21  Ulrich Drepper  <drepper@redhat.com>

* sysdeps/i386/i686/strtok.S: Continue to return NULL after the
first time this happened.

2001-02-21  Andreas Jaeger  <aj@suse.de>

* string/tst-strtok.c: New testcase, reported by
Andrew Church <achurch@achurch.org>.

ChangeLog
string/tst-strtok.c [new file with mode: 0644]
sysdeps/i386/i686/strtok.S

index 9b9f2e9..c09932b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2001-02-21  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/i386/i686/strtok.S: Continue to return NULL after the
+       first time this happened.
+
+2001-02-21  Andreas Jaeger  <aj@suse.de>
+
+       * string/tst-strtok.c: New testcase, reported by
+       Andrew Church <achurch@achurch.org>.
+
 2001-02-20  Ulrich Drepper  <drepper@redhat.com>
 
        * libio/iofwide.c: Remove fwide alias.
diff --git a/string/tst-strtok.c b/string/tst-strtok.c
new file mode 100644 (file)
index 0000000..ed3400d
--- /dev/null
@@ -0,0 +1,23 @@
+/* Testcase for strtok reported by Andrew Church <achurch@achurch.org>.  */
+#include <stdio.h>
+#include <string.h>
+
+int
+main (void)
+{
+  char buf[1] = { 0 };
+  int result = 0;
+
+  if (strtok (buf, " ") != NULL)
+    {
+      puts ("first strtok call did return NULL");
+      result = 1;
+    }
+  else if (strtok (NULL, " ") != NULL)
+    {
+      puts ("second strtok call did return NULL");
+      result = 1;
+    }
+
+  return result;
+}
index a982a4a..e21b5f6 100644 (file)
@@ -1,6 +1,6 @@
 /* strtok (str, delim) -- Return next DELIM separated token from STR.
    For Intel 80686.
-   Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -123,6 +123,8 @@ ENTRY (BP_SYM (FUNCTION))
           the last run.  */
        cmpl $0, %edx
        cmove %eax, %edx
+       testl %edx, %edx
+       jz L(returnNULL)
 #if __BOUNDED_POINTERS__
 # ifdef USE_AS_STRTOK_R
        movl SAVE(%esp), %ecx   /* borrow %ecx for a moment */