OSDN Git Service

Fix xargs -0 with -n.
authorElliott Hughes <enh@google.com>
Tue, 26 Dec 2017 05:24:57 +0000 (21:24 -0800)
committerRob Landley <rob@landley.net>
Wed, 27 Dec 2017 02:45:14 +0000 (20:45 -0600)
Also make -0 and -E mutually exclusive (rather than just ignore -E
with -0).

Bug: https://github.com/landley/toybox/issues/78

tests/xargs.test
toys/posix/xargs.c

index 966bc5d..407817c 100755 (executable)
@@ -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"
index e7dd10b..cac143c 100644 (file)
@@ -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++;
   }