208 |
"malformed number or name after (?(", |
"malformed number or name after (?(", |
209 |
"conditional group contains more than two branches", |
"conditional group contains more than two branches", |
210 |
"assertion expected after (?(", |
"assertion expected after (?(", |
211 |
"(?R or (?digits must be followed by )", |
"(?R or (?[+-]digits must be followed by )", |
212 |
/* 30 */ |
/* 30 */ |
213 |
"unknown POSIX class name", |
"unknown POSIX class name", |
214 |
"POSIX collating elements are not supported", |
"POSIX collating elements are not supported", |
242 |
/* 55 */ |
/* 55 */ |
243 |
"repeating a DEFINE group is not allowed", |
"repeating a DEFINE group is not allowed", |
244 |
"inconsistent NEWLINE options", |
"inconsistent NEWLINE options", |
245 |
"\\g is not followed by an (optionally braced) non-zero number" |
"\\g is not followed by an (optionally braced) non-zero number", |
246 |
|
"(?+ or (?- must be followed by a non-zero number" |
247 |
}; |
}; |
248 |
|
|
249 |
|
|
4000 |
|
|
4001 |
|
|
4002 |
/* ------------------------------------------------------------ */ |
/* ------------------------------------------------------------ */ |
4003 |
|
case '-': case '+': |
4004 |
case '0': case '1': case '2': case '3': case '4': /* Recursion or */ |
case '0': case '1': case '2': case '3': case '4': /* Recursion or */ |
4005 |
case '5': case '6': case '7': case '8': case '9': /* subroutine */ |
case '5': case '6': case '7': case '8': case '9': /* subroutine */ |
4006 |
{ |
{ |
4007 |
const uschar *called; |
const uschar *called; |
4008 |
|
int sign = *ptr; |
4009 |
|
|
4010 |
|
if (sign == '+') ptr++; |
4011 |
|
else if (sign == '-') |
4012 |
|
{ |
4013 |
|
if ((digitab[ptr[1]] & ctype_digit) == 0) |
4014 |
|
goto OTHER_CHAR_AFTER_QUERY; |
4015 |
|
ptr++; |
4016 |
|
} |
4017 |
|
|
4018 |
recno = 0; |
recno = 0; |
4019 |
while((digitab[*ptr] & ctype_digit) != 0) |
while((digitab[*ptr] & ctype_digit) != 0) |
4020 |
recno = recno * 10 + *ptr++ - '0'; |
recno = recno * 10 + *ptr++ - '0'; |
4021 |
|
|
4022 |
if (*ptr != ')') |
if (*ptr != ')') |
4023 |
{ |
{ |
4024 |
*errorcodeptr = ERR29; |
*errorcodeptr = ERR29; |
4025 |
goto FAILED; |
goto FAILED; |
4026 |
} |
} |
4027 |
|
|
4028 |
|
if (sign == '-') |
4029 |
|
{ |
4030 |
|
if (recno == 0) |
4031 |
|
{ |
4032 |
|
*errorcodeptr = ERR58; |
4033 |
|
goto FAILED; |
4034 |
|
} |
4035 |
|
recno = cd->bracount - recno + 1; |
4036 |
|
if (recno <= 0) |
4037 |
|
{ |
4038 |
|
*errorcodeptr = ERR15; |
4039 |
|
goto FAILED; |
4040 |
|
} |
4041 |
|
} |
4042 |
|
else if (sign == '+') |
4043 |
|
{ |
4044 |
|
if (recno == 0) |
4045 |
|
{ |
4046 |
|
*errorcodeptr = ERR58; |
4047 |
|
goto FAILED; |
4048 |
|
} |
4049 |
|
recno += cd->bracount; |
4050 |
|
} |
4051 |
|
|
4052 |
/* Come here from code above that handles a named recursion */ |
/* Come here from code above that handles a named recursion */ |
4053 |
|
|
4121 |
|
|
4122 |
/* ------------------------------------------------------------ */ |
/* ------------------------------------------------------------ */ |
4123 |
default: /* Other characters: check option setting */ |
default: /* Other characters: check option setting */ |
4124 |
|
OTHER_CHAR_AFTER_QUERY: |
4125 |
set = unset = 0; |
set = unset = 0; |
4126 |
optset = &set; |
optset = &set; |
4127 |
|
|