From ad6ca9bb54ae2a9811c889c990ea67d67919a4f4 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 9 May 2014 14:48:47 -0700 Subject: [PATCH] grep: minor improvements to retry-DFA-superset patch * src/dfasearch.c (EGexecute): Avoid unnecessary test in a context where memrchr cannot return a null pointer. --- src/dfasearch.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/dfasearch.c b/src/dfasearch.c index 9fb7449..77b4e3e 100644 --- a/src/dfasearch.c +++ b/src/dfasearch.c @@ -284,23 +284,18 @@ EGexecute (char const *buf, size_t size, size_t *match_size, /* Try matching with the superset of DFA, if it's defined. */ if (superset && !exact_kwset_match) { - while (true) + /* Keep using the superset while it reports multiline + potential matches; this is more likely to be fast + than falling back to KWset would be. */ + while ((next_beg = dfaexec (superset, dfa_beg, (char *) end, 1, + &count, NULL)) + && next_beg != end + && count != 0) { - next_beg = dfaexec (superset, dfa_beg, (char *) end, 1, - &count, NULL); - /* If there's no match, or if we've matched the sentinel, - we're done. */ - if (next_beg == NULL || next_beg == end) - break; - - if (count == 0) - break; + /* Try to match in just one line. */ count = 0; - - /* If dfaexec may match in multiple lines, try to - match in one line. */ beg = memrchr (buf, eol, next_beg - buf); - beg = beg ? beg + 1 : buf; + beg++; dfa_beg = beg; } if (next_beg == NULL || next_beg == end) @@ -310,6 +305,7 @@ EGexecute (char const *buf, size_t size, size_t *match_size, end = memchr (next_beg, eol, buflim - next_beg); end = end ? end + 1 : buflim; } + /* Try matching with DFA. */ next_beg = dfaexec (dfa, dfa_beg, (char *) end, 0, &count, &backref); -- 1.9.0