My expectation was that strsignal() returns the signal's name, e.g.
SIGTERM. It actually returns an English explanation, so that the existing
code would log a message like "terminated by signal Terminated". This
commit changes the message to the more sensible "terminated by signal 15
(Terminated)".
Also, the recently approved POSIX 2008 standardized strsignal() and in
particular says that it may return NULL for unknown signal numbers, so
this commit fixes the behavior on NULL return.
if (WIFEXITED(status)) {
ds_put_format(&ds, "normally with status %d", WEXITSTATUS(status));
} else if (WIFSIGNALED(status)) {
+ const char *name = NULL;
#ifdef HAVE_STRSIGNAL
- ds_put_format(&ds, "by signal %s", strsignal(WTERMSIG(status)));
-#else
- ds_put_format(&ds, "by signal %d", WTERMSIG(status));
+ name = strsignal(WTERMSIG(status));
#endif
+ ds_put_format(&ds, "by signal %d", WTERMSIG(status));
+ if (name) {
+ ds_put_format(&ds, " (%s)", name);
+ }
}
if (WCOREDUMP(status)) {
ds_put_cstr(&ds, " (core dumped)");