Back to index

glibc  2.9
bug-regex24.c
Go to the documentation of this file.
00001 #include <regex.h>
00002 #include <stdio.h>
00003 #include <string.h>
00004 
00005 #define str "civic"
00006 
00007 #define N 10
00008 static const char *expected[N] =
00009   {
00010     str, "c", "i", "", "", "", "", "", "", ""
00011   };
00012 
00013 static int
00014 do_test (void)
00015 {
00016   regex_t rbuf;
00017   static const char pat[] = "\
00018 ^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$";
00019 
00020   int err = regcomp (&rbuf, pat, REG_EXTENDED);
00021   if (err != 0)
00022     {
00023       char errstr[300];
00024       regerror (err, &rbuf, errstr, sizeof (errstr));
00025       puts (errstr);
00026       return err;
00027     }
00028 
00029   regmatch_t m[N];
00030   err = regexec (&rbuf, str, N, m, 0);
00031   if (err != 0)
00032     {
00033       puts ("regexec failed");
00034       return 1;
00035     }
00036 
00037   int result = 0;
00038   for (int i = 0; i < N; ++i)
00039     if (m[i].rm_so == -1)
00040       {
00041        printf ("m[%d] unused\n", i);
00042        result = 1;
00043       }
00044     else
00045       {
00046        int len = m[i].rm_eo - m[i].rm_so;
00047 
00048        printf ("m[%d] = \"%.*s\"\n", i, len, str + m[i].rm_so);
00049 
00050        if (strlen (expected[i]) != len
00051            || memcmp (expected[i], str + m[i].rm_so, len) != 0)
00052          result = 1;
00053       }
00054 
00055   return result;
00056 }
00057 
00058 #define TIMEOUT 30
00059 #define TEST_FUNCTION do_test ()
00060 #include "../test-skeleton.c"