klibc-bot for Herbert Xu
2019-Jan-25 03:15 UTC
[klibc] [klibc:update-dash] [ERROR] Set exitstatus in onint
Commit-ID: 56fa2b43fb8101a800dc2b90216baa1e9ae024e0 Gitweb: http://git.kernel.org/?p=libs/klibc/klibc.git;a=commit;h=56fa2b43fb8101a800dc2b90216baa1e9ae024e0 Author: Herbert Xu <herbert at gondor.apana.org.au> AuthorDate: Thu, 2 Oct 2014 21:07:55 +0800 Committer: Ben Hutchings <ben at decadent.org.uk> CommitDate: Fri, 25 Jan 2019 02:57:21 +0000 [klibc] [ERROR] Set exitstatus in onint Currently the exit status when we receive SIGINT is set in evalcommand which means that it doesn't always get set. For example, if you press CTRL-C at the prompt of an interactive dash, the exit status is not set to 130 as it is in many other Bourne shells. This patch fixes this by moving the setting of the exit status into onint which also simplifies evalcommand. Signed-off-by: Herbert Xu <herbert at gondor.apana.org.au> Signed-off-by: Ben Hutchings <ben at decadent.org.uk> --- usr/dash/error.c | 1 + usr/dash/eval.c | 22 ++++++++-------------- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/usr/dash/error.c b/usr/dash/error.c index 9d31989e..f9ea9198 100644 --- a/usr/dash/error.c +++ b/usr/dash/error.c @@ -105,6 +105,7 @@ onint(void) { signal(SIGINT, SIG_DFL); raise(SIGINT); } + exitstatus = SIGINT + 128; exraise(EXINT); /* NOTREACHED */ } diff --git a/usr/dash/eval.c b/usr/dash/eval.c index 741bf120..501d47fe 100644 --- a/usr/dash/eval.c +++ b/usr/dash/eval.c @@ -853,21 +853,15 @@ bail: listsetvar(varlist.list, VEXPORT); } if (evalbltin(cmdentry.u.cmd, argc, argv, flags)) { - int status; - int i; - - i = exception; - if (i == EXEXIT) - goto raise; - - status = (i == EXINT) ? SIGINT + 128 : 2; - exitstatus = status; - - if (i == EXINT || spclbltin > 0) { -raise: - longjmp(handler->loc, 1); + if (exception == EXERROR) { + exitstatus = 2; + if (spclbltin <= 0) { + FORCEINTON; + break; + } } - FORCEINTON; +raise: + longjmp(handler->loc, 1); } break;
Reasonably Related Threads
- [klibc:update-dash] dash: [ERROR] Set exitstatus in onint
- [klibc:update-dash] [EVAL] Do not clobber exitstatus in evalcommand
- [klibc:update-dash] dash: [EVAL] Do not clobber exitstatus in evalcommand
- [klibc:update-dash] jobs - Do not block when waiting on SIGCHLD
- [klibc:update-dash] dash: jobs - Do not block when waiting on SIGCHLD