aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Vasut2021-04-06 14:00:24 +0200
committerTom Rini2021-04-12 17:45:40 -0400
commit8c4e3b79bd0bb76eea16869e9666e19047c0d005 (patch)
tree77913e7bd9309afa6b2ddc6f3e3e49827da2025c
parent7062d4e815d255891d96aafe617a264c4c4a8a02 (diff)
cmd: exit: Fix return value
In case exit is called in a script without parameter, the command returns -2 ; in case exit is called with a numerical parameter, the command returns -2 and lower. This leads to the following problem: => setenv foo 'echo bar ; exit 1' ; run foo ; echo $? bar 0 => setenv foo 'echo bar ; exit 0' ; run foo ; echo $? bar 0 => setenv foo 'echo bar ; exit -2' ; run foo ; echo $? bar 0 That is, no matter what the 'exit' command argument is, the return value is always 0 and so it is not possible to use script return value in subsequent tests. Fix this and simplify the exit command such that if exit is called with no argument, the command returns 0, just like 'true' in cmd/test.c. In case the command is called with any argument that is positive integer, the argument is set as return value. => setenv foo 'echo bar ; exit 1' ; run foo ; echo $? bar 1 => setenv foo 'echo bar ; exit 0' ; run foo ; echo $? bar 0 => setenv foo 'echo bar ; exit -2' ; run foo ; echo $? bar 0 Note that this does change ABI established in 2004 , although it is unclear whether that ABI was originally OK or not. Fixes: c26e454dfc6 Signed-off-by: Marek Vasut <marex@denx.de> Cc: Pantelis Antoniou <pantelis.antoniou@konsulko.com> Cc: Tom Rini <trini@konsulko.com>
-rw-r--r--cmd/exit.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/cmd/exit.c b/cmd/exit.c
index 7bf241ec732..923f0870fbf 100644
--- a/cmd/exit.c
+++ b/cmd/exit.c
@@ -10,13 +10,10 @@
static int do_exit(struct cmd_tbl *cmdtp, int flag, int argc,
char *const argv[])
{
- int r;
-
- r = 0;
if (argc > 1)
- r = simple_strtoul(argv[1], NULL, 10);
+ return simple_strtoul(argv[1], NULL, 10);
- return -r - 2;
+ return 0;
}
U_BOOT_CMD(