From f250dc2f449b2e81b05be3a09647011b8a783e81 Mon Sep 17 00:00:00 2001 From: jilles Date: Sat, 23 Apr 2011 22:28:56 +0000 Subject: sh: Allow EV_EXIT through function calls, make {...} next) mklocal(sp->text); exitstatus = oexitstatus; - if (flags & EV_TESTED) - evaltree(getfuncnode(cmdentry.u.func), EV_TESTED); - else - evaltree(getfuncnode(cmdentry.u.func), 0); + evaltree(getfuncnode(cmdentry.u.func), + flags & (EV_TESTED | EV_EXIT)); INTOFF; unreffunc(cmdentry.u.func); poplocalvars(); @@ -982,7 +981,10 @@ evalcommand(union node *cmd, int flags, struct backcmd *backcmd) savehandler = handler; if (setjmp(jmploc.loc)) { e = exception; - exitstatus = (e == EXINT)? SIGINT+128 : 2; + if (e == EXINT) + exitstatus = SIGINT+128; + else if (e != EXEXIT) + exitstatus = 2; goto cmddone; } handler = &jmploc; @@ -1018,8 +1020,7 @@ cmddone: backcmd->nleft = memout.nextc - memout.buf; memout.buf = NULL; } - if (cmdentry.u.index != EXECCMD && - (e == -1 || e == EXERROR || e == EXEXEC)) + if (cmdentry.u.index != EXECCMD) popredir(); if (e != -1) { if ((e != EXERROR && e != EXEXEC) diff --git a/bin/sh/main.c b/bin/sh/main.c index c5de899..12a7ff2 100644 --- a/bin/sh/main.c +++ b/bin/sh/main.c @@ -111,7 +111,8 @@ main(int argc, char *argv[]) break; } - if (state == 0 || iflag == 0 || ! rootshell) + if (state == 0 || iflag == 0 || ! rootshell || + exception == EXEXIT) exitshell(exitstatus); reset(); if (exception == EXINT) -- cgit v1.1