- /* 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);
- 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)" : "");
- }
+ mesg = "signalled";
+ num = WTERMSIG(status);
+ if (num == SIGINT)
+ return status;
+ lookup = true;
+ } else if (WIFSTOPPED(status)) {
+ mesg = "stopped";
+ num = WSTOPSIG(status);
+ lookup = true;
+ } else if (WIFCONTINUED(status)) {
+ mesg = "continued";
+ num = -1;
+ lookup = false;
+ } else {
+ mesg = "bizarre wait(2) status";
+ num = status;
+ lookup = false;
+ }
+
+ if (cp)
+ fprintf(fp, "%s: ", cp);
+ fputs(mesg, fp);
+
+ if (num != -1) {
+ fprintf(fp, " %#x", num);
+ if (lookup) {
+ errno = 0;
+ signame = strsignal(num);
+ if (errno)
+ signame = "invalid";
+ putc(' ', fp);
+ fputs(signame, fp);
+ }