Import new eloop.
authorRoy Marples <roy@marples.name>
Wed, 13 May 2015 01:34:11 +0000 (01:34 +0000)
committerRoy Marples <roy@marples.name>
Wed, 13 May 2015 01:34:11 +0000 (01:34 +0000)
src/dhcpcd-curses/dhcpcd-curses.c
src/dhcpcd-curses/eloop.c
src/dhcpcd-curses/eloop.h

index f47e74b9ac0557ba24bb15848154f886ce4d3f33..df6b2f12459ec6e9227d67d4d8c813aa17de344f 100644 (file)
        void _nc_free_and_exit(void);
 #endif
 
-const int sigs[] = {
+static const int sigs[] = {
        SIGHUP,
        SIGINT,
        SIGPIPE,
        SIGTERM,
-       SIGWINCH,
-       0
+       SIGWINCH
 };
 
+#ifndef __arraycount
+#define __arraycount(__x)       (sizeof(__x) / sizeof(__x[0]))
+#endif
+
 static void try_open(void *);
 
 static void
@@ -510,7 +513,8 @@ main(void)
 
        if ((ctx.eloop = eloop_new()) == NULL)
                err(EXIT_FAILURE, "eloop_new");
-       if (eloop_signal_set_cb(ctx.eloop, sigs, signal_cb, &ctx) == -1)
+       if (eloop_signal_set_cb(ctx.eloop, sigs, __arraycount(sigs),
+           signal_cb, &ctx) == -1)
                err(EXIT_FAILURE, "eloop_signal_set_cb");
        if (eloop_signal_mask(ctx.eloop, &sigmask) == -1)
                err(EXIT_FAILURE, "eloop_signal_mask");
index 85e65a98f14d65736db16d6483626e2ce0b4af99..120aeff69bcd3f265c4bca8d0fff3298802fb794 100644 (file)
@@ -455,9 +455,7 @@ eloop_requeue(struct eloop *eloop)
        if (eloop_open(eloop) == -1)
                return -1;
 #if defined (HAVE_KQUEUE)
-       i = 0;
-       while (eloop->signals[i] != 0)
-               i++;
+       i = eloop->signals_len;
        TAILQ_FOREACH(e, &eloop->events, next) {
                i++;
                if (e->write_cb)
@@ -467,7 +465,7 @@ eloop_requeue(struct eloop *eloop)
        if ((ke = malloc(sizeof(*ke) * i)) == NULL)
                return -1;
 
-       for (i = 0; eloop->signals[i] != 0; i++)
+       for (i = 0; i < eloop->signals_len; i++)
                EV_SET(&ke[i], (uintptr_t)eloop->signals[i],
                    EVFILT_SIGNAL, EV_ADD, 0, 0, UPTR(NULL));
 
@@ -506,11 +504,13 @@ eloop_requeue(struct eloop *eloop)
 
 int
 eloop_signal_set_cb(struct eloop *eloop,
-    const int *signals, void (*signal_cb)(int, void *), void *signal_cb_ctx)
+    const int *signals, size_t signals_len,
+    void (*signal_cb)(int, void *), void *signal_cb_ctx)
 {
 
        assert(eloop);
        eloop->signals = signals;
+       eloop->signals_len = signals_len;
        eloop->signal_cb = signal_cb;
        eloop->signal_cb_ctx = signal_cb_ctx;
        return eloop_requeue(eloop);
@@ -551,7 +551,7 @@ eloop_signal_mask(struct eloop *eloop, sigset_t *oldset)
 {
        sigset_t newset;
 #ifndef HAVE_KQUEUE
-       int i;
+       size_t i;
        struct sigaction sa;
 #endif
 
@@ -567,7 +567,7 @@ eloop_signal_mask(struct eloop *eloop, sigset_t *oldset)
        sa.sa_flags = SA_SIGINFO;
        sigemptyset(&sa.sa_mask);
 
-       for (i = 0; eloop->signals[i]; i++) {
+       for (i = 0; i < eloop->signals_len; i++) {
                if (sigaction(eloop->signals[i], &sa, NULL) == -1)
                        return -1;
        }
index 5fda52ba1d14dbb0a43bab225569748535232f37..6746aaff14585affb522e8a48c652245daee7a39 100644 (file)
@@ -134,6 +134,7 @@ struct eloop {
        void (*timeout0)(void *);
        void *timeout0_arg;
        const int *signals;
+       size_t signals_len;
        void (*signal_cb)(int, void *);
        void *signal_cb_ctx;
 
@@ -169,7 +170,7 @@ int eloop_q_timeout_add_msec(struct eloop *, int queue,
     long, void (*)(void *), void *);
 void eloop_q_timeout_delete(struct eloop *, int, void (*)(void *), void *);
 
-int eloop_signal_set_cb(struct eloop *, const int *,
+int eloop_signal_set_cb(struct eloop *, const int *, size_t,
     void (*)(int, void *), void *);
 int eloop_signal_mask(struct eloop *, sigset_t *oldset);