chiark / gitweb /
logging: Provide lg_exitstatus
[secnet.git] / log.c
diff --git a/log.c b/log.c
index 156f3549df18c23c481cc017f587ea96b475be79..3748f9157d15dc7778847201c0eaed777f39fdc5 100644 (file)
--- a/log.c
+++ b/log.c
@@ -225,6 +225,23 @@ void lg_perror(struct log_if *lg, const char *desc, struct cloc *loc,
     va_end(al);
 }
 
     va_end(al);
 }
 
+void lg_exitstatus(struct log_if *lg, const char *desc, struct cloc *loc,
+                  int class, int status, const char *progname)
+{
+    if (!status)
+       lg_perror(lg,desc,loc,class,0,"%s exited",progname);
+    else if (WIFEXITED(status))
+       lg_perror(lg,desc,loc,class,0,"%s exited with error exit status %d",
+                 progname,WEXITSTATUS(status));
+    else if (WIFSIGNALED(status))
+       lg_perror(lg,desc,loc,class,0,"%s died due to fatal signal %s (%d)%s",
+                 progname,strsignal(WTERMSIG(status)),WTERMSIG(status),
+                 WCOREDUMP(status)?" (core dumped)":"");
+    else
+       lg_perror(lg,desc,loc,class,0,"%s died with unknown wait status %d",
+                 progname,status);
+}
+
 struct log_if *init_log(list_t *ll)
 {
     int i=0;
 struct log_if *init_log(list_t *ll)
 {
     int i=0;