From b7fc3ad6f999a02e534b1a196bb46db3c4d71452 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 16 Oct 2015 22:26:10 -0700 Subject: [PATCH 2/5] grep: use memchr/memrchar * src/kwsearch.c (Fexecute): Prefer memchr and memrchr to doing it by hand. --- src/kwsearch.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/kwsearch.c b/src/kwsearch.c index 045ef46..2997ae1 100644 --- a/src/kwsearch.c +++ b/src/kwsearch.c @@ -124,10 +124,8 @@ Fexecute (char const *buf, size_t size, size_t *match_size, if (match_words) for (try = beg; ; ) { - char const *bol; - bol = beg; - while (buf < bol && bol[-1] != eol) - --bol; + char const *bol = memrchr (buf, eol, beg - buf); + bol = bol ? bol + 1 : buf; if (wordchar (mb_prev_wc (bol, try, buf + size))) break; if (wordchar (mb_next_wc (try + len, buf + size))) @@ -153,12 +151,10 @@ Fexecute (char const *buf, size_t size, size_t *match_size, return -1; success: - if ((end = memchr (beg + len, eol, (buf + size) - (beg + len))) != NULL) - end++; - else - end = buf + size; - while (buf < beg && beg[-1] != eol) - --beg; + end = memchr (beg + len, eol, (buf + size) - (beg + len)); + end = end ? end + 1 : buf + size; + beg = memrchr (buf, eol, beg - buf); + beg = beg ? beg + 1 : buf; len = end - beg; success_in_beg_and_len:; size_t off = beg - buf; -- 2.1.4