tools: unduplicate signalfd() code
authorBartosz Golaszewski <bgolaszewski@baylibre.com>
Thu, 30 Apr 2020 15:07:37 +0000 (17:07 +0200)
committerBartosz Golaszewski <bgolaszewski@baylibre.com>
Thu, 30 Apr 2020 15:07:37 +0000 (17:07 +0200)
The code creating the signal file descriptor in gpiomon and gpioset is
pretty much the same. Move it into tools-common.

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
tools/gpiomon.c
tools/gpioset.c
tools/tools-common.c
tools/tools-common.h

index 638354de9678b0754a2492624b52d96304863af9..213efaa0b8b15b0362ca7e1546574d2dc7cdb755 100644 (file)
 #include <gpiod.h>
 #include <limits.h>
 #include <poll.h>
-#include <signal.h>
 #include <stdio.h>
 #include <string.h>
-#include <sys/signalfd.h>
 #include <unistd.h>
 
 #include "tools-common.h"
@@ -226,26 +224,6 @@ static int event_callback(int event_type, unsigned int line_offset,
        return GPIOD_CTXLESS_EVENT_CB_RET_OK;
 }
 
-static int make_signalfd(void)
-{
-       sigset_t sigmask;
-       int sigfd, rv;
-
-       sigemptyset(&sigmask);
-       sigaddset(&sigmask, SIGTERM);
-       sigaddset(&sigmask, SIGINT);
-
-       rv = sigprocmask(SIG_BLOCK, &sigmask, NULL);
-       if (rv < 0)
-               die("error masking signals: %s", strerror(errno));
-
-       sigfd = signalfd(-1, &sigmask, 0);
-       if (sigfd < 0)
-               die("error creating signalfd: %s", strerror(errno));
-
-       return sigfd;
-}
-
 int main(int argc, char **argv)
 {
        unsigned int offsets[GPIOD_LINE_BULK_MAX_LINES], num_lines = 0, offset;
index 8880c8ea3d47d9f750edc99332c89d749d2de930..fb6d51e95812c16ee14e2881ebd68fa822a94433 100644 (file)
 #include <getopt.h>
 #include <limits.h>
 #include <poll.h>
-#include <signal.h>
 #include <stdio.h>
 #include <string.h>
 #include <sys/select.h>
-#include <sys/signalfd.h>
 #include <unistd.h>
 
 #include "tools-common.h"
@@ -109,20 +107,9 @@ static void wait_signal(void *data)
 {
        struct callback_data *cbdata = data;
        struct pollfd pfd;
-       sigset_t sigmask;
        int sigfd, rv;
 
-       sigemptyset(&sigmask);
-       sigaddset(&sigmask, SIGTERM);
-       sigaddset(&sigmask, SIGINT);
-
-       rv = sigprocmask(SIG_BLOCK, &sigmask, NULL);
-       if (rv < 0)
-               die("error blocking signals: %s", strerror(errno));
-
-       sigfd = signalfd(-1, &sigmask, 0);
-       if (sigfd < 0)
-               die("error creating signalfd: %s", strerror(errno));
+       sigfd = make_signalfd();
 
        memset(&pfd, 0, sizeof(pfd));
        pfd.fd = sigfd;
index 199f472734e98818bc13c27dafbf9e3d4c7f0046..12bde20a2f8127915d4da6d7ac3a0c689800fd06 100644 (file)
 #include <errno.h>
 #include <gpiod.h>
 #include <libgen.h>
+#include <signal.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/signalfd.h>
 
 #include "tools-common.h"
 
@@ -79,3 +81,23 @@ void print_bias_help(void)
        printf("  pull-up:\tenable pull-up\n");
        printf("  pull-down:\tenable pull-down\n");
 }
+
+int make_signalfd(void)
+{
+       sigset_t sigmask;
+       int sigfd, rv;
+
+       sigemptyset(&sigmask);
+       sigaddset(&sigmask, SIGTERM);
+       sigaddset(&sigmask, SIGINT);
+
+       rv = sigprocmask(SIG_BLOCK, &sigmask, NULL);
+       if (rv < 0)
+               die("error masking signals: %s", strerror(errno));
+
+       sigfd = signalfd(-1, &sigmask, 0);
+       if (sigfd < 0)
+               die("error creating signalfd: %s", strerror(errno));
+
+       return sigfd;
+}
index c0d0cf24c0426392847c388bd4b81a2cd18e18b1..9f1b801c2b510144839da86f8a0d1e6037bdf10e 100644 (file)
@@ -27,5 +27,6 @@ void die_perror(const char *fmt, ...) NORETURN PRINTF(1, 2);
 void print_version(void);
 int bias_flags(const char *option);
 void print_bias_help(void);
+int make_signalfd(void);
 
 #endif /* __GPIOD_TOOLS_COMMON_H__ */