aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2017-12-25 21:24:57 -0800
committerRob Landley <rob@landley.net>2017-12-26 20:45:14 -0600
commit70a6c55499eabf1229dfb0b49f08b366cbaa7896 (patch)
tree48ba3af3e48738c7dfe10b0d25b8475e715a1ea2
parent4335501bf3269ac86b7bfdf236aa763d380327e2 (diff)
downloadtoybox-70a6c55499eabf1229dfb0b49f08b366cbaa7896.tar.gz
Fix xargs -0 with -n.
Also make -0 and -E mutually exclusive (rather than just ignore -E with -0). Bug: https://github.com/landley/toybox/issues/78
-rwxr-xr-xtests/xargs.test3
-rw-r--r--toys/posix/xargs.c5
2 files changed, 5 insertions, 3 deletions
diff --git a/tests/xargs.test b/tests/xargs.test
index 966bc5db..407817cc 100755
--- a/tests/xargs.test
+++ b/tests/xargs.test
@@ -24,6 +24,9 @@ testing "command -opt" "xargs -n2 ls -1" "one\ntwo\nthree\n" "" \
"one two three"
rm one two three
+testing "-0 -n1" "printf 'a\0b\0c\0d\0e\0f' | xargs -0 -n1 echo _" "_ a\n_ b\n_ c\n_ d\n_ e\n_ f\n" "" ""
+testing "-0 -n2" "printf 'a\0b\0c\0d\0e\0f' | xargs -0 -n2 echo _" "_ a b\n_ c d\n_ e f\n" "" ""
+
#testing "-n exact match"
#testing "-s exact match"
#testing "-s 0"
diff --git a/toys/posix/xargs.c b/toys/posix/xargs.c
index e7dd10b5..cac143cc 100644
--- a/toys/posix/xargs.c
+++ b/toys/posix/xargs.c
@@ -6,7 +6,7 @@
*
* TODO: Rich's whitespace objection, env size isn't fixed anymore.
-USE_XARGS(NEWTOY(xargs, "^I:E:L#ptxrn#<1s#0", TOYFLAG_USR|TOYFLAG_BIN))
+USE_XARGS(NEWTOY(xargs, "^I:E:L#ptxrn#<1s#0[!0E]", TOYFLAG_USR|TOYFLAG_BIN))
config XARGS
bool "xargs"
@@ -99,8 +99,7 @@ static char *handle_entries(char *data, char **entry)
} else {
TT.bytes += sizeof(char *)+strlen(data)+1;
if (TT.max_bytes && TT.bytes >= TT.max_bytes) return data;
- if (TT.max_entries && TT.entries >= TT.max_entries)
- return (char *)1;
+ if (TT.max_entries && TT.entries >= TT.max_entries) return data;
if (entry) entry[TT.entries] = data;
TT.entries++;
}