aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2014-10-02 21:07:55 +0800
committerBen Hutchings <ben@decadent.org.uk>2020-03-28 21:42:54 +0000
commit9cd6cb0f37d13b7b2152560c07f4d168d1c561e1 (patch)
treea2aede80ea5ca93015b629f6eb76dc284b15569b
parent9d16e7c25d87057eae0b8bbbd512dd768f409e01 (diff)
downloadklibc-9cd6cb0f37d13b7b2152560c07f4d168d1c561e1.tar.gz
[klibc] dash: [ERROR] Set exitstatus in onint
[ dash commit b4ce4120f87d89476b2d6ab31df43900d2f5ce89 ] 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@gondor.apana.org.au> Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
-rw-r--r--usr/dash/error.c1
-rw-r--r--usr/dash/eval.c22
2 files changed, 9 insertions, 14 deletions
diff --git a/usr/dash/error.c b/usr/dash/error.c
index 9d31989ee8cb8..f9ea91985dd3f 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 578d8919f506f..b3e971bfbd6ec 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;