File: regexp.patch

package info (click to toggle)
librep 0.9-2
  • links: PTS
  • area: main
  • in suites: potato
  • size: 2,576 kB
  • ctags: 1,928
  • sloc: ansic: 21,612; sh: 7,386; lisp: 5,331; makefile: 392; sed: 93
file content (94 lines) | stat: -rw-r--r-- 2,414 bytes parent folder | download
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;