about summary refs log tree commit diff
path: root/Src/builtin.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@users.sourceforge.net>2005-08-09 05:41:55 +0000
committerWayne Davison <wayned@users.sourceforge.net>2005-08-09 05:41:55 +0000
commit9937c30ba32082ce8784dcd69136221bccf344d1 (patch)
tree816176418a7c6031925c4715b2e7c427785bd3a1 /Src/builtin.c
parente041d77fbcc00cedddfa7331bb6516caf46e87dc (diff)
downloadzsh-9937c30ba32082ce8784dcd69136221bccf344d1.tar.gz
zsh-9937c30ba32082ce8784dcd69136221bccf344d1.tar.xz
zsh-9937c30ba32082ce8784dcd69136221bccf344d1.zip
21581: Thorsten Dahlheimer: Src/builtin.c: fixed error output
for unknown signal names when using "trap -".
Diffstat (limited to 'Src/builtin.c')
-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 */