summaryrefslogtreecommitdiff
path: root/grep.c
diff options
context:
space:
mode:
authorRené Scharfe <rene.scharfe@lsrfire.ath.cx>2010-05-22 23:34:06 +0200
committerJunio C Hamano <gitster@pobox.com>2010-05-24 11:22:07 -0700
commit52d799a79f921cc47823a0455b0e646636410b65 (patch)
treef766cc147a6bfb36e931ad5c5ddf25d591b578eb /grep.c
parent1baddf4b3781c0c714442adfda496d667e1850cd (diff)
downloadgit-52d799a79f921cc47823a0455b0e646636410b65.tar.gz
grep: continue case insensitive fixed string search after NUL chars
Functions for C strings, like strcasestr(), can't see beyond NUL characters. Check if there is such an obstacle on the line and try again behind it. Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'grep.c')
-rw-r--r--grep.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/grep.c b/grep.c
index c3affb6caa..b95803bbb1 100644
--- a/grep.c
+++ b/grep.c
@@ -334,9 +334,15 @@ static int fixmatch(const char *pattern, char *line, char *eol,
{
char *hit;
- if (ignore_case)
- hit = strcasestr(line, pattern);
- else
+ if (ignore_case) {
+ char *s = line;
+ do {
+ hit = strcasestr(s, pattern);
+ if (hit)
+ break;
+ s += strlen(s) + 1;
+ } while (s < eol);
+ } else
hit = memmem(line, eol - line, pattern, strlen(pattern));
if (!hit) {