From 947b5a6a0aaa7c6eaa4012b082173a50cb89b5de Mon Sep 17 00:00:00 2001 From: Quentin Rameau Date: Mon, 24 Jul 2017 00:48:06 +0200 Subject: [PATCH] Register signal handlers in handlesignals() --- quark.c | 47 ++++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/quark.c b/quark.c index fd78c1d..5ca7d34 100644 --- a/quark.c +++ b/quark.c @@ -890,6 +890,28 @@ getipsock(void) return insock; } +static void +cleanup(void) +{ + close(insock); + if (udsname) { + if (unlink(udsname) < 0) + fprintf(stderr, "unlink: %s\n", strerror(errno)); +} + +static void +sigcleanup(int sig) +{ + cleanup(); + _exit(1); +} + +static void +handlesignals(void(*hdl)(int)) +{ + signal(SIGINT, hdl); +} + static int getusock(char *udsname, uid_t uid, gid_t gid) { @@ -933,23 +955,6 @@ getusock(char *udsname, uid_t uid, gid_t gid) return insock; } -static void -cleanup(void) -{ - close(insock); - if (udsname) { - if (unlink(udsname) < 0) - fprintf(stderr, "unlink: %s\n", strerror(errno)); - } -} - -static void -sigcleanup(int sig) -{ - cleanup(); - _exit(1); -} - static void usage(void) { @@ -1005,12 +1010,6 @@ main(int argc, char *argv[]) usage(); } - if (signal(SIGINT, sigcleanup) == SIG_ERR) { - fprintf(stderr, "%s: signal: Failed to handle SIGINT\n", - argv0); - return 1; - } - /* compile and check the supplied vhost regexes */ if (vhosts) { for (i = 0; i < LEN(vhost); i++) { @@ -1038,6 +1037,8 @@ main(int argc, char *argv[]) die("%s: invalid group %s\n", argv0, group); } + handlesignals(sigcleanup); + /* bind socket */ insock = udsname ? getusock(udsname, pwd->pw_uid, grp->gr_gid) : getipsock();