diff options
author | René Scharfe <rene.scharfe@lsrfire.ath.cx> | 2010-05-22 23:34:06 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-05-24 11:22:07 -0700 |
commit | 52d799a79f921cc47823a0455b0e646636410b65 (patch) | |
tree | f766cc147a6bfb36e931ad5c5ddf25d591b578eb /grep.c | |
parent | 1baddf4b3781c0c714442adfda496d667e1850cd (diff) | |
download | git-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.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -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) { |