svn commit: r317842 - in head: contrib/netbsd-tests/usr.bin/grep usr.bin/grep

Ed Maste emaste at FreeBSD.org
Fri May 5 17:35:06 UTC 2017


Author: emaste
Date: Fri May  5 17:35:05 2017
New Revision: 317842
URL: https://svnweb.freebsd.org/changeset/base/317842

Log:
  bsdgrep: don't ouptut matches with -c, -l, -L
  
  Refactoring done in r317703 broke -c, -l, and -L flags implying
  suppression of match printing.  Fortunately this is just a matter of not
  doing any printing of the resulting matches and context printing was not
  broken in this refactoring.
  
  Add some regression tests since this area may still see further
  refactoring, include different context flags as well even though they
  were not broken in this case.
  
  PR:		219077
  Submitted by:	Kyle kevans91 at ksu.edu
  Reported by:	markj
  Reviewed by:	cem, ngie
  Differential Revision:	https://reviews.freebsd.org/D10607

Modified:
  head/contrib/netbsd-tests/usr.bin/grep/t_grep.sh
  head/usr.bin/grep/util.c

Modified: head/contrib/netbsd-tests/usr.bin/grep/t_grep.sh
==============================================================================
--- head/contrib/netbsd-tests/usr.bin/grep/t_grep.sh	Fri May  5 17:28:49 2017	(r317841)
+++ head/contrib/netbsd-tests/usr.bin/grep/t_grep.sh	Fri May  5 17:35:05 2017	(r317842)
@@ -494,6 +494,34 @@ wv_combo_break_body()
 	atf_check -s exit:1 grep -v -w "x" test1
 	atf_check -s exit:1 grep -v -w "x" test2
 }
+
+atf_test_case grep_nomatch_flags
+grep_nomatch_flags_head()
+{
+	atf_set "descr" "Check for no match (-c, -l, -L, -q) flags not producing line matches or context (PR 219077)"
+}
+
+grep_nomatch_flags_body()
+{
+	printf "A\nB\nC\n" > test1
+
+	atf_check -o inline:"1\n" grep -c -C 1 -e "B" test1
+	atf_check -o inline:"1\n" grep -c -B 1 -e "B" test1
+	atf_check -o inline:"1\n" grep -c -A 1 -e "B" test1
+	atf_check -o inline:"1\n" grep -c -C 1 -e "B" test1
+
+	atf_check -o inline:"test1\n" grep -l -e "B" test1
+	atf_check -o inline:"test1\n" grep -l -B 1 -e "B" test1
+	atf_check -o inline:"test1\n" grep -l -A 1 -e "B" test1
+	atf_check -o inline:"test1\n" grep -l -C 1 -e "B" test1
+
+	atf_check -s exit:1 -o inline:"test1\n" grep -L -e "D" test1
+
+	atf_check -o empty grep -q -e "B" test1
+	atf_check -o empty grep -q -B 1 -e "B" test1
+	atf_check -o empty grep -q -A 1 -e "B" test1
+	atf_check -o empty grep -q -C 1 -e "B" test1
+}
 # End FreeBSD
 
 atf_init_test_cases()
@@ -527,5 +555,6 @@ atf_init_test_cases()
 	atf_add_test_case fgrep_sanity
 	atf_add_test_case egrep_sanity
 	atf_add_test_case grep_sanity
+	atf_add_test_case grep_nomatch_flags
 # End FreeBSD
 }

Modified: head/usr.bin/grep/util.c
==============================================================================
--- head/usr.bin/grep/util.c	Fri May  5 17:28:49 2017	(r317841)
+++ head/usr.bin/grep/util.c	Fri May  5 17:35:05 2017	(r317842)
@@ -201,7 +201,7 @@ procfile(const char *fn)
 	struct str *ln;
 	mode_t s;
 	int c, last_outed, t, tail;
-	bool doctx, same_file;
+	bool doctx, printmatch, same_file;
 
 	if (strcmp(fn, "-") == 0) {
 		fn = label != NULL ? label : getstr(1);
@@ -237,12 +237,14 @@ procfile(const char *fn)
 	last_outed = 0;
 	same_file = false;
 	doctx = false;
-	if ((!pc.binary || binbehave != BINFILE_BIN) && !cflag && !qflag &&
-	    !lflag && !Lflag && (Aflag != 0 || Bflag != 0))
+	printmatch = true;
+	if ((pc.binary && binbehave == BINFILE_BIN) || cflag || qflag ||
+	    lflag || Lflag)
+		printmatch = false;
+	if (printmatch && (Aflag != 0 || Bflag != 0))
 		doctx = true;
 	mcount = mlimit;
 
-
 	for (c = 0;  c == 0 || !(lflag || qflag); ) {
 		/* Reset match count for every line processed */
 		pc.matchidx = 0;
@@ -283,7 +285,7 @@ procfile(const char *fn)
 			tail = Aflag;
 		}
 		/* Print the matching line, but only if not quiet/binary */
-		if (t == 0 && !qflag && !pc.binary) {
+		if (t == 0 && printmatch) {
 			printline(&pc, ':');
 			first_match = false;
 			same_file = true;


More information about the svn-src-head mailing list