X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/1691e80890e5d8ba258c51c214a3e91880e1db2b..d3e11c5e9:/sbr/pidstatus.c?ds=inline diff --git a/sbr/pidstatus.c b/sbr/pidstatus.c index aa664649..6e4c2c7d 100644 --- a/sbr/pidstatus.c +++ b/sbr/pidstatus.c @@ -1,21 +1,12 @@ - -/* - * 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 -/* - * auto-generated header - */ -#include - -#ifdef HAVE_SYS_WAIT_H -# include -#endif - #ifndef WTERMSIG # define WTERMSIG(s) ((int)((s) & 0x7F)) #endif @@ -24,10 +15,19 @@ # 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; + char *signame; /* * I have no idea what this is for (rc) @@ -44,15 +44,22 @@ pidstatus (int status, FILE *fp, char *cp) 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 (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)" : "");