summaryrefslogtreecommitdiff
path: root/findutils/grep.c
diff options
context:
space:
mode:
authorMark Whitley <markw@lineo.com>2001-02-01 21:02:41 +0000
committerMark Whitley <markw@lineo.com>2001-02-01 21:02:41 +0000
commitb5c29850e31ca41ee643cfe62eb8bc5f8682deb1 (patch)
treed65b0d24aaba3ee86371b7a04c9c0e5b6eaf0a89 /findutils/grep.c
parent065c7e779a0ab49267ef18f2f851d9886719151c (diff)
downloadbusybox-w32-b5c29850e31ca41ee643cfe62eb8bc5f8682deb1.tar.gz
busybox-w32-b5c29850e31ca41ee643cfe62eb8bc5f8682deb1.tar.bz2
busybox-w32-b5c29850e31ca41ee643cfe62eb8bc5f8682deb1.zip
Tightened things up a bit, saved 20 bytes, and made the code a bit clearer in
the process.
Diffstat (limited to 'findutils/grep.c')
-rw-r--r--findutils/grep.c43
1 files changed, 14 insertions, 29 deletions
diff --git a/findutils/grep.c b/findutils/grep.c
index fec8d0913..ce2990f64 100644
--- a/findutils/grep.c
+++ b/findutils/grep.c
@@ -48,19 +48,6 @@ static int matched; /* keeps track of whether we ever matched */
48static char *cur_file = NULL; /* the current file we are reading */ 48static char *cur_file = NULL; /* the current file we are reading */
49 49
50 50
51static void print_matched_line(char *line, int linenum)
52{
53 if (print_count_only)
54 return;
55
56 if (print_filename)
57 printf("%s:", cur_file);
58 if (print_line_num)
59 printf("%i:", linenum);
60
61 puts(line);
62}
63
64static void grep_file(FILE *file) 51static void grep_file(FILE *file)
65{ 52{
66 char *line = NULL; 53 char *line = NULL;
@@ -72,7 +59,11 @@ static void grep_file(FILE *file)
72 chomp(line); 59 chomp(line);
73 linenum++; 60 linenum++;
74 ret = regexec(&regex, line, 0, NULL, 0); 61 ret = regexec(&regex, line, 0, NULL, 0);
75 if (ret == 0 && !invert_search) { /* match */ 62
63 /* test for a postitive-assertion match (regexec returned success (0)
64 * and the user did not specify invert search), or a negative-assertion
65 * match (vice versa) */
66 if ((ret == 0 && !invert_search) || (ret == REG_NOMATCH && invert_search)) {
76 67
77 /* if we found a match but were told to be quiet, stop here and 68 /* if we found a match but were told to be quiet, stop here and
78 * return success */ 69 * return success */
@@ -81,20 +72,17 @@ static void grep_file(FILE *file)
81 exit(0); 72 exit(0);
82 } 73 }
83 74
75 /* otherwise, keep track of matches, print the matched line, and
76 * whatever else the user wanted */
84 nmatches++; 77 nmatches++;
85 print_matched_line(line, linenum); 78 if (!print_count_only) {
86 79 if (print_filename)
87 } 80 printf("%s:", cur_file);
88 else if (ret == REG_NOMATCH && invert_search) { 81 if (print_line_num)
89 if (be_quiet) { 82 printf("%i:", linenum);
90 regfree(&regex); 83 puts(line);
91 exit(0);
92 } 84 }
93
94 nmatches++;
95 print_matched_line(line, linenum);
96 } 85 }
97
98 free(line); 86 free(line);
99 } 87 }
100 88
@@ -186,8 +174,5 @@ extern int grep_main(int argc, char **argv)
186 174
187 regfree(&regex); 175 regfree(&regex);
188 176
189 if (!matched) 177 return !matched; /* invert return value 0 = success, 1 = failed */
190 return 1;
191
192 return 0;
193} 178}