Allow the log output to be stopped with control-C in tinc's shell.
authorGuus Sliepen <guus@tinc-vpn.org>
Thu, 30 May 2013 15:38:48 +0000 (17:38 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Thu, 30 May 2013 15:38:48 +0000 (17:38 +0200)
src/tincctl.c

index a0061dce23da8cf9d30ccffccf38d215c84d7410..1183dd78c4401874d41a635722f0947bbff7a1b6 100644 (file)
@@ -469,7 +469,8 @@ bool recvline(int fd, char *line, size_t len) {
        char *newline = NULL;
 
        if(!fd)
-abort();
+               abort();
+
        while(!(newline = memchr(buffer, '\n', blen))) {
                int result = recv(fd, buffer + blen, sizeof buffer - blen, 0);
                if(result == -1 && errno == EINTR)
@@ -1187,6 +1188,13 @@ static int cmd_pcap(int argc, char *argv[]) {
        return 0;
 }
 
+#ifdef SIGINT
+static void sigint_handler(int sig) {
+       fprintf(stderr, "\n");
+       shutdown(fd, SHUT_RDWR);
+}
+#endif
+
 static int cmd_log(int argc, char *argv[]) {
        if(argc > 2) {
                fprintf(stderr, "Too many arguments!\n");
@@ -1196,7 +1204,18 @@ static int cmd_log(int argc, char *argv[]) {
        if(!connect_tincd(true))
                return 1;
 
+#ifdef SIGINT
+       signal(SIGINT, sigint_handler);
+#endif
+
        logcontrol(fd, stdout, argc > 1 ? atoi(argv[1]) : -1);
+
+#ifdef SIGINT
+       signal(SIGINT, SIG_DFL);
+#endif
+
+       close(fd);
+       fd = -1;
        return 0;
 }