xargs: restore correct behaviour of -n option

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@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
diff --git a/findutils/xargs.c b/findutils/xargs.c
index 4fb306b..ff04bfe 100644
--- a/findutils/xargs.c
+++ b/findutils/xargs.c
@@ -315,6 +315,7 @@
 			}
 		}
 		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 @@
 			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 855b33b..159f1ff 100755
--- a/testsuite/xargs.tests
+++ b/testsuite/xargs.tests
@@ -48,6 +48,17 @@
 	"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