From 25377456817a6eb103f32172e3f34ed9d00af2c4 Mon Sep 17 00:00:00 2001 From: Bartosz Golaszewski Date: Thu, 30 Apr 2020 17:07:37 +0200 Subject: [PATCH] tools: unduplicate signalfd() code 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 --- tools/gpiomon.c | 22 ---------------------- tools/gpioset.c | 15 +-------------- tools/tools-common.c | 22 ++++++++++++++++++++++ tools/tools-common.h | 1 + 4 files changed, 24 insertions(+), 36 deletions(-) diff --git a/tools/gpiomon.c b/tools/gpiomon.c index 638354d..213efaa 100644 --- a/tools/gpiomon.c +++ b/tools/gpiomon.c @@ -10,10 +10,8 @@ #include #include #include -#include #include #include -#include #include #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; diff --git a/tools/gpioset.c b/tools/gpioset.c index 8880c8e..fb6d51e 100644 --- a/tools/gpioset.c +++ b/tools/gpioset.c @@ -10,11 +10,9 @@ #include #include #include -#include #include #include #include -#include #include #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; diff --git a/tools/tools-common.c b/tools/tools-common.c index 199f472..12bde20 100644 --- a/tools/tools-common.c +++ b/tools/tools-common.c @@ -10,10 +10,12 @@ #include #include #include +#include #include #include #include #include +#include #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; +} diff --git a/tools/tools-common.h b/tools/tools-common.h index c0d0cf2..9f1b801 100644 --- a/tools/tools-common.h +++ b/tools/tools-common.h @@ -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__ */ -- 2.30.2