| 623 |
int repeat_type, op_type; |
int repeat_type, op_type; |
| 624 |
int repeat_min, repeat_max; |
int repeat_min, repeat_max; |
| 625 |
int bravalue, length; |
int bravalue, length; |
| 626 |
|
int greedy_default, greedy_non_default; |
| 627 |
register int c; |
register int c; |
| 628 |
register uschar *code = *codeptr; |
register uschar *code = *codeptr; |
| 629 |
const uschar *ptr = *ptrptr; |
const uschar *ptr = *ptrptr; |
| 631 |
uschar *previous = NULL; |
uschar *previous = NULL; |
| 632 |
uschar class[32]; |
uschar class[32]; |
| 633 |
|
|
| 634 |
|
/* Set up the default and non-default settings for greediness */ |
| 635 |
|
|
| 636 |
|
greedy_default = ((options & PCRE_UNGREEDY) != 0); |
| 637 |
|
greedy_non_default = greedy_default ^ 1; |
| 638 |
|
|
| 639 |
/* Switch on next character until the end of the branch */ |
/* Switch on next character until the end of the branch */ |
| 640 |
|
|
| 641 |
for (;; ptr++) |
for (;; ptr++) |
| 913 |
goto FAILED; |
goto FAILED; |
| 914 |
} |
} |
| 915 |
|
|
| 916 |
/* If the next character is '?' this is a minimizing repeat. Advance to the |
/* If the next character is '?' this is a minimizing repeat, by default, |
| 917 |
|
but if PCRE_UNGREEDY is set, it works the other way round. Advance to the |
| 918 |
next character. */ |
next character. */ |
| 919 |
|
|
| 920 |
if (ptr[1] == '?') { repeat_type = 1; ptr++; } else repeat_type = 0; |
if (ptr[1] == '?') |
| 921 |
|
{ repeat_type = greedy_non_default; ptr++; } |
| 922 |
|
else repeat_type = greedy_default; |
| 923 |
|
|
| 924 |
/* If the maximum is zero then the minimum must also be zero; Perl allows |
/* If the maximum is zero then the minimum must also be zero; Perl allows |
| 925 |
this case, so we do too - by simply omitting the item altogether. */ |
this case, so we do too - by simply omitting the item altogether. */ |
| 1158 |
case 'm': |
case 'm': |
| 1159 |
case 's': |
case 's': |
| 1160 |
case 'x': |
case 'x': |
| 1161 |
|
case 'U': |
| 1162 |
|
case 'X': |
| 1163 |
ptr++; |
ptr++; |
| 1164 |
while (*ptr != ')') ptr++; |
while (*ptr != ')') ptr++; |
| 1165 |
previous = NULL; |
previous = NULL; |
| 1763 |
ptr += 2; |
ptr += 2; |
| 1764 |
break; |
break; |
| 1765 |
} |
} |
| 1766 |
/* Else fall thourh */ |
/* Else fall through */ |
| 1767 |
|
|
| 1768 |
/* Else loop setting valid options until ) is met. Anything else is an |
/* Else loop setting valid options until ) is met. Anything else is an |
| 1769 |
error. */ |
error. */ |
| 1793 |
length -= spaces; /* Already counted spaces */ |
length -= spaces; /* Already counted spaces */ |
| 1794 |
continue; |
continue; |
| 1795 |
} |
} |
| 1796 |
|
else if (c == 'X') |
| 1797 |
|
{ |
| 1798 |
|
options |= PCRE_EXTRA; |
| 1799 |
|
continue; |
| 1800 |
|
} |
| 1801 |
|
else if (c == 'U') |
| 1802 |
|
{ |
| 1803 |
|
options |= PCRE_UNGREEDY; |
| 1804 |
|
continue; |
| 1805 |
|
} |
| 1806 |
else if (c == ')') break; |
else if (c == ')') break; |
| 1807 |
|
|
| 1808 |
*errorptr = ERR12; |
*errorptr = ERR12; |
| 2008 |
|
|
| 2009 |
if (re->options != 0) |
if (re->options != 0) |
| 2010 |
{ |
{ |
| 2011 |
printf("%s%s%s%s%s%s%s\n", |
printf("%s%s%s%s%s%s%s%s\n", |
| 2012 |
((re->options & PCRE_ANCHORED) != 0)? "anchored " : "", |
((re->options & PCRE_ANCHORED) != 0)? "anchored " : "", |
| 2013 |
((re->options & PCRE_CASELESS) != 0)? "caseless " : "", |
((re->options & PCRE_CASELESS) != 0)? "caseless " : "", |
| 2014 |
((re->options & PCRE_EXTENDED) != 0)? "extended " : "", |
((re->options & PCRE_EXTENDED) != 0)? "extended " : "", |
| 2015 |
((re->options & PCRE_MULTILINE) != 0)? "multiline " : "", |
((re->options & PCRE_MULTILINE) != 0)? "multiline " : "", |
| 2016 |
((re->options & PCRE_DOTALL) != 0)? "dotall " : "", |
((re->options & PCRE_DOTALL) != 0)? "dotall " : "", |
| 2017 |
((re->options & PCRE_DOLLAR_ENDONLY) != 0)? "endonly " : "", |
((re->options & PCRE_DOLLAR_ENDONLY) != 0)? "endonly " : "", |
| 2018 |
((re->options & PCRE_EXTRA) != 0)? "extra " : ""); |
((re->options & PCRE_EXTRA) != 0)? "extra " : "", |
| 2019 |
|
((re->options & PCRE_UNGREEDY) != 0)? "ungreedy " : ""); |
| 2020 |
} |
} |
| 2021 |
|
|
| 2022 |
if ((re->options & PCRE_FIRSTSET) != 0) |
if ((re->options & PCRE_FIRSTSET) != 0) |