mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-27 11:43:34 +08:00
bc795d0b30
* sysdeps/i386/i686/strtok.S: Store pointer to NUL byte if NULL is returned. * sysdeps/i386/strtok.S: Likewise. * sysdeps/x86_64/strtok.S: Likewise. * string/Makefile (tests): Add bug-strtok1. * string/bug-strtok1.c: New file.
46 lines
1.3 KiB
C
46 lines
1.3 KiB
C
/* See BZ #2126. */
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
|
|
static int
|
|
do_test (void)
|
|
{
|
|
const char str[] = "axaaba";
|
|
char *token;
|
|
char *cp;
|
|
char *l;
|
|
int result = 0;
|
|
|
|
puts ("test strtok");
|
|
cp = strdupa (str);
|
|
printf ("cp = %p, len = %zu\n", cp, strlen (cp));
|
|
token = strtok (cp, "ab");
|
|
result |= token == NULL || strcmp (token, "x");
|
|
printf ("token: %s (%d)\n", token ? token : "NULL", result);
|
|
token = strtok(0, "ab");
|
|
result |= token != NULL;
|
|
printf ("token: %s (%d)\n", token ? token : "NULL", result);
|
|
token = strtok(0, "a");
|
|
result |= token != NULL;
|
|
printf ("token: %s (%d)\n", token ? token : "NULL", result);
|
|
|
|
puts ("test strtok_r");
|
|
cp = strdupa (str);
|
|
size_t len = strlen (cp);
|
|
printf ("cp = %p, len = %zu\n", cp, len);
|
|
token = strtok_r (cp, "ab", &l);
|
|
result |= token == NULL || strcmp (token, "x");
|
|
printf ("token: %s, next = %p (%d)\n", token ? token : "NULL", l, result);
|
|
token = strtok_r(0, "ab", &l);
|
|
result |= token != NULL || l != cp + len;
|
|
printf ("token: %s, next = %p (%d)\n", token ? token : "NULL", l, result);
|
|
token = strtok_r(0, "a", &l);
|
|
result |= token != NULL || l != cp + len;
|
|
printf ("token: %s, next = %p (%d)\n", token ? token : "NULL", l, result);
|
|
|
|
return result;
|
|
}
|
|
|
|
#define TEST_FUNCTION do_test ()
|
|
#include "../test-skeleton.c"
|