summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2015-10-16 22:26:10 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2015-10-16 22:42:06 -0700
commit805811db0ab57e37dda30f95be2927d6f7a7eba7 (patch)
tree4e00bf7da8746a5844a0aec7e2bc7818240f609e
parent79d7918c889dea0d83c270cc1e8a9d8786b20102 (diff)
downloadgrep-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.c16
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;