X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=secnet.git;a=blobdiff_plain;f=process.c;h=64683159ccc40be20132f5bc8d40beb89ed325c1;hp=343be9b58bc59b0eac0330cf5e168e31d7608772;hb=2ca9a1b7bc10d8d84f3b6227160cf7329aacbd9b;hpb=baab3a63ada033b2b9eed46807b2e88536612bbc diff --git a/process.c b/process.c index 343be9b..6468315 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; @@ -305,9 +310,7 @@ void start_signal_handling(void) sigemptyset(®istered); sigemptyset(&pending); - if (pipe(p)!=0) { - fatal_perror("start_signal_handling: pipe"); - } + pipe_cloexec(p); spw=p[1]; spr=p[0]; if (fcntl(spw, F_SETFL, fcntl(spw, F_GETFL)|O_NONBLOCK)==-1) {