From deaca5da3373819de42ee9204f93fa8cfa3f48a5 Mon Sep 17 00:00:00 2001
From: markw <markw@69ca8d6d-28ef-0310-b511-8ec308f3f277>
Date: Thu, 1 Feb 2001 21:02:41 +0000
Subject: Tightened things up a bit, saved 20 bytes, and made the code a bit
 clearer in the process.

git-svn-id: svn://busybox.net/trunk/busybox@1738 69ca8d6d-28ef-0310-b511-8ec308f3f277
---
 findutils/grep.c | 43 ++++++++++++++-----------------------------
 grep.c           | 43 ++++++++++++++-----------------------------
 2 files changed, 28 insertions(+), 58 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 */
 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(&regex, 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(&regex);
-				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(&regex);
 
-	if (!matched)
-		return 1;
-
-	return 0;
+	return !matched; /* invert return value 0 = success, 1 = failed */
 }
diff --git a/grep.c b/grep.c
index fec8d0913..ce2990f64 100644
--- a/grep.c
+++ b/grep.c
@@ -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(&regex, 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(&regex);
-				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(&regex);
 
-	if (!matched)
-		return 1;
-
-	return 0;
+	return !matched; /* invert return value 0 = success, 1 = failed */
 }
-- 
cgit v1.2.3-55-g6feb