chiark / gitweb /
autoconf: Update to autoconf 2.69
[secnet.git] / process.c
index 343be9b58bc59b0eac0330cf5e168e31d7608772..64683159ccc40be20132f5bc8d40beb89ed325c1 100644 (file)
--- 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(&registered);
     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) {