klibc-bot for Herbert Xu
2019-Jan-25 03:15 UTC
[klibc] [klibc:update-dash] trap: Implement POSIX.1-2008 trap reset behaviour
Commit-ID: ffba488a87578bfe0704dd906466fc64a88ff488 Gitweb: http://git.kernel.org/?p=libs/klibc/klibc.git;a=commit;h=ffba488a87578bfe0704dd906466fc64a88ff488 Author: Herbert Xu <herbert at gondor.apana.org.au> AuthorDate: Mon, 6 Jun 2016 19:52:43 +0800 Committer: Ben Hutchings <ben at decadent.org.uk> CommitDate: Fri, 25 Jan 2019 02:57:21 +0000 [klibc] trap: Implement POSIX.1-2008 trap reset behaviour Jonathan Perkin submitted a patch to fix the behaviour of trap when the first argument is an integer. Currently it is treated as a command while POSIX requires it to be treated as a signal. This patch is based on his idea but instead of adding an extra argument to decode_signal I have added a new decode_signum helper. Signed-off-by: Herbert Xu <herbert at gondor.apana.org.au> Signed-off-by: Ben Hutchings <ben at decadent.org.uk> --- usr/dash/trap.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/usr/dash/trap.c b/usr/dash/trap.c index a6997d4f..89ceff4f 100644 --- a/usr/dash/trap.c +++ b/usr/dash/trap.c @@ -78,6 +78,8 @@ volatile sig_atomic_t pendingsigs; /* received SIGCHLD */ int gotsigchld; +static int decode_signum(const char *); + #ifdef mkinit INCLUDE "trap.h" INIT { @@ -111,7 +113,7 @@ trapcmd(int argc, char **argv) } return 0; } - if (!ap[1]) + if (!ap[1] || decode_signum(*ap) >= 0) action = NULL; else action = *ap++; @@ -399,18 +401,27 @@ out: /* NOTREACHED */ } -int decode_signal(const char *string, int minsig) +static int decode_signum(const char *string) { - int signo; + int signo = -1; if (is_number(string)) { signo = atoi(string); - if (signo >= NSIG) { - return -1; - } - return signo; + if (signo >= NSIG) + signo = -1; } + return signo; +} + +int decode_signal(const char *string, int minsig) +{ + int signo; + + signo = decode_signum(string); + if (signo >= 0) + return signo; + for (signo = minsig; signo < NSIG; signo++) { if (sys_sigabbrev[signo] && !strcasecmp(string, sys_sigabbrev[signo]))
Possibly Parallel Threads
- [klibc:update-dash] dash: trap: Implement POSIX.1-2008 trap reset behaviour
- [klibc:update-dash] dash: Fix some cosmetic differences from upstream dash
- [klibc:update-dash] dash: Fix some cosmetic differences from upstream dash
- [klibc:update-dash] dash: eval: Add vfork support
- [klibc:update-dash] trap: Globally rename pendingsigs to pending_sig