@matheusbsbs / matheus-bagliano / commits / 97e7778422
Fork 0

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>

Michał Kiedrowicz committed May 5, 2011 at 00:00 UTC 97e777842260a5339bb5272a35ebeaeaae554937
1 file changed +15 -8
grep.c
+15 -8
@@ -412,6 +412,19 @@ static int regmatch(const regex_t *preg, char *line, char *eol,
412 return regexec(preg, line, 1, match, eflags);
413 }
414
415 +static int patmatch(struct grep_pat *p, char *line, char *eol,
416 + regmatch_t *match, int eflags)
417 +{
418 + int hit;
419 +
420 + if (p->fixed)
421 + hit = !fixmatch(p, line, eol, match);
422 + else
423 + hit = !regmatch(&p->regexp, line, eol, match, eflags);
424 +
425 + return hit;
426 +}
427 +
428 static int strip_timestamp(char *bol, char **eol_p)
429 {
430 char *eol = *eol_p;
@@ -461,10 +474,7 @@ static int match_one_pattern(struct grep_pat *p, char *bol, char *eol,
474 }
475
476 again:
464 - if (p->fixed)
465 - hit = !fixmatch(p, bol, eol, pmatch);
466 - else
467 - hit = !regmatch(&p->regexp, bol, eol, pmatch, eflags);
477 + hit = patmatch(p, bol, eol, pmatch, eflags);
478
479 if (hit && p->word_regexp) {
480 if ((pmatch[0].rm_so < 0) ||
@@ -791,10 +801,7 @@ static int look_ahead(struct grep_opt *opt,
801 int hit;
802 regmatch_t m;
803
794 - if (p->fixed)
795 - hit = !fixmatch(p, bol, bol + *left_p, &m);
796 - else
797 - hit = !regmatch(&p->regexp, bol, bol + *left_p, &m, 0);
804 + hit = patmatch(p, bol, bol + *left_p, &m, 0);
805 if (!hit || m.rm_so < 0 || m.rm_eo < 0)
806 continue;
807 if (earliest < 0 || m.rm_so < earliest)