]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
cmd: exit: Fix return value
authorMarek Vasut <marex@denx.de>
Tue, 6 Apr 2021 12:00:24 +0000 (14:00 +0200)
committerTom Rini <trini@konsulko.com>
Mon, 12 Apr 2021 21:45:40 +0000 (17:45 -0400)
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>
cmd/exit.c

index 7bf241ec732d96b19e678ee1d13a8b9073d37522..923f0870fbfa0a7262e63aecf89866585d3aa799 100644 (file)
 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(