
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"