1
0
mirror of https://github.com/git/git.git synced 2024-09-29 03:51:25 +02:00

grep: use REG_STARTEND (if available) to speed up regexec

BSD and glibc have an extension to regexec which takes a buffer + length pair
instead of a NUL-terminated string. Since we already have the length computed
this can save us a strlen call inside regexec.

Signed-off-by: Benjamin Kramer <benny.kra@googlemail.com>
Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Benjamin Kramer 2010-01-26 18:48:36 +01:00 committed by Junio C Hamano
parent e3f67d30b2
commit 24072c0256

9
grep.c

@ -640,8 +640,15 @@ static int look_ahead(struct grep_opt *opt,
if (p->fixed)
hit = !fixmatch(p->pattern, bol, p->ignore_case, &m);
else
else {
#ifdef REG_STARTEND
m.rm_so = 0;
m.rm_eo = *left_p;
hit = !regexec(&p->regexp, bol, 1, &m, REG_STARTEND);
#else
hit = !regexec(&p->regexp, bol, 1, &m, 0);
#endif
}
if (!hit || m.rm_so < 0 || m.rm_eo < 0)
continue;
if (earliest < 0 || m.rm_so < earliest)