mirror of https://gitee.com/Nocallback/glibc.git
Browse Source
2004-11-12 Ulrich Drepper <drepper@redhat.com> * posix/Makefile (tests): Add bug-regex24. * posix/bug-regex24.c: New file. 2004-11-12 Paolo Bonzini <bonzini@gnu.org> * posix/regexec.c (check_dst_limits_calc_pos_1): Use the map to cut recursive paths. Make exit condition more precise. (match_ctx_add_entry): Initialize the map. * posix/regex_internal.h (struct re_backref_cache_entry): Add a map of reachable subexpression nodes from each backreference cache entry.cvs/glibc-2_3-branch cvs/fedora-glibc-20041112T1640
5 changed files with 99 additions and 7 deletions
@ -0,0 +1,59 @@ |
|||
#include <regex.h> |
|||
#include <stdio.h> |
|||
|
|||
#define str "civic" |
|||
|
|||
#define N 10 |
|||
static const char *expected[N] = |
|||
{ |
|||
str, "c", "i", "", "", "", "", "", "", "" |
|||
}; |
|||
|
|||
static int |
|||
do_test (void) |
|||
{ |
|||
regex_t rbuf; |
|||
static const char pat[] = "\
|
|||
^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$"; |
|||
|
|||
int err = regcomp (&rbuf, pat, REG_EXTENDED); |
|||
if (err != 0) |
|||
{ |
|||
char errstr[300]; |
|||
regerror (err, &rbuf, errstr, sizeof (errstr)); |
|||
puts (errstr); |
|||
return err; |
|||
} |
|||
|
|||
regmatch_t m[N]; |
|||
err = regexec (&rbuf, str, N, m, 0); |
|||
if (err != 0) |
|||
{ |
|||
puts ("regexec failed"); |
|||
return 1; |
|||
} |
|||
|
|||
int result = 0; |
|||
for (int i = 0; i < N; ++i) |
|||
if (m[i].rm_so == -1) |
|||
{ |
|||
printf ("m[%d] unused\n", i); |
|||
result = 1; |
|||
} |
|||
else |
|||
{ |
|||
int len = m[i].rm_eo - m[i].rm_so; |
|||
|
|||
printf ("m[%d] = \"%.*s\"\n", i, len, str + m[i].rm_so); |
|||
|
|||
if (strlen (expected[i]) != len |
|||
|| memcmp (expected[i], str + m[i].rm_so, len) != 0) |
|||
result = 1; |
|||
} |
|||
|
|||
return result; |
|||
} |
|||
|
|||
#define TIMEOUT 30 |
|||
#define TEST_FUNCTION do_test () |
|||
#include "../test-skeleton.c" |
|||
Loading…
Reference in new issue