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