Improve formatting of process termination messages in secchan logging.
authorBen Pfaff <blp@nicira.com>
Wed, 17 Dec 2008 00:35:56 +0000 (16:35 -0800)
committerBen Pfaff <blp@nicira.com>
Wed, 17 Dec 2008 00:41:25 +0000 (16:41 -0800)
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.

secchan/executer.c

index 5619c51bacb128eb9beb87d325c76537d0c7ff78..008d2cc1c1db5e0702e5cb5774b1f3e40dba4692 100644 (file)
@@ -318,11 +318,14 @@ child_terminated(struct child *child, int status)
     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)");