IA64: Move NPTL public headers to sysdeps/ia64/nptl/.
[platform/upstream/glibc.git] / posix / bug-regex24.c
1 #include <regex.h>
2 #include <stdio.h>
3 #include <string.h>
4
5 #define str "civic"
6
7 #define N 10
8 static const char *expected[N] =
9   {
10     str, "c", "i", "", "", "", "", "", "", ""
11   };
12
13 static int
14 do_test (void)
15 {
16   regex_t rbuf;
17   static const char pat[] = "\
18 ^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$";
19
20   int err = regcomp (&rbuf, pat, REG_EXTENDED);
21   if (err != 0)
22     {
23       char errstr[300];
24       regerror (err, &rbuf, errstr, sizeof (errstr));
25       puts (errstr);
26       return err;
27     }
28
29   regmatch_t m[N];
30   err = regexec (&rbuf, str, N, m, 0);
31   if (err != 0)
32     {
33       puts ("regexec failed");
34       return 1;
35     }
36
37   int result = 0;
38   for (int i = 0; i < N; ++i)
39     if (m[i].rm_so == -1)
40       {
41         printf ("m[%d] unused\n", i);
42         result = 1;
43       }
44     else
45       {
46         int len = m[i].rm_eo - m[i].rm_so;
47
48         printf ("m[%d] = \"%.*s\"\n", i, len, str + m[i].rm_so);
49
50         if (strlen (expected[i]) != len
51             || memcmp (expected[i], str + m[i].rm_so, len) != 0)
52           result = 1;
53       }
54
55   return result;
56 }
57
58 #define TIMEOUT 30
59 #define TEST_FUNCTION do_test ()
60 #include "../test-skeleton.c"