(root)/
glibc-2.38/
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"