]> diplodocus.org Git - nmh/blobdiff - sbr/pidstatus.c
Don't `else' after goto. Simplify control flow.
[nmh] / sbr / pidstatus.c
index aa664649a887a5fc901523b8fd45c3c70fff4690..ded38edc15801a8299a7a5bfce203951430c6b66 100644 (file)
@@ -2,20 +2,13 @@
 /*
  * pidstatus.c -- report child's status
  *
 /*
  * pidstatus.c -- report child's status
  *
- * $Id$
+ * This code is Copyright (c) 2002, by the authors of nmh.  See the
+ * COPYRIGHT file in the root directory of the nmh distribution for
+ * complete copyright information.
  */
 
 #include <h/mh.h>
 
  */
 
 #include <h/mh.h>
 
-/*
- * auto-generated header
- */
-#include <sigmsg.h>
-
-#ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-
 #ifndef WTERMSIG
 # define WTERMSIG(s) ((int)((s) & 0x7F))
 #endif
 #ifndef WTERMSIG
 # define WTERMSIG(s) ((int)((s) & 0x7F))
 #endif
 # define WCOREDUMP(s) ((s) & 0x80)
 #endif
 
 # define WCOREDUMP(s) ((s) & 0x80)
 #endif
 
+/*
+ * Return 0 if the command exited with an exit code of zero, a nonzero code
+ * otherwise.
+ *
+ * Print out an appropriate status message we didn't exit with an exit code
+ * of zero.
+ */
+
 int
 pidstatus (int status, FILE *fp, char *cp)
 {
     int signum;
 int
 pidstatus (int status, FILE *fp, char *cp)
 {
     int signum;
+    char *signame;
 
 /*
  * I have no idea what this is for (rc)
 
 /*
  * I have no idea what this is for (rc)
@@ -44,15 +46,22 @@ pidstatus (int status, FILE *fp, char *cp)
                fprintf (fp, "%s: ", cp);
            fprintf (fp, "exit %d\n", signum);
        }
                fprintf (fp, "%s: ", cp);
            fprintf (fp, "exit %d\n", signum);
        }
-    } else if (WIFSIGNALED(status)) {
+       return signum;
+    }
+
+    if (WIFSIGNALED(status)) {
        /* If child process terminated due to receipt of a signal */
        signum = WTERMSIG(status);
        if (signum != SIGINT) {
            if (cp)
                fprintf (fp, "%s: ", cp);
            fprintf (fp, "signal %d", signum);
        /* If child process terminated due to receipt of a signal */
        signum = WTERMSIG(status);
        if (signum != SIGINT) {
            if (cp)
                fprintf (fp, "%s: ", cp);
            fprintf (fp, "signal %d", signum);
-           if (signum >= 0 && signum < sizeof(sigmsg) && sigmsg[signum] != NULL)
-               fprintf (fp, " (%s%s)\n", sigmsg[signum],
+           errno = 0;
+           signame = strsignal(signum);
+           if (errno)
+               signame = NULL;
+           if (signame)
+               fprintf (fp, " (%s%s)\n", signame,
                         WCOREDUMP(status) ? ", core dumped" : "");
            else
                fprintf (fp, "%s\n", WCOREDUMP(status) ? " (core dumped)" : "");
                         WCOREDUMP(status) ? ", core dumped" : "");
            else
                fprintf (fp, "%s\n", WCOREDUMP(status) ? " (core dumped)" : "");