| 118 |
|
|
| 119 |
/* We also need the pcre_printint() function for printing out compiled |
/* We also need the pcre_printint() function for printing out compiled |
| 120 |
patterns. This function is in a separate file so that it can be included in |
patterns. This function is in a separate file so that it can be included in |
| 121 |
pcre_compile.c when that module is compiled with debugging enabled. |
pcre_compile.c when that module is compiled with debugging enabled. It needs to |
| 122 |
|
know which case is being compiled. */ |
|
The definition of the macro PRINTABLE, which determines whether to print an |
|
|
output character as-is or as a hex value when showing compiled patterns, is |
|
|
contained in this file. We uses it here also, in cases when the locale has not |
|
|
been explicitly changed, so as to get consistent output from systems that |
|
|
differ in their output from isprint() even in the "C" locale. */ |
|
| 123 |
|
|
| 124 |
|
#define COMPILING_PCRETEST |
| 125 |
#include "pcre_printint.src" |
#include "pcre_printint.src" |
| 126 |
|
|
| 127 |
#define PRINTHEX(c) (locale_set? isprint(c) : PRINTABLE(c)) |
/* The definition of the macro PRINTABLE, which determines whether to print an |
| 128 |
|
output character as-is or as a hex value when showing compiled patterns, is |
| 129 |
|
contained in the printint.src file. We uses it here also, in cases when the |
| 130 |
|
locale has not been explicitly changed, so as to get consistent output from |
| 131 |
|
systems that differ in their output from isprint() even in the "C" locale. */ |
| 132 |
|
|
| 133 |
|
#define PRINTHEX(c) (locale_set? isprint(c) : PRINTABLE(c)) |
| 134 |
|
|
| 135 |
/* It is possible to compile this test program without including support for |
/* It is possible to compile this test program without including support for |
| 136 |
testing the POSIX interface, though this is not available via the standard |
testing the POSIX interface, though this is not available via the standard |
| 1306 |
if ((options & PCRE_DOTALL) != 0) cflags |= REG_DOTALL; |
if ((options & PCRE_DOTALL) != 0) cflags |= REG_DOTALL; |
| 1307 |
if ((options & PCRE_NO_AUTO_CAPTURE) != 0) cflags |= REG_NOSUB; |
if ((options & PCRE_NO_AUTO_CAPTURE) != 0) cflags |= REG_NOSUB; |
| 1308 |
if ((options & PCRE_UTF8) != 0) cflags |= REG_UTF8; |
if ((options & PCRE_UTF8) != 0) cflags |= REG_UTF8; |
| 1309 |
if ((options & PCRE_UNGREEDY) != 0) cflags |= REG_UNGREEDY; |
if ((options & PCRE_UNGREEDY) != 0) cflags |= REG_UNGREEDY; |
| 1310 |
|
|
| 1311 |
rc = regcomp(&preg, (char *)p, cflags); |
rc = regcomp(&preg, (char *)p, cflags); |
| 1312 |
|
|
| 1452 |
{ |
{ |
| 1453 |
pcre_study_data *rsd = (pcre_study_data *)(extra->study_data); |
pcre_study_data *rsd = (pcre_study_data *)(extra->study_data); |
| 1454 |
rsd->size = byteflip(rsd->size, sizeof(rsd->size)); |
rsd->size = byteflip(rsd->size, sizeof(rsd->size)); |
| 1455 |
rsd->options = byteflip(rsd->options, sizeof(rsd->options)); |
rsd->flags = byteflip(rsd->flags, sizeof(rsd->flags)); |
| 1456 |
|
rsd->minlength = byteflip(rsd->minlength, sizeof(rsd->minlength)); |
| 1457 |
} |
} |
| 1458 |
} |
} |
| 1459 |
|
|
| 1630 |
else |
else |
| 1631 |
{ |
{ |
| 1632 |
uschar *start_bits = NULL; |
uschar *start_bits = NULL; |
| 1633 |
new_info(re, extra, PCRE_INFO_FIRSTTABLE, &start_bits); |
int minlength; |
| 1634 |
|
|
| 1635 |
|
new_info(re, extra, PCRE_INFO_MINLENGTH, &minlength); |
| 1636 |
|
fprintf(outfile, "Subject length lower bound = %d\n", minlength); |
| 1637 |
|
|
| 1638 |
|
new_info(re, extra, PCRE_INFO_FIRSTTABLE, &start_bits); |
| 1639 |
if (start_bits == NULL) |
if (start_bits == NULL) |
| 1640 |
fprintf(outfile, "No starting byte set\n"); |
fprintf(outfile, "No set of starting bytes\n"); |
| 1641 |
else |
else |
| 1642 |
{ |
{ |
| 1643 |
int i; |
int i; |
| 1976 |
continue; |
continue; |
| 1977 |
|
|
| 1978 |
case 'N': |
case 'N': |
| 1979 |
options |= PCRE_NOTEMPTY; |
if ((options & PCRE_NOTEMPTY) != 0) |
| 1980 |
|
options = (options & ~PCRE_NOTEMPTY) | PCRE_NOTEMPTY_ATSTART; |
| 1981 |
|
else |
| 1982 |
|
options |= PCRE_NOTEMPTY; |
| 1983 |
continue; |
continue; |
| 1984 |
|
|
| 1985 |
case 'O': |
case 'O': |
| 2002 |
continue; |
continue; |
| 2003 |
|
|
| 2004 |
case 'P': |
case 'P': |
| 2005 |
options |= ((options & PCRE_PARTIAL_SOFT) == 0)? |
options |= ((options & PCRE_PARTIAL_SOFT) == 0)? |
| 2006 |
PCRE_PARTIAL_SOFT : PCRE_PARTIAL_HARD; |
PCRE_PARTIAL_SOFT : PCRE_PARTIAL_HARD; |
| 2007 |
continue; |
continue; |
| 2008 |
|
|
| 2156 |
{ |
{ |
| 2157 |
int workspace[1000]; |
int workspace[1000]; |
| 2158 |
for (i = 0; i < timeitm; i++) |
for (i = 0; i < timeitm; i++) |
| 2159 |
count = pcre_dfa_exec(re, NULL, (char *)bptr, len, start_offset, |
count = pcre_dfa_exec(re, extra, (char *)bptr, len, start_offset, |
| 2160 |
options | g_notempty, use_offsets, use_size_offsets, workspace, |
options | g_notempty, use_offsets, use_size_offsets, workspace, |
| 2161 |
sizeof(workspace)/sizeof(int)); |
sizeof(workspace)/sizeof(int)); |
| 2162 |
} |
} |
| 2219 |
else if (all_use_dfa || use_dfa) |
else if (all_use_dfa || use_dfa) |
| 2220 |
{ |
{ |
| 2221 |
int workspace[1000]; |
int workspace[1000]; |
| 2222 |
count = pcre_dfa_exec(re, NULL, (char *)bptr, len, start_offset, |
count = pcre_dfa_exec(re, extra, (char *)bptr, len, start_offset, |
| 2223 |
options | g_notempty, use_offsets, use_size_offsets, workspace, |
options | g_notempty, use_offsets, use_size_offsets, workspace, |
| 2224 |
sizeof(workspace)/sizeof(int)); |
sizeof(workspace)/sizeof(int)); |
| 2225 |
if (count == 0) |
if (count == 0) |
| 2378 |
{ |
{ |
| 2379 |
fprintf(outfile, ": "); |
fprintf(outfile, ": "); |
| 2380 |
pchars(bptr + use_offsets[0], use_offsets[1] - use_offsets[0], |
pchars(bptr + use_offsets[0], use_offsets[1] - use_offsets[0], |
| 2381 |
outfile); |
outfile); |
| 2382 |
} |
} |
| 2383 |
fprintf(outfile, "\n"); |
fprintf(outfile, "\n"); |
| 2384 |
break; /* Out of the /g loop */ |
break; /* Out of the /g loop */ |
| 2385 |
} |
} |
| 2452 |
if (!do_g && !do_G) break; |
if (!do_g && !do_G) break; |
| 2453 |
|
|
| 2454 |
/* If we have matched an empty string, first check to see if we are at |
/* If we have matched an empty string, first check to see if we are at |
| 2455 |
the end of the subject. If so, the /g loop is over. Otherwise, mimic |
the end of the subject. If so, the /g loop is over. Otherwise, mimic what |
| 2456 |
what Perl's /g options does. This turns out to be rather cunning. First |
Perl's /g options does. This turns out to be rather cunning. First we set |
| 2457 |
we set PCRE_NOTEMPTY and PCRE_ANCHORED and try the match again at the |
PCRE_NOTEMPTY_ATSTART and PCRE_ANCHORED and try the match again at the |
| 2458 |
same point. If this fails (picked up above) we advance to the next |
same point. If this fails (picked up above) we advance to the next |
| 2459 |
character. */ |
character. */ |
| 2460 |
|
|
| 2463 |
if (use_offsets[0] == use_offsets[1]) |
if (use_offsets[0] == use_offsets[1]) |
| 2464 |
{ |
{ |
| 2465 |
if (use_offsets[0] == len) break; |
if (use_offsets[0] == len) break; |
| 2466 |
g_notempty = PCRE_NOTEMPTY | PCRE_ANCHORED; |
g_notempty = PCRE_NOTEMPTY_ATSTART | PCRE_ANCHORED; |
| 2467 |
} |
} |
| 2468 |
|
|
| 2469 |
/* For /g, update the start offset, leaving the rest alone */ |
/* For /g, update the start offset, leaving the rest alone */ |