X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Fpidstatus.c;h=cab45f5440c762eb94e13c61cccafe307e986d1b;hp=a9befee5f71303fe31546ef53e220ac01bd47269;hb=f78e7c6e6e616cc4ff2bee8a726365fafef2d8ce;hpb=0c648c7c1509760370d4c4267a45a5a305885e7f diff --git a/sbr/pidstatus.c b/sbr/pidstatus.c index a9befee..cab45f5 100644 --- a/sbr/pidstatus.c +++ b/sbr/pidstatus.c @@ -6,12 +6,13 @@ ** complete copyright information. */ +#include #include /* ** auto-generated header */ -#include +#include "sigmsg.h" #include #ifndef WTERMSIG @@ -35,27 +36,41 @@ pidstatus(int status, FILE *fp, char *cp) ** return status; */ - /* If child process returned normally */ if (WIFEXITED(status)) { + /* child process returned normally */ if ((signum = WEXITSTATUS(status))) { - if (cp) + if (cp) { fprintf(fp, "%s: ", cp); + } fprintf(fp, "exit %d\n", signum); } } else if (WIFSIGNALED(status)) { - /* If child process terminated due to receipt of a signal */ + /* 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], - WCOREDUMP(status) ? ", core dumped" : ""); - else - fprintf(fp, "%s\n", WCOREDUMP(status) ? " (core dumped)" : ""); + if (signum == SIGINT) { + return status; + } + if (cp) { + fprintf(fp, "%s: ", cp); + } + fprintf(fp, "signal %d", signum); + if (signum >= 0 && signum < (int)sizeof(sigmsg) && + sigmsg[signum] != NULL) { + fprintf(fp, " (%s%s)\n", sigmsg[signum], + WCOREDUMP(status) ? + ", core dumped" : ""); + } else { + fprintf(fp, "%s\n", WCOREDUMP(status) ? + " (core dumped)" : ""); } } return status; } + + +int +pidXwait(int pid, char *cp) +{ + return pidstatus(pidwait(pid, -1), stdout, cp); +}