From: Guus Sliepen Date: Thu, 30 May 2013 15:38:48 +0000 (+0200) Subject: Allow the log output to be stopped with control-C in tinc's shell. X-Git-Tag: release-1.1pre8~36 X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=commitdiff_plain;h=ce5e0f6557edba19f8077661c034f48cdfd64b9a Allow the log output to be stopped with control-C in tinc's shell. --- diff --git a/src/tincctl.c b/src/tincctl.c index a0061dce..1183dd78 100644 --- a/src/tincctl.c +++ b/src/tincctl.c @@ -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; }