[prev in list] [next in list] [prev in thread] [next in thread] 

List:       busybox-cvs
Subject:    [git commit] grep: fix grep -x to not set REG_NOSUB
From:       Denys Vlasenko <vda.linux () googlemail ! com>
Date:       2013-05-16 12:47:05
Message-ID: 20130516124810.8E4219A16B () busybox ! osuosl ! org
[Download RAW message or body]

commit: http://git.busybox.net/busybox/commit/?id=5fc0585c01a6b87432f344c98eb544e116c2d1d4
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

When -F isn't specified (and !ENABLE_EXTRA_COMPAT), grep -x uses
regexec's regmatch_t output to determine if the match was the entire
line. However it also set the REG_NOSUB flag which makes it ignore the
regmatch_t argument.

Add an exception to the setting of REG_NOSUB for OPT_x and add some test
cases to test the behaviour of -x.

Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: Natanael Copa <ncopa@alpinelinux.org>
Cc: Denys Vlasenko <vda.linux@googlemail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
---
 findutils/grep.c     |    2 +-
 testsuite/grep.tests |   14 ++++++++++++++
 2 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/findutils/grep.c b/findutils/grep.c
index b808ad9..b8ad1bf 100644
--- a/findutils/grep.c
+++ b/findutils/grep.c
@@ -716,7 +716,7 @@ int grep_main(int argc UNUSED_PARAM, char **argv)
 		option_mask32 |= OPT_F;
 
 #if !ENABLE_EXTRA_COMPAT
-	if (!(option_mask32 & (OPT_o | OPT_w)))
+	if (!(option_mask32 & (OPT_o | OPT_w | OPT_x)))
 		reflags = REG_NOSUB;
 #endif
 
diff --git a/testsuite/grep.tests b/testsuite/grep.tests
index 5696fa7..64d99a9 100755
--- a/testsuite/grep.tests
+++ b/testsuite/grep.tests
@@ -82,6 +82,20 @@ testing "grep -F handles -i" "grep -F -i foo input ; echo \$?" \
 testing "grep can read regexps from stdin" "grep -f - input ; echo \$?" \
 	"two\nthree\n0\n" "tw\ntwo\nthree\n" "tw.\nthr\n"
 
+# -x (whole line match)
+testing "grep -x (full match)" "grep -x foo input ; echo \$?" \
+	"foo\n0\n" "foo\n" ""
+testing "grep -x (partial match 1)" "grep -x foo input ; echo \$?" \
+	"1\n" "foo bar\n" ""
+testing "grep -x (partial match 2)" "grep -x foo input ; echo \$?" \
+	"1\n" "bar foo\n" ""
+testing "grep -x -F (full match)" "grep -x -F foo input ; echo \$?" \
+	"foo\n0\n" "foo\n" ""
+testing "grep -x -F (partial match 1)" "grep -x -F foo input ; echo \$?" \
+	"1\n" "foo bar\n" ""
+testing "grep -x -F (partial match 2)" "grep -x -F foo input ; echo \$?" \
+	"1\n" "bar foo\n" ""
+
 optional FEATURE_GREP_EGREP_ALIAS
 testing "grep -E supports extended regexps" "grep -E fo+" "foo\n" "" \
 	"b\ar\nfoo\nbaz"
_______________________________________________
busybox-cvs mailing list
busybox-cvs@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox-cvs
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic