ash: eval: Return status in eval functions
authorDenys Vlasenko <vda.linux@googlemail.com>
Wed, 28 Sep 2016 17:41:57 +0000 (19:41 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Wed, 28 Sep 2016 17:41:57 +0000 (19:41 +0200)
commiteb17b6f6c99df4a132742facd43a9485bb7ac5a0
treee433e1a453bcf0728e56e114783718071de82af6
parent1c32e49bdf74dfe47cae108d06702996ead052f0
ash: eval: Return status in eval functions

Backported from dash:

    eval: Return status in eval functions

    The exit status is currently clobbered too early for case statements
    and loops.  This patch fixes it by making the eval functions return
    the current exit status and setting them in one place -- evaltree.

    Harald van Dijk pointed out a number of bugs in the original patch.

function                                             old     new   delta
evalcommand                                         1226    1242     +16
cmdloop                                              383     398     +15
evalfor                                              223     227      +4
evalcase                                             271     275      +4
localcmd                                             348     350      +2
evaltreenr                                           927     928      +1
evaltree                                             927     928      +1
evalsubshell                                         150     151      +1
evalpipe                                             356     357      +1
parse_command                                       1585    1584      -1
evalloop                                             177     164     -13
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 9/2 up/down: 45/-14)             Total: 31 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/ash.c
shell/ash_test/ash-misc/exitcode1.right [new file with mode: 0644]
shell/ash_test/ash-misc/exitcode1.tests [new file with mode: 0755]
shell/hush_test/hush-misc/exitcode1.right [new file with mode: 0644]
shell/hush_test/hush-misc/exitcode1.tests [new file with mode: 0755]