Tightened things up a bit, saved 20 bytes, and made the code a bit clearer in
the process.
diff --git a/findutils/grep.c b/findutils/grep.c
index fec8d09..ce2990f 100644
--- a/findutils/grep.c
+++ b/findutils/grep.c
@@ -48,19 +48,6 @@
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 @@
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 @@
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 @@
regfree(®ex);
- if (!matched)
- return 1;
-
- return 0;
+ return !matched; /* invert return value 0 = success, 1 = failed */
}
diff --git a/grep.c b/grep.c
index fec8d09..ce2990f 100644
--- a/grep.c
+++ b/grep.c
@@ -48,19 +48,6 @@
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 @@
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 @@
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 @@
regfree(®ex);
- if (!matched)
- return 1;
-
- return 0;
+ return !matched; /* invert return value 0 = success, 1 = failed */
}