xargs: fix exit code if command exits nonzero, closes 11381

No code size change on x86.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2018-10-30 14:40:17 +01:00
parent c8e3922ad8
commit f3e2838fc4

View File

@ -204,14 +204,15 @@ static int xargs_exec(void)
status = (errno == ENOENT) ? 127 : 126; status = (errno == ENOENT) ? 127 : 126;
} }
else if (status >= 0x180) { 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); G.args[0], status - 0x180);
status = 125; status = 125;
} }
else if (status != 0) { else if (status != 0) {
if (status == 255) { if (status == 255) {
bb_error_msg("%s: exited with status 255; aborting", G.args[0]); 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" /* "123 if any invocation of the command exited with status 1-125"
* This implies that nonzero exit code is remembered, * This implies that nonzero exit code is remembered,
@ -220,7 +221,7 @@ static int xargs_exec(void)
G.xargs_exitcode = 123; G.xargs_exitcode = 123;
status = 0; status = 0;
} }
ret:
if (status != 0) if (status != 0)
G.xargs_exitcode = status; G.xargs_exitcode = status;
return status; return status;