diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2015-10-16 22:26:10 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2015-10-16 22:42:06 -0700 |
commit | 805811db0ab57e37dda30f95be2927d6f7a7eba7 (patch) | |
tree | 4e00bf7da8746a5844a0aec7e2bc7818240f609e | |
parent | 79d7918c889dea0d83c270cc1e8a9d8786b20102 (diff) | |
download | grep-805811db0ab57e37dda30f95be2927d6f7a7eba7.tar.gz |
grep: use memchr/memrchar
* src/kwsearch.c (Fexecute): Prefer memchr and memrchr to doing it
by hand.
-rw-r--r-- | src/kwsearch.c | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/src/kwsearch.c b/src/kwsearch.c index 045ef462..2997ae1a 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; |