diff options
Diffstat (limited to 'builtin-grep.c')
-rw-r--r-- | builtin-grep.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/builtin-grep.c b/builtin-grep.c index eb821b41b9..a551d34021 100644 --- a/builtin-grep.c +++ b/builtin-grep.c @@ -402,18 +402,34 @@ int cmd_grep(int argc, const char **argv, char **envp) opt.name_only = 1; continue; } - if (!strcmp("-A", arg) || - !strcmp("-B", arg) || - !strcmp("-C", arg)) { + if (!strncmp("-A", arg, 2) || + !strncmp("-B", arg, 2) || + !strncmp("-C", arg, 2) || + (arg[0] == '-' && '1' <= arg[1] && arg[1] <= '9')) { unsigned num; - if (argc <= 1 || - sscanf(*++argv, "%u", &num) != 1) + const char *scan; + switch (arg[1]) { + case 'A': case 'B': case 'C': + if (!arg[2]) { + if (argc <= 1) + usage(builtin_grep_usage); + scan = *++argv; + argc--; + } + else + scan = arg + 2; + break; + default: + scan = arg + 1; + break; + } + if (sscanf(scan, "%u", &num) != 1) usage(builtin_grep_usage); - argc--; switch (arg[1]) { case 'A': opt.post_context = num; break; + default: case 'C': opt.post_context = num; case 'B': |