From f4d8ff9598ed8d57bd3c73748b3077ccae4a8f88 Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 20 Nov 2014 17:38:31 +0000 Subject: [PATCH] Properly handle -F and -i --- grep.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/grep.c b/grep.c index b2c41b7..1c28928 100644 --- a/grep.c +++ b/grep.c @@ -20,6 +20,7 @@ static int Hflag; static int eflag; static int fflag; static int hflag; +static int iflag; static int sflag; static int vflag; static int xflag; @@ -78,6 +79,7 @@ main(int argc, char *argv[]) break; case 'i': flags |= REG_ICASE; + iflag = 1; break; case 's': sflag = 1; @@ -197,10 +199,17 @@ grep(FILE *fp, const char *str) if (regexec(&pnode->preg, buf, 0, NULL, 0) ^ vflag) continue; } else { - if (!xflag) - match = strstr(buf, pnode->pattern) ? Match : NoMatch; - else - match = strcmp(buf, pnode->pattern); + if (!xflag) { + if ((iflag ? strcasestr : strstr)(buf, pnode->pattern)) + match = Match; + else + match = NoMatch; + } else { + if (!(iflag ? strcasecmp : strcmp)(buf, pnode->pattern)) + match = Match; + else + match = NoMatch; + } if (match ^ vflag) continue; }