diff options
Diffstat (limited to 'src/fdevent.c')
-rw-r--r-- | src/fdevent.c | 37 |
1 files changed, 12 insertions, 25 deletions
diff --git a/src/fdevent.c b/src/fdevent.c index 55314e76..2aaa6a57 100644 --- a/src/fdevent.c +++ b/src/fdevent.c @@ -278,7 +278,7 @@ static void fdnode_free(fdnode *fdn) { free(fdn); } -void fdevent_register(fdevents *ev, int fd, fdevent_handler handler, void *ctx) { +fdnode * fdevent_register(fdevents *ev, int fd, fdevent_handler handler, void *ctx) { fdnode *fdn = ev->fdarray[fd] = fdnode_init(); force_assert(NULL != fdn); fdn->handler = handler; @@ -289,6 +289,7 @@ void fdevent_register(fdevents *ev, int fd, fdevent_handler handler, void *ctx) #ifdef FDEVENT_USE_LIBEV fdn->handler_ctx = NULL; #endif + return fdn; } void fdevent_unregister(fdevents *ev, int fd) { @@ -344,11 +345,7 @@ static void fdevent_sched_run(fdevents *ev) { ev->pendclose = NULL; } -int fdevent_event_get_interest(const fdevents *ev, int fd) { - return fd >= 0 ? ev->fdarray[fd]->events : 0; -} - -static void fdevent_fdnode_event_del(fdevents *ev, fdnode *fdn) { +static void fdevent_fdnode_event_unsetter(fdevents *ev, fdnode *fdn) { if (-1 == fdn->fde_ndx) return; if (0 == ev->event_del(ev, fdn)) { fdn->fde_ndx = -1; @@ -360,7 +357,7 @@ static void fdevent_fdnode_event_del(fdevents *ev, fdnode *fdn) { } } -static void fdevent_fdnode_event_set(fdevents *ev, fdnode *fdn, int events) { +static void fdevent_fdnode_event_setter(fdevents *ev, fdnode *fdn, int events) { /*(Note: skips registering with kernel if initial events is 0, * so caller should pass non-zero events for initial registration. * If never registered due to never being called with non-zero events, @@ -374,30 +371,20 @@ static void fdevent_fdnode_event_set(fdevents *ev, fdnode *fdn, int events) { "fdevent event_set failed: ", strerror(errno)); } -void fdevent_event_del(fdevents *ev, int fd) { - if (-1 != fd) { - fdnode *fdn = ev->fdarray[fd]; - if ((uintptr_t)fdn & 0x3) return; - fdevent_fdnode_event_del(ev, fdn); - } +void fdevent_fdnode_event_del(fdevents *ev, fdnode *fdn) { + if (NULL != fdn) fdevent_fdnode_event_unsetter(ev, fdn); } -void fdevent_event_set(fdevents *ev, int fd, int events) { - if (-1 != fd) fdevent_fdnode_event_set(ev, ev->fdarray[fd], events); +void fdevent_fdnode_event_set(fdevents *ev, fdnode *fdn, int events) { + if (NULL != fdn) fdevent_fdnode_event_setter(ev, fdn, events); } -void fdevent_event_add(fdevents *ev, int fd, int event) { - if (-1 != fd) { - fdnode *fdn = ev->fdarray[fd]; - fdevent_fdnode_event_set(ev, fdn, (fdn->events | event)); - } +void fdevent_fdnode_event_add(fdevents *ev, fdnode *fdn, int event) { + if (NULL != fdn) fdevent_fdnode_event_setter(ev, fdn, (fdn->events|event)); } -void fdevent_event_clr(fdevents *ev, int fd, int event) { - if (-1 != fd) { - fdnode *fdn = ev->fdarray[fd]; - fdevent_fdnode_event_set(ev, fdn, (fdn->events & ~event)); - } +void fdevent_fdnode_event_clr(fdevents *ev, fdnode *fdn, int event) { + if (NULL != fdn) fdevent_fdnode_event_setter(ev, fdn, (fdn->events&~event)); } int fdevent_poll(fdevents *ev, int timeout_ms) { |