diff options
author | Nate Sammons <nate@users.sourceforge.net> | 1999-03-29 23:23:13 +0000 |
---|---|---|
committer | Nate Sammons <nate@users.sourceforge.net> | 1999-03-29 23:23:13 +0000 |
commit | ce780fc9e6067b15b65ca2904c698c77503bf635 (patch) | |
tree | 5d157782889a9a38a188649adccb48f5677f174b /signal.c | |
parent | 38508fdf0c25cd9227a5f6e4085f3c94bd70eb0c (diff) | |
download | strace-ce780fc9e6067b15b65ca2904c698c77503bf635.tar.gz strace-ce780fc9e6067b15b65ca2904c698c77503bf635.tar.bz2 strace-ce780fc9e6067b15b65ca2904c698c77503bf635.tar.xz |
Add new function `signame', which returns name (SIGXXX) of numeric
signal, and replace lookups in signalent[] with calls to it.
Diffstat (limited to 'signal.c')
-rw-r--r-- | signal.c | 41 |
1 files changed, 30 insertions, 11 deletions
@@ -197,6 +197,33 @@ static struct xlat sigprocmaskcmds[] = { #endif /* HAVE_SIGACTION */ +/* Anonymous realtime signals. */ +/* Under glibc 2.1, SIGRTMIN et al are functions, but __SIGRTMIN is a + constant. This is what we want. Otherwise, just use SIGRTMIN. */ +#ifdef SIGRTMIN +#ifndef __SIGRTMIN +#define __SIGRTMIN SIGRTMIN +#define __SIGRTMAX SIGRTMAX /* likewise */ +#endif +#endif + +char * +signame(sig) +int sig; +{ + static char buf[30]; + if (sig < nsignals) { + return signalent[sig]; +#ifdef SIGRTMIN + } else if (sig <= __SIGRTMIN && sig <= __SIGRTMAX) { + sprintf(buf, "SIGRT_%d", sig); + return buf; +#endif /* SIGRTMIN */ + } else { + sprintf(buf, "%d", sig); + return buf; + } +} static char * sprintsigmask(s, mask) @@ -231,7 +258,7 @@ sigset_t *mask; *s++ = '['; for (i = 1; i < nsignals; i++) { if (sigismember(mask, i) == 1) { - sprintf(s, format, signalent[i] + 3); s += strlen(s); + sprintf(s, format, signame(i) + 3); s += strlen(s); format = " %s"; } } @@ -251,10 +278,7 @@ void printsignal(nr) int nr; { - if (nr > 0 && nr < nsignals) - tprintf("%s", signalent[nr]); - else - tprintf("%d", nr); + tprintf(signame(nr)); } /* @@ -1027,12 +1051,7 @@ sys_kill(tcp) struct tcb *tcp; { if (entering(tcp)) { - long sig = tcp->u_arg[1]; - - if (sig >= 0 && sig < NSIG) - tprintf("%ld, %s", tcp->u_arg[0], signalent[sig]); - else - tprintf("%ld, %ld", tcp->u_arg[0], sig); + tprintf("%ld, %s", tcp->u_arg[0], signame(tcp->u_arg[1])); } return 0; } |