jrstu@cbnewsd.ATT.COM (james.stuhlmacher) (02/10/90)
When trapping signal 15 in sh(1), sh responses with trap: bad signal number Of course signal 15 (SIGTERM) is not a bad signal number. After looking through the code, sh(1) uses _NSIG, which is defined in <signal.h>, to determine the number of signals on the system. _NSIG is defined as 15 in MINIX with the signal numbers ranging from 1 to 15. Sh(1), on the other hand, assumes the range is 0 to 14. The patches below will make the high end 15 (literally _NSIG). Please note that you may get a warning about line numbers being off in sh3.c. You should ignore this. Jim Stuhlmacher j.stuhlmacher@att.com ..!att!ihlpb!jims #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of shell archive." # Contents: sh.hdif sh3.cdif sh4.cdif # Wrapped by root@stu on Thu Feb 8 22:38:49 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'sh.hdif' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'sh.hdif'\" else echo shar: Extracting \"'sh.hdif'\" \(626 characters\) sed "s/^X//" >'sh.hdif' <<'END_OF_FILE' X*** SVC/sh.h Thu Feb 8 22:37:42 1990 X--- sh.h Thu Feb 8 21:54:06 1990 X*************** X*** 152,159 **** X extern char *null; /* null value for variable */ X extern int intr; /* interrupt pending */ X X! Extern char *trap[_NSIG]; X! Extern char ourtrap[_NSIG]; X Extern int trapset; /* trap pending */ X X extern int heedint; /* heed interrupt signals */ X--- 152,159 ---- X extern char *null; /* null value for variable */ X extern int intr; /* interrupt pending */ X X! Extern char *trap[_NSIG+1]; X! Extern char ourtrap[_NSIG+1]; X Extern int trapset; /* trap pending */ X X extern int heedint; /* heed interrupt signals */ END_OF_FILE if test 626 -ne `wc -c <'sh.hdif'`; then echo shar: \"'sh.hdif'\" unpacked with wrong size! fi # end of 'sh.hdif' fi if test -f 'sh3.cdif' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'sh3.cdif'\" else echo shar: Extracting \"'sh3.cdif'\" \(692 characters\) sed "s/^X//" >'sh3.cdif' <<'END_OF_FILE' X*** SVC/sh3.c Thu Feb 8 21:29:09 1990 X--- sh3.c Thu Feb 8 21:52:49 1990 X*************** X*** 809,815 **** X register int resetsig; X X if (t->words[1] == NULL) { X! for (i=0; i<_NSIG; i++) X if (trap[i]) { X prn(i); X prs(": "); X--- 809,815 ---- X register int resetsig; X X if (t->words[1] == NULL) { X! for (i=0; i<=_NSIG; i++) X if (trap[i]) { X prn(i); X prs(": "); X*************** X*** 848,854 **** X { X register int n; X X! if ((n = getn(s)) < 0 || n >= _NSIG) { X err("trap: bad signal number"); X n = 0; X } X--- 848,854 ---- X { X register int n; X X! if ((n = getn(s)) < 0 || n > _NSIG) { X err("trap: bad signal number"); X n = 0; X } END_OF_FILE if test 692 -ne `wc -c <'sh3.cdif'`; then echo shar: \"'sh3.cdif'\" unpacked with wrong size! fi # end of 'sh3.cdif' fi if test -f 'sh4.cdif' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'sh4.cdif'\" else echo shar: Extracting \"'sh4.cdif'\" \(469 characters\) sed "s/^X//" >'sh4.cdif' <<'END_OF_FILE' X*** SVC/sh4.c Thu Feb 8 21:53:12 1990 X--- sh4.c Thu Feb 8 21:53:47 1990 X*************** X*** 361,367 **** X } X *cp = 0; X /* allow trapped signals */ X! for (i=0; i<_NSIG; i++) X if (ourtrap[i] && signal(i, SIG_IGN) != SIG_IGN) X signal(i, SIG_DFL); X dup2(pf[1], 1); X--- 361,367 ---- X } X *cp = 0; X /* allow trapped signals */ X! for (i=0; i<=_NSIG; i++) X if (ourtrap[i] && signal(i, SIG_IGN) != SIG_IGN) X signal(i, SIG_DFL); X dup2(pf[1], 1); END_OF_FILE if test 469 -ne `wc -c <'sh4.cdif'`; then echo shar: \"'sh4.cdif'\" unpacked with wrong size! fi # end of 'sh4.cdif' fi echo shar: End of shell archive. exit 0