1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
This makes regcomp() take `\|', `\(' and `\)' instead of `|', `(' or `)'
As soon as I can be bothered to rewrite all the existing regexps this will
be used.
[ Actually this probably won't ever be used, but it seems pointless
to throw it out.. ]
--- regexp/regexp.c.old Sat Mar 19 11:02:13 1994
+++ regexp/regexp.c Thu Mar 24 18:19:02 1994
@@ -345,8 +345,8 @@
if (!(flags & HASWIDTH))
*flagp &= ~HASWIDTH;
*flagp |= flags & SPSTART;
- while (*regparse == '|') {
- regparse++;
+ while ((*regparse == '\\') && (regparse[1] == '|')) {
+ regparse += 2;
br = regbranch(&flags);
if (br == NULL)
return (NULL);
@@ -365,10 +365,10 @@
regoptail(br, ender);
/* Check for proper termination. */
- if (paren && *regparse++ != ')') {
+ if (paren && ((*regparse++ != '\\') || (*regparse++ != ')'))) {
FAIL("unmatched ()");
} else if (!paren && *regparse != '\0') {
- if (*regparse == ')') {
+ if ((*regparse++ == '\\') && (*regparse == ')')) {
FAIL("unmatched ()");
} else
FAIL("junk on end");/* "Can't happen". */
@@ -395,7 +395,7 @@
ret = regnode(BRANCH);
chain = NULL;
- while (*regparse != '\0' && *regparse != '|' && *regparse != ')') {
+ while (*regparse != '\0' && (*regparse != '\\' || (regparse[1] != '|' && regparse[1] != ')'))) {
latest = regpiece(&flags);
if (latest == NULL)
return (NULL);
@@ -539,15 +539,7 @@
*flagp |= HASWIDTH | SIMPLE;
}
break;
- case '(':
- ret = reg(1, &flags);
- if (ret == NULL)
- return (NULL);
- *flagp |= flags & (HASWIDTH | SPSTART);
- break;
case '\0':
- case '|':
- case ')':
FAIL("internal urp"); /* Supposed to be caught earlier. */
break;
case '?':
@@ -556,12 +548,29 @@
FAIL("?+* follows nothing");
break;
case '\\':
- if (*regparse == '\0')
+ switch(*regparse)
+ {
+ case '\0':
FAIL("trailing \\");
- ret = regnode(EXACTLY);
- regc(*regparse++);
- regc('\0');
- *flagp |= HASWIDTH | SIMPLE;
+ break;
+ case '|':
+ case ')':
+ FAIL("internal urp"); /* Supposed to be caught earlier. */
+ break;
+ case '(':
+ regparse++;
+ ret = reg(1, &flags);
+ if (ret == NULL)
+ return (NULL);
+ *flagp |= flags & (HASWIDTH | SPSTART);
+ break;
+ default:
+ ret = regnode(EXACTLY);
+ regc(*regparse++);
+ regc('\0');
+ *flagp |= HASWIDTH | SIMPLE;
+ break;
+ }
break;
default:{
register int len;
|