From eb17b6f6c99df4a132742facd43a9485bb7ac5a0 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 28 Sep 2016 19:41:57 +0200 Subject: 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 --- shell/hush_test/hush-misc/exitcode1.right | 2 ++ shell/hush_test/hush-misc/exitcode1.tests | 2 ++ 2 files changed, 4 insertions(+) create mode 100644 shell/hush_test/hush-misc/exitcode1.right create mode 100755 shell/hush_test/hush-misc/exitcode1.tests (limited to 'shell/hush_test') diff --git a/shell/hush_test/hush-misc/exitcode1.right b/shell/hush_test/hush-misc/exitcode1.right new file mode 100644 index 0000000..e5fefef --- /dev/null +++ b/shell/hush_test/hush-misc/exitcode1.right @@ -0,0 +1,2 @@ +One:1 +Zero:0 diff --git a/shell/hush_test/hush-misc/exitcode1.tests b/shell/hush_test/hush-misc/exitcode1.tests new file mode 100755 index 0000000..dc8619d --- /dev/null +++ b/shell/hush_test/hush-misc/exitcode1.tests @@ -0,0 +1,2 @@ +false || case a in a) echo One:$?;; esac +echo Zero:$? -- cgit v1.1