aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2001-04-09 23:26:31 +0000
committerEric Andersen <andersen@codepoet.org>2001-04-09 23:26:31 +0000
commit303dd28bb0120c8b12c886cadb2d25d1b8fea08b (patch)
tree277feaf473a69bc582eec25e094a50fd8bf1a903
parent4391a16c92cef744fc715cb7347b7b71fc8f312e (diff)
downloadbusybox-w32-303dd28bb0120c8b12c886cadb2d25d1b8fea08b.tar.gz
busybox-w32-303dd28bb0120c8b12c886cadb2d25d1b8fea08b.tar.bz2
busybox-w32-303dd28bb0120c8b12c886cadb2d25d1b8fea08b.zip
Make 'grep -l' work
-rw-r--r--applets/usage.h1
-rw-r--r--findutils/grep.c21
-rw-r--r--grep.c21
-rw-r--r--include/usage.h1
-rw-r--r--usage.h1
5 files changed, 35 insertions, 10 deletions
diff --git a/applets/usage.h b/applets/usage.h
index bf2f7bd63..5712c4413 100644
--- a/applets/usage.h
+++ b/applets/usage.h
@@ -522,6 +522,7 @@
522 "\t-H\tprefix output lines with filename where match was found\n" \ 522 "\t-H\tprefix output lines with filename where match was found\n" \
523 "\t-h\tsuppress the prefixing filename on output\n" \ 523 "\t-h\tsuppress the prefixing filename on output\n" \
524 "\t-i\tignore case distinctions\n" \ 524 "\t-i\tignore case distinctions\n" \
525 "\t-l\tlist names of files that match\n" \
525 "\t-n\tprint line number with output lines\n" \ 526 "\t-n\tprint line number with output lines\n" \
526 "\t-q\tbe quiet. Returns 0 if result was found, 1 otherwise\n" \ 527 "\t-q\tbe quiet. Returns 0 if result was found, 1 otherwise\n" \
527 "\t-v\tselect non-matching lines\n" \ 528 "\t-v\tselect non-matching lines\n" \
diff --git a/findutils/grep.c b/findutils/grep.c
index 8c6797647..b519adf18 100644
--- a/findutils/grep.c
+++ b/findutils/grep.c
@@ -41,6 +41,7 @@ static int print_count_only = 0;
41static int be_quiet = 0; 41static int be_quiet = 0;
42static int invert_search = 0; 42static int invert_search = 0;
43static int suppress_err_msgs = 0; 43static int suppress_err_msgs = 0;
44static int files_that_match = 0;
44 45
45#ifdef BB_FEATURE_GREP_CONTEXT 46#ifdef BB_FEATURE_GREP_CONTEXT
46extern char *optarg; /* in getopt.h */ 47extern char *optarg; /* in getopt.h */
@@ -105,7 +106,7 @@ static void grep_file(FILE *file)
105 106
106 /* otherwise, keep track of matches and print the matched line */ 107 /* otherwise, keep track of matches and print the matched line */
107 nmatches++; 108 nmatches++;
108 if (!print_count_only) { 109 if (print_count_only==0 && files_that_match==0) {
109#ifdef BB_FEATURE_GREP_CONTEXT 110#ifdef BB_FEATURE_GREP_CONTEXT
110 int prevpos = (curpos == 0) ? lines_before - 1 : curpos - 1; 111 int prevpos = (curpos == 0) ? lines_before - 1 : curpos - 1;
111 112
@@ -163,11 +164,18 @@ static void grep_file(FILE *file)
163 } 164 }
164 165
165 /* special-case post processing */ 166 /* special-case post processing */
166 if (print_count_only) { 167 if (files_that_match) {
168 if (nmatches > 0) {
169 printf("%s", cur_file);
170 if (nmatches)
171 printf(":%d", nmatches);
172 printf("\n");
173 }
174 } else if (print_count_only) {
167 if (print_filename) 175 if (print_filename)
168 printf("%s:", cur_file); 176 printf("%s:", cur_file);
169 printf("%i\n", nmatches); 177 printf("%i\n", nmatches);
170 } 178 }
171 179
172 /* remember if we matched */ 180 /* remember if we matched */
173 if (nmatches != 0) 181 if (nmatches != 0)
@@ -183,7 +191,7 @@ extern int grep_main(int argc, char **argv)
183#endif 191#endif
184 192
185 /* do normal option parsing */ 193 /* do normal option parsing */
186 while ((opt = getopt(argc, argv, "iHhnqvsc" 194 while ((opt = getopt(argc, argv, "iHhlnqvsc"
187#ifdef BB_FEATURE_GREP_CONTEXT 195#ifdef BB_FEATURE_GREP_CONTEXT
188"A:B:C:" 196"A:B:C:"
189#endif 197#endif
@@ -192,6 +200,9 @@ extern int grep_main(int argc, char **argv)
192 case 'i': 200 case 'i':
193 ignore_case++; 201 ignore_case++;
194 break; 202 break;
203 case 'l':
204 files_that_match++;
205 break;
195 case 'H': 206 case 'H':
196 print_filename++; 207 print_filename++;
197 break; 208 break;
@@ -242,7 +253,7 @@ extern int grep_main(int argc, char **argv)
242 show_usage(); 253 show_usage();
243 254
244 /* sanity check */ 255 /* sanity check */
245 if (print_count_only || be_quiet) { 256 if (print_count_only || be_quiet || files_that_match) {
246 print_line_num = 0; 257 print_line_num = 0;
247#ifdef BB_FEATURE_GREP_CONTEXT 258#ifdef BB_FEATURE_GREP_CONTEXT
248 lines_before = 0; 259 lines_before = 0;
diff --git a/grep.c b/grep.c
index 8c6797647..b519adf18 100644
--- a/grep.c
+++ b/grep.c
@@ -41,6 +41,7 @@ static int print_count_only = 0;
41static int be_quiet = 0; 41static int be_quiet = 0;
42static int invert_search = 0; 42static int invert_search = 0;
43static int suppress_err_msgs = 0; 43static int suppress_err_msgs = 0;
44static int files_that_match = 0;
44 45
45#ifdef BB_FEATURE_GREP_CONTEXT 46#ifdef BB_FEATURE_GREP_CONTEXT
46extern char *optarg; /* in getopt.h */ 47extern char *optarg; /* in getopt.h */
@@ -105,7 +106,7 @@ static void grep_file(FILE *file)
105 106
106 /* otherwise, keep track of matches and print the matched line */ 107 /* otherwise, keep track of matches and print the matched line */
107 nmatches++; 108 nmatches++;
108 if (!print_count_only) { 109 if (print_count_only==0 && files_that_match==0) {
109#ifdef BB_FEATURE_GREP_CONTEXT 110#ifdef BB_FEATURE_GREP_CONTEXT
110 int prevpos = (curpos == 0) ? lines_before - 1 : curpos - 1; 111 int prevpos = (curpos == 0) ? lines_before - 1 : curpos - 1;
111 112
@@ -163,11 +164,18 @@ static void grep_file(FILE *file)
163 } 164 }
164 165
165 /* special-case post processing */ 166 /* special-case post processing */
166 if (print_count_only) { 167 if (files_that_match) {
168 if (nmatches > 0) {
169 printf("%s", cur_file);
170 if (nmatches)
171 printf(":%d", nmatches);
172 printf("\n");
173 }
174 } else if (print_count_only) {
167 if (print_filename) 175 if (print_filename)
168 printf("%s:", cur_file); 176 printf("%s:", cur_file);
169 printf("%i\n", nmatches); 177 printf("%i\n", nmatches);
170 } 178 }
171 179
172 /* remember if we matched */ 180 /* remember if we matched */
173 if (nmatches != 0) 181 if (nmatches != 0)
@@ -183,7 +191,7 @@ extern int grep_main(int argc, char **argv)
183#endif 191#endif
184 192
185 /* do normal option parsing */ 193 /* do normal option parsing */
186 while ((opt = getopt(argc, argv, "iHhnqvsc" 194 while ((opt = getopt(argc, argv, "iHhlnqvsc"
187#ifdef BB_FEATURE_GREP_CONTEXT 195#ifdef BB_FEATURE_GREP_CONTEXT
188"A:B:C:" 196"A:B:C:"
189#endif 197#endif
@@ -192,6 +200,9 @@ extern int grep_main(int argc, char **argv)
192 case 'i': 200 case 'i':
193 ignore_case++; 201 ignore_case++;
194 break; 202 break;
203 case 'l':
204 files_that_match++;
205 break;
195 case 'H': 206 case 'H':
196 print_filename++; 207 print_filename++;
197 break; 208 break;
@@ -242,7 +253,7 @@ extern int grep_main(int argc, char **argv)
242 show_usage(); 253 show_usage();
243 254
244 /* sanity check */ 255 /* sanity check */
245 if (print_count_only || be_quiet) { 256 if (print_count_only || be_quiet || files_that_match) {
246 print_line_num = 0; 257 print_line_num = 0;
247#ifdef BB_FEATURE_GREP_CONTEXT 258#ifdef BB_FEATURE_GREP_CONTEXT
248 lines_before = 0; 259 lines_before = 0;
diff --git a/include/usage.h b/include/usage.h
index bf2f7bd63..5712c4413 100644
--- a/include/usage.h
+++ b/include/usage.h
@@ -522,6 +522,7 @@
522 "\t-H\tprefix output lines with filename where match was found\n" \ 522 "\t-H\tprefix output lines with filename where match was found\n" \
523 "\t-h\tsuppress the prefixing filename on output\n" \ 523 "\t-h\tsuppress the prefixing filename on output\n" \
524 "\t-i\tignore case distinctions\n" \ 524 "\t-i\tignore case distinctions\n" \
525 "\t-l\tlist names of files that match\n" \
525 "\t-n\tprint line number with output lines\n" \ 526 "\t-n\tprint line number with output lines\n" \
526 "\t-q\tbe quiet. Returns 0 if result was found, 1 otherwise\n" \ 527 "\t-q\tbe quiet. Returns 0 if result was found, 1 otherwise\n" \
527 "\t-v\tselect non-matching lines\n" \ 528 "\t-v\tselect non-matching lines\n" \
diff --git a/usage.h b/usage.h
index bf2f7bd63..5712c4413 100644
--- a/usage.h
+++ b/usage.h
@@ -522,6 +522,7 @@
522 "\t-H\tprefix output lines with filename where match was found\n" \ 522 "\t-H\tprefix output lines with filename where match was found\n" \
523 "\t-h\tsuppress the prefixing filename on output\n" \ 523 "\t-h\tsuppress the prefixing filename on output\n" \
524 "\t-i\tignore case distinctions\n" \ 524 "\t-i\tignore case distinctions\n" \
525 "\t-l\tlist names of files that match\n" \
525 "\t-n\tprint line number with output lines\n" \ 526 "\t-n\tprint line number with output lines\n" \
526 "\t-q\tbe quiet. Returns 0 if result was found, 1 otherwise\n" \ 527 "\t-q\tbe quiet. Returns 0 if result was found, 1 otherwise\n" \
527 "\t-v\tselect non-matching lines\n" \ 528 "\t-v\tselect non-matching lines\n" \