ash: trap with bad signal name should not abort

function                                             old     new   delta
trapcmd                                              236     271     +35

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2010-03-26 15:52:24 +01:00
parent 19158a837d
commit 496d5bf4c6
3 changed files with 19 additions and 4 deletions

View File

@ -12281,7 +12281,7 @@ trapcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
{ {
char *action; char *action;
char **ap; char **ap;
int signo; int signo, exitcode;
nextopt(nullstr); nextopt(nullstr);
ap = argptr; ap = argptr;
@ -12314,10 +12314,15 @@ trapcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
action = NULL; action = NULL;
if (ap[1]) if (ap[1])
action = *ap++; action = *ap++;
exitcode = 0;
while (*ap) { while (*ap) {
signo = get_signum(*ap); signo = get_signum(*ap);
if (signo < 0) if (signo < 0) {
ash_msg_and_raise_error("%s: bad trap", *ap); /* Mimic bash message exactly */
ash_msg("%s: invalid signal specification", *ap);
exitcode = 1;
goto next;
}
INT_OFF; INT_OFF;
if (action) { if (action) {
if (LONE_DASH(action)) if (LONE_DASH(action))
@ -12330,9 +12335,10 @@ trapcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
if (signo != 0) if (signo != 0)
setsignal(signo); setsignal(signo);
INT_ON; INT_ON;
next:
ap++; ap++;
} }
return 0; return exitcode;
} }

View File

@ -0,0 +1,4 @@
./signal4.tests: trap: line 3: BADNAME: invalid signal specification
1
Trapped
Ok

View File

@ -0,0 +1,5 @@
#!/bin/sh
trap "echo Trapped" BADNAME TERM; echo $?
kill $$
echo Ok