X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=secnet.git;a=blobdiff_plain;f=process.c;h=a9ff3d92648557d7692d9da97fe864c41227a5fe;hp=343be9b58bc59b0eac0330cf5e168e31d7608772;hb=3c35339bc4d3db033cc44558baf66c80e87fbd85;hpb=baab3a63ada033b2b9eed46807b2e88536612bbc diff --git a/process.c b/process.c index 343be9b..a9ff3d9 100644 --- a/process.c +++ b/process.c @@ -152,7 +152,7 @@ int sys_cmd(const char *path, const char *arg, ...) path, arg, WTERMSIG(rv), strsignal(WTERMSIG(rv)), WCOREDUMP(rv) ? " - core dumped" : ""); else - Message(M_ERR, "sys_cmd(%s,%s,...) exited with wstat %#x", + Message(M_ERR, "sys_cmd(%s,%s,...) exited with wstat %#x\n", path, arg, rv); } } else if (c==0) { @@ -193,6 +193,9 @@ static int signal_beforepoll(void *st, struct pollfd *fds, int *nfds_io, return 0; } +/* Bodge to work around Ubuntu's strict header files */ +static void discard(int anything) {} + static afterpoll_fn signal_afterpoll; static void signal_afterpoll(void *st, struct pollfd *fds, int nfds) { @@ -201,7 +204,8 @@ static void signal_afterpoll(void *st, struct pollfd *fds, int nfds) sigset_t todo,old; if (nfds && (fds->revents & POLLIN)) { - read(spr,buf,16); /* We don't actually care what we read; as + discard(read(spr,buf,16)); + /* We don't actually care what we read; as long as there was at least one byte (which there was) we'll pick up the signals in the pending set */ @@ -253,7 +257,8 @@ static void signal_handler(int signum) will be atomic, and it seems to be the lesser of the two evils. */ saved_errno=errno; - write(spw,&thing,1); /* We don't care if this fails (i.e. the pipe + discard(write(spw,&thing,1)); + /* We don't care if this fails (i.e. the pipe is full) because the service routine will spot the pending signal anyway */ errno=saved_errno;