tools: Remove signalfd() use
authorNiclas Zeising <zeising@daemonic.se>
Mon, 27 Jul 2020 18:27:43 +0000 (20:27 +0200)
committerNiclas Zeising <zeising@daemonic.se>
Fri, 14 Aug 2020 15:50:56 +0000 (17:50 +0200)
Remove signalfd() use from the mouse-dpi-tool and touchpad-edge-detector
tools, in favor of using plain old signals.
FreeBSD does not have signalfd() without pulling in external libraries,
and with this change these tools can be compiled on FreeBSD.
Instead of providing two implementations, one using signalfd() and one
using signal(), just use the signal() implementation everywhere as it is
more portable.

Signed-off-by: Niclas Zeising <zeising@daemonic.se>
tools/mouse-dpi-tool.c
tools/touchpad-edge-detector.c

index 9961f3a3257df4e1354d9111c7cb303c7acc2876..911f61e776b132439960dbbf0ca06f1eb69fe4d9 100644 (file)
@@ -23,7 +23,6 @@
 
 #include "config.h"
 
-#include <sys/signalfd.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <limits.h>
@@ -40,6 +39,8 @@
 #define min(a, b) (((a) < (b)) ? (a) : (b))
 #define max(a, b) (((a) > (b)) ? (a) : (b))
 
+static int signalled = 0;
+
 struct measurements {
        int distance;
        double max_frequency;
@@ -138,26 +139,26 @@ handle_event(struct measurements *m, const struct input_event *ev)
        return 0;
 }
 
+static void
+signal_handler(__attribute__((__unused__)) int signal)
+{
+       signalled++;
+}
+
 static int
 mainloop(struct libevdev *dev, struct measurements *m) {
-       struct pollfd fds[2];
-       sigset_t mask;
-
-       fds[0].fd = libevdev_get_fd(dev);
-       fds[0].events = POLLIN;
+       struct pollfd fds;
 
-       sigemptyset(&mask);
-       sigaddset(&mask, SIGINT);
-       fds[1].fd = signalfd(-1, &mask, SFD_NONBLOCK);
-       fds[1].events = POLLIN;
+       fds.fd = libevdev_get_fd(dev);
+       fds.events = POLLIN;
 
-       sigprocmask(SIG_BLOCK, &mask, NULL);
+       signal(SIGINT, signal_handler);
 
-       while (poll(fds, 2, -1)) {
+       while (poll(&fds, 1, -1)) {
                struct input_event ev;
                int rc;
 
-               if (fds[1].revents)
+               if (signalled)
                        break;
 
                do {
index 8b16cd76f114afad3094ccfbe21a981b12b559f4..7727cad7452c7320e4b326c9fe1ee9562b5569cb 100644 (file)
@@ -23,7 +23,6 @@
 
 #include "config.h"
 
-#include <sys/signalfd.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <limits.h>
@@ -41,6 +40,8 @@
 #define min(a, b) (((a) < (b)) ? (a) : (b))
 #define max(a, b) (((a) > (b)) ? (a) : (b))
 
+static int signalled = 0;
+
 static int
 usage(void) {
        printf("Usage: %s 12x34 /dev/input/eventX\n", program_invocation_short_name);
@@ -102,26 +103,26 @@ handle_event(struct dimensions *d, const struct input_event *ev) {
        return 0;
 }
 
+static void
+signal_handler(__attribute__((__unused__)) int signal)
+{
+       signalled++;
+}
+
 static int
 mainloop(struct libevdev *dev, struct dimensions *dim) {
-       struct pollfd fds[2];
-       sigset_t mask;
-
-       fds[0].fd = libevdev_get_fd(dev);
-       fds[0].events = POLLIN;
+       struct pollfd fds;
 
-       sigemptyset(&mask);
-       sigaddset(&mask, SIGINT);
-       fds[1].fd = signalfd(-1, &mask, SFD_NONBLOCK);
-       fds[1].events = POLLIN;
+       fds.fd = libevdev_get_fd(dev);
+       fds.events = POLLIN;
 
-       sigprocmask(SIG_BLOCK, &mask, NULL);
+       signal(SIGINT, signal_handler);
 
-       while (poll(fds, 2, -1)) {
+       while (poll(&fds, 1, -1)) {
                struct input_event ev;
                int rc;
 
-               if (fds[1].revents)
+               if (signalled)
                        break;
 
                do {