Functional equivalence with pre-patched package.

This commit is contained in:
Tim Waugh 2004-11-05 14:06:45 +00:00
parent 9fa0ec14fd
commit 2bb2860efe

View File

@ -1,5 +1,5 @@
--- grep-2.5.1/src/search.c.egf-speedup 2004-11-04 14:34:20.883140606 +0000
+++ grep-2.5.1/src/search.c 2004-11-04 14:53:29.991266613 +0000
--- grep-2.5.1/src/search.c.egf-speedup 2004-11-05 12:50:25.934736684 +0000
+++ grep-2.5.1/src/search.c 2004-11-05 13:52:33.819394140 +0000
@@ -70,9 +70,6 @@
call the regexp matcher at all. */
static int kwset_exact_matches;
@ -79,7 +79,7 @@
#endif /* MBS_SUPPORT */
buflim = buf + size;
@@ -373,18 +319,42 @@
@@ -373,18 +319,48 @@
if (kwset)
{
/* Find a possible match using the KWset matcher. */
@ -96,14 +96,20 @@
+ while (bytes_left)
+ {
+ size_t len = mbrlen (beg, bytes_left, &mbs);
+ if (len == (size_t) -1 || len == (size_t) -2 || len == 0)
+ if (len == (size_t) -1 || len == 0)
+ {
+ /* Incomplete character. */
+ /* Incomplete character: treat as single-byte. */
+ memset (&mbs, '\0', sizeof (mbstate_t));
+ beg += bytes_left;
+ break;
+ beg++;
+ bytes_left--;
+ continue;
+ }
+
+ if (len == (size_t) -2)
+ /* Offset points inside multibyte character:
+ * no good. */
+ break;
+
+ beg += len;
+ bytes_left -= len;
+ }
@ -124,7 +130,7 @@
while (beg > buf && beg[-1] != eol)
--beg;
if (kwsm.index < kwset_exact_matches)
@@ -395,13 +365,41 @@
@@ -395,13 +371,47 @@
else
{
/* No good fixed strings; start with DFA. */
@ -142,14 +148,20 @@
+ while (bytes_left)
+ {
+ size_t len = mbrlen (beg, bytes_left, &mbs);
+ if (len == (size_t) -1 || len == (size_t) -2 || len == 0)
+ if (len == (size_t) -1 || len == 0)
+ {
+ /* Incomplete character. */
+ /* Incomplete character: treat as single-byte. */
+ memset (&mbs, '\0', sizeof (mbstate_t));
+ beg += bytes_left;
+ break;
+ beg++;
+ bytes_left--;
+ continue;
+ }
+
+ if (len == (size_t) -2)
+ /* Offset points inside multibyte character:
+ * no good. */
+ break;
+
+ beg += len;
+ bytes_left -= len;
+ }
@ -166,7 +178,7 @@
while (beg > buf && beg[-1] != eol)
--beg;
}
@@ -469,15 +467,6 @@
@@ -469,15 +479,6 @@
} /* for (beg = end ..) */
failure:
@ -182,7 +194,7 @@
return (size_t) -1;
success_in_beg_and_end:
@@ -486,15 +475,6 @@
@@ -486,15 +487,6 @@
/* FALLTHROUGH */
success_in_start_and_len:
@ -198,7 +210,7 @@
*match_size = len;
return start;
}
@@ -531,17 +511,8 @@
@@ -531,17 +523,8 @@
struct kwsmatch kwsmatch;
size_t ret_val;
#ifdef MBS_SUPPORT
@ -218,7 +230,7 @@
#endif /* MBS_SUPPORT */
for (beg = buf; beg <= buf + size; ++beg)
@@ -550,8 +521,28 @@
@@ -550,8 +533,33 @@
if (offset == (size_t) -1)
goto failure;
#ifdef MBS_SUPPORT
@ -230,14 +242,19 @@
+ while (bytes_left)
+ {
+ size_t len = mbrlen (beg, bytes_left, &mbs);
+ if (len == (size_t) -1 || len == (size_t) -2 || len == 0)
+ if (len == (size_t) -1 || len == 0)
+ {
+ /* Incomplete character. */
+ /* Incomplete character: treat as single-byte. */
+ memset (&mbs, '\0', sizeof (mbstate_t));
+ beg += bytes_left;
+ break;
+ beg++;
+ bytes_left--;
+ continue;
+ }
+
+ if (len == (size_t) -2)
+ /* Offset points inside multibyte character: no good. */
+ break;
+
+ beg += len;
+ bytes_left -= len;
+ }
@ -249,7 +266,7 @@
#endif /* MBS_SUPPORT */
beg += offset;
len = kwsmatch.size[0];
@@ -587,6 +578,31 @@
@@ -587,6 +595,36 @@
if (offset == -1) {
break; /* Try a different anchor. */
}
@ -260,15 +277,20 @@
+ while (bytes_left)
+ {
+ size_t len = mbrlen (beg, bytes_left, &mbs);
+ if (len == (size_t) -1 || len == (size_t) -2 ||
+ len == 0)
+ if (len == (size_t) -1 || len == 0)
+ {
+ /* Incomplete character. */
+ /* Incomplete character: treat as single-byte. */
+ memset (&mbs, '\0', sizeof (mbstate_t));
+ beg += bytes_left;
+ break;
+ beg++;
+ bytes_left--;
+ continue;
+ }
+
+ if (len == (size_t) -2)
+ /* Offset points inside multibyte character:
+ * no good. */
+ break;
+
+ beg += len;
+ bytes_left -= len;
+ }
@ -281,7 +303,7 @@
beg += offset;
len = kwsmatch.size[0];
}
@@ -597,20 +613,30 @@
@@ -597,20 +635,30 @@
}
failure:
@ -321,7 +343,7 @@
while (buf < beg && beg[-1] != eol)
--beg;
len = end - beg;
@@ -618,15 +644,6 @@
@@ -618,15 +666,6 @@
success_in_beg_and_len:
*match_size = len;