Grep currently special-cased empty pattern file to be the same as
pattern file with one empty line (empty pattern). That does mirror how
GNU grep behaves, except when -x is provided. In that case .* pattern
needs to be used instead.
---
Change configured git name to pass the check.
findutils/grep.c | 5 +++--
testsuite/grep.tests | 6 ++++++
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/findutils/grep.c b/findutils/grep.c
index 5b8644c36..252d467dc 100644
--- a/findutils/grep.c
+++ b/findutils/grep.c
@@ -762,8 +762,9 @@ int grep_main(int argc UNUSED_PARAM, char **argv)
if (option_mask32 & OPT_f) {
load_regexes_from_file(fopt);
if (!pattern_head) { /* -f EMPTY_FILE? */
- /* GNU grep treats it as "nothing matches" */
- llist_add_to(&pattern_head, new_grep_list_data((char*)
"", 0));
+ /* GNU grep treats it as "nothing matches" except when
-x */
+ const char *data = (option_mask32 & OPT_x) == 0 ? "" :
".*";
+ llist_add_to(&pattern_head,
new_grep_list_data((char*)data, 0));
invert_search ^= 1;
}
}
diff --git a/testsuite/grep.tests b/testsuite/grep.tests
index 26f8e69cf..9c1f35499 100755
--- a/testsuite/grep.tests
+++ b/testsuite/grep.tests
@@ -129,6 +129,12 @@ testing "grep -v -f EMPTY_FILE" \
"" \
"test\n"
+testing "grep -vxf EMPTY_FILE" \
+ "grep -vxf input" \
+ "test\n" \
+ "" \
+ "test\n"
+
testing "grep -Fw matches only words" \
"grep -Fw foo input" \
"" \
--
2.26.2
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox