grep: Put calls to fixmatch() and regmatch() into patmatch()

Both match_one_pattern() and look_ahead() use fixmatch() and regmatch()
in the same way. They really want to match a pattern againt a string,
but now they need to know if the pattern is fixed or regexp.

This change cleans this up by introducing patmatch() (from "pattern
match") and also simplifies inserting other ways of matching a string.

Signed-off-by: Michał Kiedrowicz <michal.kiedrowicz@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Michał Kiedrowicz 2011-05-05 00:00:19 +02:00 committed by Junio C Hamano
parent 5a69eaf554
commit 97e7778422

23
grep.c
View File

@ -412,6 +412,19 @@ static int regmatch(const regex_t *preg, char *line, char *eol,
return regexec(preg, line, 1, match, eflags); return regexec(preg, line, 1, match, eflags);
} }
static int patmatch(struct grep_pat *p, char *line, char *eol,
regmatch_t *match, int eflags)
{
int hit;
if (p->fixed)
hit = !fixmatch(p, line, eol, match);
else
hit = !regmatch(&p->regexp, line, eol, match, eflags);
return hit;
}
static int strip_timestamp(char *bol, char **eol_p) static int strip_timestamp(char *bol, char **eol_p)
{ {
char *eol = *eol_p; char *eol = *eol_p;
@ -461,10 +474,7 @@ static int match_one_pattern(struct grep_pat *p, char *bol, char *eol,
} }
again: again:
if (p->fixed) hit = patmatch(p, bol, eol, pmatch, eflags);
hit = !fixmatch(p, bol, eol, pmatch);
else
hit = !regmatch(&p->regexp, bol, eol, pmatch, eflags);
if (hit && p->word_regexp) { if (hit && p->word_regexp) {
if ((pmatch[0].rm_so < 0) || if ((pmatch[0].rm_so < 0) ||
@ -791,10 +801,7 @@ static int look_ahead(struct grep_opt *opt,
int hit; int hit;
regmatch_t m; regmatch_t m;
if (p->fixed) hit = patmatch(p, bol, bol + *left_p, &m, 0);
hit = !fixmatch(p, bol, bol + *left_p, &m);
else
hit = !regmatch(&p->regexp, bol, bol + *left_p, &m, 0);
if (!hit || m.rm_so < 0 || m.rm_eo < 0) if (!hit || m.rm_so < 0 || m.rm_eo < 0)
continue; continue;
if (earliest < 0 || m.rm_so < earliest) if (earliest < 0 || m.rm_so < earliest)