diff options
author | Mark Whitley <markw@lineo.com> | 2001-02-02 00:02:41 +0300 |
---|---|---|
committer | Mark Whitley <markw@lineo.com> | 2001-02-02 00:02:41 +0300 |
commit | b5c29850e31ca41ee643cfe62eb8bc5f8682deb1 (patch) | |
tree | d65b0d24aaba3ee86371b7a04c9c0e5b6eaf0a89 /grep.c | |
parent | 065c7e779a0ab49267ef18f2f851d9886719151c (diff) |
Tightened things up a bit, saved 20 bytes, and made the code a bit clearer in
the process.
Diffstat (limited to 'grep.c')
-rw-r--r-- | grep.c | 43 |
1 files changed, 14 insertions, 29 deletions
@@ -48,19 +48,6 @@ static int matched; /* keeps track of whether we ever matched */ static char *cur_file = NULL; /* the current file we are reading */ -static void print_matched_line(char *line, int linenum) -{ - if (print_count_only) - return; - - if (print_filename) - printf("%s:", cur_file); - if (print_line_num) - printf("%i:", linenum); - - puts(line); -} - static void grep_file(FILE *file) { char *line = NULL; @@ -72,7 +59,11 @@ static void grep_file(FILE *file) chomp(line); linenum++; ret = regexec(®ex, line, 0, NULL, 0); - if (ret == 0 && !invert_search) { /* match */ + + /* test for a postitive-assertion match (regexec returned success (0) + * and the user did not specify invert search), or a negative-assertion + * match (vice versa) */ + if ((ret == 0 && !invert_search) || (ret == REG_NOMATCH && invert_search)) { /* if we found a match but were told to be quiet, stop here and * return success */ @@ -81,20 +72,17 @@ static void grep_file(FILE *file) exit(0); } + /* otherwise, keep track of matches, print the matched line, and + * whatever else the user wanted */ nmatches++; - print_matched_line(line, linenum); - - } - else if (ret == REG_NOMATCH && invert_search) { - if (be_quiet) { - regfree(®ex); - exit(0); + if (!print_count_only) { + if (print_filename) + printf("%s:", cur_file); + if (print_line_num) + printf("%i:", linenum); + puts(line); } - - nmatches++; - print_matched_line(line, linenum); } - free(line); } @@ -186,8 +174,5 @@ extern int grep_main(int argc, char **argv) regfree(®ex); - if (!matched) - return 1; - - return 0; + return !matched; /* invert return value 0 = success, 1 = failed */ } |