Capture SIGINT and print out all received output so far. Useful when debugging
authoranton <anton@openbsd.org>
Sun, 25 Jun 2017 08:31:44 +0000 (08:31 +0000)
committeranton <anton@openbsd.org>
Sun, 25 Jun 2017 08:31:44 +0000 (08:31 +0000)
broken tests.

regress/bin/ksh/edit/edit.c

index 247e0b0..500875e 100644 (file)
 #include <unistd.h>
 #include <util.h>
 
-static void            sigchld(int);
+static void            sighandler(int);
 static void __dead     usage(void);
 
-static volatile sig_atomic_t   gotsigchld;
+static volatile sig_atomic_t   gotsig;
 
 int
 main(int argc, char *argv[])
@@ -59,8 +59,10 @@ main(int argc, char *argv[])
                nin += n;
        }
 
-       if (signal(SIGCHLD, sigchld) == SIG_ERR)
-               err(1, "signal");
+       if (signal(SIGCHLD, sighandler) == SIG_ERR)
+               err(1, "signal: SIGCHLD");
+       if (signal(SIGINT, sighandler) == SIG_ERR)
+               err(1, "signal: SIGINT");
 
        memset(&ws, 0, sizeof(ws));
        ws.ws_col = 80,
@@ -77,7 +79,7 @@ main(int argc, char *argv[])
        nread = nwrite = 0;
        pfd.fd = ptyfd;
        pfd.events = (POLLIN | POLLOUT);
-       while (!gotsigchld) {
+       while (!gotsig) {
                nready = poll(&pfd, 1, 10);
                if (nready == -1) {
                        if (errno == EINTR)
@@ -122,9 +124,9 @@ main(int argc, char *argv[])
 }
 
 static void
-sigchld(int sig)
+sighandler(int sig)
 {
-       gotsigchld = sig == SIGCHLD;
+       gotsig = sig;
 }
 
 static void __dead