diff --git a/grep-2.5.1-fgrep.patch b/grep-2.5.1-fgrep.patch index 6a69637..c7f8f96 100644 --- a/grep-2.5.1-fgrep.patch +++ b/grep-2.5.1-fgrep.patch @@ -122,58 +122,7 @@ if (match_lines) { if (beg > buf && beg[-1] != eol) -@@ -547,31 +532,37 @@ - goto success; - } - else if (match_words) -- for (try = beg; len; ) -- { -- if (try > buf && WCHAR((unsigned char) try[-1])) -- break; -- if (try + len < buf + size && WCHAR((unsigned char) try[len])) -- { -- offset = kwsexec (kwset, beg, --len, &kwsmatch); -- if (offset == (size_t) -1) -- { --#ifdef MBS_SUPPORT -- if (MB_CUR_MAX > 1) -- free (mb_properties); --#endif /* MBS_SUPPORT */ -- return offset; -- } -- try = beg + offset; -- len = kwsmatch.size[0]; -- } -- else -- goto success; -- } -+ { -+ while (offset >= 0) -+ { -+ if ((offset == 0 || !WCHAR ((unsigned char) beg[-1])) -+ && (len == end - beg - 1 || !WCHAR ((unsigned char) beg[len]))) -+ { -+ if (!exact) -+ /* Returns the whole line now we know there's a word match. */ -+ goto success; -+ else -+ /* Returns just this word match. */ -+ goto success_in_beg_and_len; -+ } -+ if (len > 0) -+ { -+ /* Try a shorter length anchored at the same place. */ -+ --len; -+ offset = kwsexec (kwset, beg, len, &kwsmatch); -+ if (offset == -1) { -+ break; /* Try a different anchor. */ -+ } -+ beg += offset; -+ len = kwsmatch.size[0]; -+ } -+ } -+ } - else +@@ -551,6 +536,7 @@ goto success; } @@ -181,7 +130,7 @@ #ifdef MBS_SUPPORT if (MB_CUR_MAX > 1) free (mb_properties); -@@ -583,7 +574,11 @@ +@@ -583,7 +569,11 @@ end++; while (buf < beg && beg[-1] != eol) --beg;