xargs: fix exit code if command exits nonzero, closes 11381
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 30 Oct 2018 13:40:17 +0000 (14:40 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 30 Oct 2018 13:40:17 +0000 (14:40 +0100)
No code size change on x86.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
findutils/xargs.c

index c369bdaf5014ac264d5f0e7fcfeda9dfec7cef29..0dedb635614bb1cad4821a805b079a7ba88b3f4f 100644 (file)
@@ -204,14 +204,15 @@ static int xargs_exec(void)
                status = (errno == ENOENT) ? 127 : 126;
        }
        else if (status >= 0x180) {
-               bb_error_msg("'%s' terminated by signal %d",
+               bb_error_msg("'%s' terminated by signal %u",
                        G.args[0], status - 0x180);
                status = 125;
        }
        else if (status != 0) {
                if (status == 255) {
                        bb_error_msg("%s: exited with status 255; aborting", G.args[0]);
-                       return 124;
+                       status = 124;
+                       goto ret;
                }
                /* "123 if any invocation of the command exited with status 1-125"
                 * This implies that nonzero exit code is remembered,
@@ -220,7 +221,7 @@ static int xargs_exec(void)
                G.xargs_exitcode = 123;
                status = 0;
        }
-
+ ret:
        if (status != 0)
                G.xargs_exitcode = status;
        return status;