1/* See BZ #2126. */
2#include <string.h>
3#include <stdio.h>
4
5int
6do_test (void)
7{
8 const char str[] = "axaaba";
9 char *token;
10 char *cp;
11 char *l;
12 int result = 0;
13
14 puts (s: "test strtok");
15 cp = strdupa (str);
16 printf (format: "cp = %p, len = %zu\n", cp, strlen (cp));
17 token = strtok (s: cp, delim: "ab");
18 result |= token == NULL || strcmp (token, "x");
19 printf (format: "token: %s (%d)\n", token ? token : "NULL", result);
20 token = strtok(s: 0, delim: "ab");
21 result |= token != NULL;
22 printf (format: "token: %s (%d)\n", token ? token : "NULL", result);
23 token = strtok(s: 0, delim: "a");
24 result |= token != NULL;
25 printf (format: "token: %s (%d)\n", token ? token : "NULL", result);
26
27 puts (s: "test strtok_r");
28 cp = strdupa (str);
29 size_t len = strlen (cp);
30 printf (format: "cp = %p, len = %zu\n", cp, len);
31 token = strtok_r (s: cp, delim: "ab", save_ptr: &l);
32 result |= token == NULL || strcmp (token, "x");
33 printf (format: "token: %s, next = %p (%d)\n", token ? token : "NULL", l, result);
34 token = strtok_r(s: 0, delim: "ab", save_ptr: &l);
35 result |= token != NULL || l != cp + len;
36 printf (format: "token: %s, next = %p (%d)\n", token ? token : "NULL", l, result);
37 token = strtok_r(s: 0, delim: "a", save_ptr: &l);
38 result |= token != NULL || l != cp + len;
39 printf (format: "token: %s, next = %p (%d)\n", token ? token : "NULL", l, result);
40
41 return result;
42}
43
44#include <support/test-driver.c>
45

source code of glibc/string/bug-strtok1.c