summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Src/builtin.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/Src/builtin.c b/Src/builtin.c
index de1cb68e4..811d02506 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -5017,13 +5017,20 @@ bin_trap(char *name, char **argv, UNUSED(Options ops), UNUSED(int func))
/* If we have a signal number, unset the specified *
* signals. With only -, remove all traps. */
if ((getsignum(*argv) != -1) || (!strcmp(*argv, "-") && argv++)) {
- if (!*argv)
+ if (!*argv) {
for (sig = 0; sig < VSIGCOUNT; sig++)
unsettrap(sig);
- else
- while (*argv)
- unsettrap(getsignum(*argv++));
- return 0;
+ } else {
+ for (; *argv; argv++) {
+ sig = getsignum(*argv);
+ if (sig == -1) {
+ zwarnnam(name, "undefined signal: %s", *argv, 0);
+ break;
+ }
+ unsettrap(sig);
+ }
+ }
+ return *argv != NULL;
}
/* Sort out the command to execute on trap */