[PATCH] xargs: restore correct behaviour of -n option
Denys Vlasenko
vda.linux at googlemail.com
Wed Apr 29 13:55:13 UTC 2020
Applied, thanks!
On Wed, Feb 19, 2020 at 12:02 PM Ron Yorston <rmy at pobox.com> wrote:
>
> Since commit 1ff7002b1 (xargs: fix handling of quoted arguments, closes
> 11441) the -n option hasn't worked properly:
>
> $ echo 1 2 3 | xargs -n 1 echo
> 1
> 2
>
> 3
>
> $
>
> Because state is now remembered between calls to process_stdin() it's
> necessary to update the state before any premature return.
>
> Signed-off-by: Ron Yorston <rmy at pobox.com>
> ---
> findutils/xargs.c | 2 +-
> testsuite/xargs.tests | 11 +++++++++++
> 2 files changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/findutils/xargs.c b/findutils/xargs.c
> index 4fb306bb8..ff04bfe7c 100644
> --- a/findutils/xargs.c
> +++ b/findutils/xargs.c
> @@ -315,6 +315,7 @@ static char* FAST_FUNC process_stdin(int n_max_chars, int n_max_arg, char *buf)
> }
> }
> if (state == SPACE) { /* word's delimiter or EOF detected */
> + state = NORM;
> if (q) {
> bb_error_msg_and_die("unmatched %s quote",
> q == '\'' ? "single" : "double");
> @@ -335,7 +336,6 @@ static char* FAST_FUNC process_stdin(int n_max_chars, int n_max_arg, char *buf)
> if (n_max_arg == 0) {
> goto ret;
> }
> - state = NORM;
> }
> if (p == buf) {
> goto ret;
> diff --git a/testsuite/xargs.tests b/testsuite/xargs.tests
> index 855b33bc2..159f1ff69 100755
> --- a/testsuite/xargs.tests
> +++ b/testsuite/xargs.tests
> @@ -48,6 +48,17 @@ testing "xargs argument line too long" \
> "seq 10000 99999 | sed -e 's/^/\"/' -e 's/$/\"/' | xargs echo | grep -o 99999; echo \$?" \
> "99999\n0\n" \
> "" ""
> +
> +testing "xargs -n1" \
> + "xargs -n1 echo" \
> + "1\n2\n3\n4\n5\n" \
> + "" "1 2 3 4 5\n"
> +
> +testing "xargs -n2" \
> + "xargs -n2 echo" \
> + "1 2\n3 4\n5\n" \
> + "" "1 2 3 4 5\n"
> +
> SKIP=
>
> exit $FAILCOUNT
> --
> 2.24.1
>
> _______________________________________________
> busybox mailing list
> busybox at busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
More information about the busybox
mailing list