diff --git a/grep-2.5.1-egf-speedup.patch b/grep-2.5.1-egf-speedup.patch index a646df5..bad36a6 100644 --- a/grep-2.5.1-egf-speedup.patch +++ b/grep-2.5.1-egf-speedup.patch @@ -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;