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

index 120aeff69bcd3f265c4bca8d0fff3298802fb794..1a472af2c2bae74812d4865502f082d32b53c7a3 100644 (file)
@@ -140,6 +140,13 @@ eloop_event_add(struct eloop *eloop, int fd,
        struct pollfd *nfds;
 #endif
 
+       assert(eloop != NULL);
+       assert(read_cb != NULL || write_cb != NULL);
+       if (fd == -1) {
+               errno = EINVAL;
+               return -1;
+       }
+
 #ifdef HAVE_EPOLL
        memset(&epe, 0, sizeof(epe));
        epe.data.fd = fd;
@@ -254,6 +261,8 @@ eloop_event_delete(struct eloop *eloop, int fd, int write_only)
        struct epoll_event epe;
 #endif
 
+       assert(eloop != NULL);
+
        TAILQ_FOREACH(e, &eloop->events, next) {
                if (e->fd == fd) {
                        if (write_only) {
@@ -310,6 +319,10 @@ eloop_q_timeout_add_tv(struct eloop *eloop, int queue,
        struct timespec now, w;
        struct eloop_timeout *t, *tt = NULL;
 
+       assert(eloop != NULL);
+       assert(when != NULL);
+       assert(callback != NULL);
+
        clock_gettime(CLOCK_MONOTONIC, &now);
        timespecadd(&now, when, &w);
        /* Check for time_t overflow. */
@@ -394,6 +407,8 @@ eloop_q_timeout_delete(struct eloop *eloop, int queue,
 {
        struct eloop_timeout *t, *tt;
 
+       assert(eloop != NULL);
+
        TAILQ_FOREACH_SAFE(t, &eloop->timeouts, next, tt) {
                if ((queue == 0 || t->queue == queue) &&
                    t->arg == arg &&
@@ -409,6 +424,8 @@ void
 eloop_exit(struct eloop *eloop, int code)
 {
 
+       assert(eloop != NULL);
+
        eloop->exitcode = code;
        eloop->exitnow = 1;
 }
@@ -417,6 +434,7 @@ eloop_exit(struct eloop *eloop, int code)
 static int
 eloop_open(struct eloop *eloop)
 {
+
 #if defined(HAVE_KQUEUE1)
        return (eloop->poll_fd = kqueue1(O_CLOEXEC));
 #elif defined(HAVE_KQUEUE)
@@ -450,6 +468,8 @@ eloop_requeue(struct eloop *eloop)
        struct epoll_event epe;
 #endif
 
+       assert(eloop != NULL);
+
        if (eloop->poll_fd != -1)
                close(eloop->poll_fd);
        if (eloop_open(eloop) == -1)
@@ -508,7 +528,8 @@ eloop_signal_set_cb(struct eloop *eloop,
     void (*signal_cb)(int, void *), void *signal_cb_ctx)
 {
 
-       assert(eloop);
+       assert(eloop != NULL);
+
        eloop->signals = signals;
        eloop->signals_len = signals_len;
        eloop->signal_cb = signal_cb;
@@ -555,7 +576,11 @@ eloop_signal_mask(struct eloop *eloop, sigset_t *oldset)
        struct sigaction sa;
 #endif
 
+       assert(eloop != NULL);
+
        sigfillset(&newset);
+       if (oldset)
+               sigemptyset(oldset);
        if (sigprocmask(SIG_SETMASK, &newset, oldset) == -1)
                return -1;
 
@@ -594,6 +619,7 @@ eloop_new(void)
                eloop->exitcode = EXIT_FAILURE;
 #if defined(HAVE_KQUEUE) || defined(HAVE_EPOLL)
                eloop->poll_fd = -1;
+               eloop_open(eloop);
 #endif
        }
 
@@ -652,6 +678,8 @@ eloop_start(struct eloop *eloop, sigset_t *signals)
        _eloop = eloop;
 #endif
 
+       assert(eloop != NULL);
+
        for (;;) {
                if (eloop->exitnow)
                        break;