]> git.ozlabs.org Git - petitboot/blobdiff - lib/waiter/waiter.c
Fix waiter_register return value
[petitboot] / lib / waiter / waiter.c
index 21dd4a589650d207b65441e05b61a0aaf8255aa2..0bb213cce2840b5ce82c2bab19db9cb8105e8a8e 100644 (file)
@@ -25,6 +25,10 @@ struct waiter *waiter_register(int fd, int events,
        n_waiters++;
 
        waiters = talloc_realloc(NULL, waiters, struct waiter, n_waiters);
+       
+       if(!waiters)
+               return NULL;
+       
        waiter = &waiters[n_waiters - 1];
 
        waiter->fd = fd;
@@ -32,7 +36,7 @@ struct waiter *waiter_register(int fd, int events,
        waiter->callback = callback;
        waiter->arg = arg;
 
-       return 0;
+       return waiter;
 }
 
 void waiter_remove(struct waiter *waiter)
@@ -43,7 +47,8 @@ void waiter_remove(struct waiter *waiter)
        assert(i >= 0 && i < n_waiters);
 
        n_waiters--;
-       memmove(&waiters[i], &waiters[i+1], n_waiters - i);
+       memmove(&waiters[i], &waiters[i+1],
+               (n_waiters - i) * sizeof(waiters[0]));
 
        waiters = talloc_realloc(NULL, waiters, struct waiter, n_waiters);
 }
@@ -54,9 +59,10 @@ int waiter_poll(void)
        static int n_pollfds;
        int i, rc;
 
-       if (n_waiters > n_pollfds) {
+       if (n_waiters != n_pollfds) {
                pollfds = talloc_realloc(NULL, pollfds,
                                struct pollfd, n_waiters);
+               n_pollfds = n_waiters;
        }
 
        for (i = 0; i < n_waiters; i++) {