From 1d9d41150bea7e89a881eeee7f71f88ae1fc2381 Mon Sep 17 00:00:00 2001 From: Mark Whitley Date: Mon, 21 May 2001 21:13:00 +0000 Subject: [PATCH] Fixed mishandling of -c & -l options and accounted for case when we're grepping only one file. --- findutils/grep.c | 23 ++++++++++++++++------- grep.c | 23 ++++++++++++++++------- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/findutils/grep.c b/findutils/grep.c index a2fff440c..061462ebc 100644 --- a/findutils/grep.c +++ b/findutils/grep.c @@ -104,9 +104,15 @@ static void grep_file(FILE *file) exit(0); } - /* otherwise, keep track of matches and print the matched line */ + /* keep track of matches */ nmatches++; - if (print_match_counts==0 && print_files_with_matches==0) { + + /* if we're just printing filenames, we stop after the first match */ + if (print_files_with_matches) + break; + + /* print the matched line */ + if (print_match_counts == 0) { #ifdef BB_FEATURE_GREP_CONTEXT int prevpos = (curpos == 0) ? lines_before - 1 : curpos - 1; @@ -162,14 +168,17 @@ static void grep_file(FILE *file) /* special-case file post-processing for options where we don't print line - * matches, just filenames */ + * matches, just filenames and possibly match counts */ - /* grep -cl or just grep -c: print filename:count, even if count is zero */ + /* grep -c: print [filename:]count, even if count is zero */ if (print_match_counts) { - printf("%s:%d\n", cur_file, nmatches); + if (print_filename) + printf("%s:", cur_file); + printf("%d\n", nmatches); } - /* just grep -l: print just the filename, but only if we grepped the line in the file */ - else if (print_files_with_matches && !print_match_counts && nmatches > 0) { + + /* grep -l: print just the filename, but only if we grepped the line in the file */ + if (print_files_with_matches && nmatches > 0) { puts(cur_file); } diff --git a/grep.c b/grep.c index a2fff440c..061462ebc 100644 --- a/grep.c +++ b/grep.c @@ -104,9 +104,15 @@ static void grep_file(FILE *file) exit(0); } - /* otherwise, keep track of matches and print the matched line */ + /* keep track of matches */ nmatches++; - if (print_match_counts==0 && print_files_with_matches==0) { + + /* if we're just printing filenames, we stop after the first match */ + if (print_files_with_matches) + break; + + /* print the matched line */ + if (print_match_counts == 0) { #ifdef BB_FEATURE_GREP_CONTEXT int prevpos = (curpos == 0) ? lines_before - 1 : curpos - 1; @@ -162,14 +168,17 @@ static void grep_file(FILE *file) /* special-case file post-processing for options where we don't print line - * matches, just filenames */ + * matches, just filenames and possibly match counts */ - /* grep -cl or just grep -c: print filename:count, even if count is zero */ + /* grep -c: print [filename:]count, even if count is zero */ if (print_match_counts) { - printf("%s:%d\n", cur_file, nmatches); + if (print_filename) + printf("%s:", cur_file); + printf("%d\n", nmatches); } - /* just grep -l: print just the filename, but only if we grepped the line in the file */ - else if (print_files_with_matches && !print_match_counts && nmatches > 0) { + + /* grep -l: print just the filename, but only if we grepped the line in the file */ + if (print_files_with_matches && nmatches > 0) { puts(cur_file); }