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