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 <[email protected]> Cc: Natanael Copa <[email protected]> Cc: Denys Vlasenko <[email protected]> --- findutils/grep.c | 2 +- testsuite/grep.tests | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/findutils/grep.c b/findutils/grep.c index 70f3516..5611aac 100644 --- a/findutils/grep.c +++ b/findutils/grep.c @@ -710,7 +710,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 4781f22..b1d5b14 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" -- 1.8.1.2 _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
