summaryrefslogtreecommitdiff
path: root/grep.c
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2009-12-03 13:51:26 -0800
committerLibravatar Junio C Hamano <gitster@pobox.com>2009-12-03 13:51:26 -0800
commitf2c0ca4fae299c2515c1554dbeec2080af5c6792 (patch)
tree5aedb798c52fee287b45bc85e8bf2e726a5289a9 /grep.c
parentMerge branch 'jk/maint-break-rename-reduce-memory' into maint (diff)
parentgrep: Allow case insensitive search of fixed-strings (diff)
downloadtgif-f2c0ca4fae299c2515c1554dbeec2080af5c6792.tar.xz
Merge branch 'bc/grep-i-F' into maint
* bc/grep-i-F: grep: Allow case insensitive search of fixed-strings
Diffstat (limited to 'grep.c')
-rw-r--r--grep.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/grep.c b/grep.c
index 5d162dae6e..bdadf2c0cc 100644
--- a/grep.c
+++ b/grep.c
@@ -41,6 +41,7 @@ static void compile_regexp(struct grep_pat *p, struct grep_opt *opt)
int err;
p->word_regexp = opt->word_regexp;
+ p->ignore_case = opt->ignore_case;
if (opt->fixed || is_fixed(p->pattern))
p->fixed = 1;
@@ -262,9 +263,15 @@ static void show_name(struct grep_opt *opt, const char *name)
printf("%s%c", name, opt->null_following_name ? '\0' : '\n');
}
-static int fixmatch(const char *pattern, char *line, regmatch_t *match)
+
+static int fixmatch(const char *pattern, char *line, int ignore_case, regmatch_t *match)
{
- char *hit = strstr(line, pattern);
+ char *hit;
+ if (ignore_case)
+ hit = strcasestr(line, pattern);
+ else
+ hit = strstr(line, pattern);
+
if (!hit) {
match->rm_so = match->rm_eo = -1;
return REG_NOMATCH;
@@ -326,7 +333,7 @@ static int match_one_pattern(struct grep_pat *p, char *bol, char *eol,
again:
if (p->fixed)
- hit = !fixmatch(p->pattern, bol, pmatch);
+ hit = !fixmatch(p->pattern, bol, p->ignore_case, pmatch);
else
hit = !regexec(&p->regexp, bol, 1, pmatch, eflags);