summaryrefslogtreecommitdiff
path: root/signal.c
diff options
context:
space:
mode:
authorNate Sammons <nate@users.sourceforge.net>1999-03-29 23:23:13 +0000
committerNate Sammons <nate@users.sourceforge.net>1999-03-29 23:23:13 +0000
commitce780fc9e6067b15b65ca2904c698c77503bf635 (patch)
tree5d157782889a9a38a188649adccb48f5677f174b /signal.c
parent38508fdf0c25cd9227a5f6e4085f3c94bd70eb0c (diff)
downloadstrace-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.c41
1 files changed, 30 insertions, 11 deletions
diff --git a/signal.c b/signal.c
index 5860bf9..c52c8de 100644
--- a/signal.c
+++ b/signal.c
@@ -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;
}