diff options
author | alfred <alfred@FreeBSD.org> | 2004-07-17 19:19:36 +0000 |
---|---|---|
committer | alfred <alfred@FreeBSD.org> | 2004-07-17 19:19:36 +0000 |
commit | 4c16bbdae3c2b668d0d9672affa2e8749490f8ae (patch) | |
tree | 8f528bd7bc53ea73efb5bf295901abfbf07b3c48 /usr.bin/truss | |
parent | 8b3e9f1e03ec8f63b9dedbc3298d8d7806e4ddc8 (diff) | |
download | FreeBSD-src-4c16bbdae3c2b668d0d9672affa2e8749490f8ae.zip FreeBSD-src-4c16bbdae3c2b668d0d9672affa2e8749490f8ae.tar.gz |
When reporting reciept of a signal, print the signal's name.
Diffstat (limited to 'usr.bin/truss')
-rw-r--r-- | usr.bin/truss/extern.h | 1 | ||||
-rw-r--r-- | usr.bin/truss/main.c | 24 | ||||
-rw-r--r-- | usr.bin/truss/syscalls.c | 8 |
3 files changed, 26 insertions, 7 deletions
diff --git a/usr.bin/truss/extern.h b/usr.bin/truss/extern.h index 0a1355e..ee977fb 100644 --- a/usr.bin/truss/extern.h +++ b/usr.bin/truss/extern.h @@ -35,6 +35,7 @@ extern int setup_and_wait(char **); extern int start_tracing(int, int, int); extern void restore_proc(int); extern const char *ioctlname(register_t val); +extern char *strsig(int sig); #ifdef __alpha__ extern void alpha_syscall_entry(struct trussinfo *, int); extern long alpha_syscall_exit(struct trussinfo *, int); diff --git a/usr.bin/truss/main.c b/usr.bin/truss/main.c index f1939c1..8822d9e 100644 --- a/usr.bin/truss/main.c +++ b/usr.bin/truss/main.c @@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$"); #include <sys/time.h> #include <sys/resource.h> +#include <ctype.h> #include <err.h> #include <errno.h> #include <fcntl.h> @@ -138,6 +139,23 @@ set_etype(struct trussinfo *trussinfo) { return funcs; } +char * +strsig(int sig) +{ + char *ret; + + ret = NULL; + if (sig > 0 && sig < NSIG) { + int i; + asprintf(&ret, "sig%s", sys_signame[sig]); + if (ret == NULL) + return (NULL); + for (i = 0; ret[i] != '\0'; ++i) + ret[i] = toupper(ret[i]); + } + return (ret); +} + int main(int ac, char **av) { int c; @@ -149,6 +167,7 @@ main(int ac, char **av) { char *fname = NULL; int sigexit = 0; struct trussinfo *trussinfo; + char *signame; /* Initialize the trussinfo struct */ trussinfo = (struct trussinfo *)malloc(sizeof(struct trussinfo)); @@ -285,7 +304,10 @@ START_TRACE: funcs->exit_syscall(trussinfo, pfs.val); break; case S_SIG: - fprintf(trussinfo->outfile, "SIGNAL %lu\n", pfs.val); + signame = strsig(pfs.val); + fprintf(trussinfo->outfile, "SIGNAL %lu (%s)\n", pfs.val, + signame == NULL ? "?" : signame); + free(signame); sigexit = pfs.val; break; case S_EXIT: diff --git a/usr.bin/truss/syscalls.c b/usr.bin/truss/syscalls.c index fff0555..992f94f 100644 --- a/usr.bin/truss/syscalls.c +++ b/usr.bin/truss/syscalls.c @@ -471,12 +471,8 @@ print_arg(int fd, struct syscall_args *sc, unsigned long *args) { long sig; sig = args[sc->offset]; - if (sig > 0 && sig < NSIG) { - int i; - asprintf(&tmp, "sig%s", sys_signame[sig]); - for (i = 0; tmp[i] != '\0'; ++i) - tmp[i] = toupper(tmp[i]); - } else + tmp = strsig(sig); + if (tmp == NULL) asprintf(&tmp, "%ld", sig); } break; |