| 1305 |
if ((options & PCRE_DOTALL) != 0) cflags |= REG_DOTALL; |
if ((options & PCRE_DOTALL) != 0) cflags |= REG_DOTALL; |
| 1306 |
if ((options & PCRE_NO_AUTO_CAPTURE) != 0) cflags |= REG_NOSUB; |
if ((options & PCRE_NO_AUTO_CAPTURE) != 0) cflags |= REG_NOSUB; |
| 1307 |
if ((options & PCRE_UTF8) != 0) cflags |= REG_UTF8; |
if ((options & PCRE_UTF8) != 0) cflags |= REG_UTF8; |
| 1308 |
|
if ((options & PCRE_UNGREEDY) != 0) cflags |= REG_UNGREEDY; |
| 1309 |
|
|
| 1310 |
rc = regcomp(&preg, (char *)p, cflags); |
rc = regcomp(&preg, (char *)p, cflags); |
| 1311 |
|
|
| 1451 |
{ |
{ |
| 1452 |
pcre_study_data *rsd = (pcre_study_data *)(extra->study_data); |
pcre_study_data *rsd = (pcre_study_data *)(extra->study_data); |
| 1453 |
rsd->size = byteflip(rsd->size, sizeof(rsd->size)); |
rsd->size = byteflip(rsd->size, sizeof(rsd->size)); |
| 1454 |
rsd->options = byteflip(rsd->options, sizeof(rsd->options)); |
rsd->flags = byteflip(rsd->flags, sizeof(rsd->flags)); |
| 1455 |
|
rsd->minlength = byteflip(rsd->minlength, sizeof(rsd->minlength)); |
| 1456 |
} |
} |
| 1457 |
} |
} |
| 1458 |
|
|
| 1629 |
else |
else |
| 1630 |
{ |
{ |
| 1631 |
uschar *start_bits = NULL; |
uschar *start_bits = NULL; |
| 1632 |
new_info(re, extra, PCRE_INFO_FIRSTTABLE, &start_bits); |
int minlength; |
| 1633 |
|
|
| 1634 |
|
new_info(re, extra, PCRE_INFO_MINLENGTH, &minlength); |
| 1635 |
|
fprintf(outfile, "Subject length lower bound = %d\n", minlength); |
| 1636 |
|
|
| 1637 |
|
new_info(re, extra, PCRE_INFO_FIRSTTABLE, &start_bits); |
| 1638 |
if (start_bits == NULL) |
if (start_bits == NULL) |
| 1639 |
fprintf(outfile, "No starting byte set\n"); |
fprintf(outfile, "No set of starting bytes\n"); |
| 1640 |
else |
else |
| 1641 |
{ |
{ |
| 1642 |
int i; |
int i; |
| 1975 |
continue; |
continue; |
| 1976 |
|
|
| 1977 |
case 'N': |
case 'N': |
| 1978 |
options |= PCRE_NOTEMPTY; |
if ((options & PCRE_NOTEMPTY) != 0) |
| 1979 |
|
options = (options & ~PCRE_NOTEMPTY) | PCRE_NOTEMPTY_ATSTART; |
| 1980 |
|
else |
| 1981 |
|
options |= PCRE_NOTEMPTY; |
| 1982 |
continue; |
continue; |
| 1983 |
|
|
| 1984 |
case 'O': |
case 'O': |
| 2001 |
continue; |
continue; |
| 2002 |
|
|
| 2003 |
case 'P': |
case 'P': |
| 2004 |
options |= ((options & PCRE_PARTIAL_SOFT) == 0)? |
options |= ((options & PCRE_PARTIAL_SOFT) == 0)? |
| 2005 |
PCRE_PARTIAL_SOFT : PCRE_PARTIAL_HARD; |
PCRE_PARTIAL_SOFT : PCRE_PARTIAL_HARD; |
| 2006 |
continue; |
continue; |
| 2007 |
|
|
| 2155 |
{ |
{ |
| 2156 |
int workspace[1000]; |
int workspace[1000]; |
| 2157 |
for (i = 0; i < timeitm; i++) |
for (i = 0; i < timeitm; i++) |
| 2158 |
count = pcre_dfa_exec(re, NULL, (char *)bptr, len, start_offset, |
count = pcre_dfa_exec(re, extra, (char *)bptr, len, start_offset, |
| 2159 |
options | g_notempty, use_offsets, use_size_offsets, workspace, |
options | g_notempty, use_offsets, use_size_offsets, workspace, |
| 2160 |
sizeof(workspace)/sizeof(int)); |
sizeof(workspace)/sizeof(int)); |
| 2161 |
} |
} |
| 2218 |
else if (all_use_dfa || use_dfa) |
else if (all_use_dfa || use_dfa) |
| 2219 |
{ |
{ |
| 2220 |
int workspace[1000]; |
int workspace[1000]; |
| 2221 |
count = pcre_dfa_exec(re, NULL, (char *)bptr, len, start_offset, |
count = pcre_dfa_exec(re, extra, (char *)bptr, len, start_offset, |
| 2222 |
options | g_notempty, use_offsets, use_size_offsets, workspace, |
options | g_notempty, use_offsets, use_size_offsets, workspace, |
| 2223 |
sizeof(workspace)/sizeof(int)); |
sizeof(workspace)/sizeof(int)); |
| 2224 |
if (count == 0) |
if (count == 0) |
| 2377 |
{ |
{ |
| 2378 |
fprintf(outfile, ": "); |
fprintf(outfile, ": "); |
| 2379 |
pchars(bptr + use_offsets[0], use_offsets[1] - use_offsets[0], |
pchars(bptr + use_offsets[0], use_offsets[1] - use_offsets[0], |
| 2380 |
outfile); |
outfile); |
| 2381 |
} |
} |
| 2382 |
fprintf(outfile, "\n"); |
fprintf(outfile, "\n"); |
| 2383 |
break; /* Out of the /g loop */ |
break; /* Out of the /g loop */ |
| 2384 |
} |
} |
| 2451 |
if (!do_g && !do_G) break; |
if (!do_g && !do_G) break; |
| 2452 |
|
|
| 2453 |
/* 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 |
| 2454 |
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 |
| 2455 |
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 |
| 2456 |
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 |
| 2457 |
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 |
| 2458 |
character. */ |
character. */ |
| 2459 |
|
|
| 2462 |
if (use_offsets[0] == use_offsets[1]) |
if (use_offsets[0] == use_offsets[1]) |
| 2463 |
{ |
{ |
| 2464 |
if (use_offsets[0] == len) break; |
if (use_offsets[0] == len) break; |
| 2465 |
g_notempty = PCRE_NOTEMPTY | PCRE_ANCHORED; |
g_notempty = PCRE_NOTEMPTY_ATSTART | PCRE_ANCHORED; |
| 2466 |
} |
} |
| 2467 |
|
|
| 2468 |
/* For /g, update the start offset, leaving the rest alone */ |
/* For /g, update the start offset, leaving the rest alone */ |