delight/src/io/events_c.c

51 lines
1004 B
C

#include <stdlib.h>
#include <ev.h>
#define UNUSED(x) ((void)(x))
#define IOEV_NONE 0
#define IOEV_READ 1
#define IOEV_WRITE 2
#define IOEV_TIMEOUT 4
#define IOEV_ERROR 128
void ioev_event_callback(void* watcher, int revents);
struct ev_loop *ioev_ev_default_loop (unsigned int flags) {
return ev_default_loop(flags);
}
static void io_cb(struct ev_loop *loop, ev_io *w, int revents) {
int ev = 0;
UNUSED(loop);
if (revents & EV_READ) ev = ev | IOEV_READ;
if (revents & EV_WRITE) ev = ev | IOEV_WRITE;
if (revents & EV_ERROR) ev = ev | IOEV_ERROR;
ioev_event_callback(w->data, ev);
}
ev_io* ioev_io_watcher_new(void *watcher) {
ev_io *w = malloc(sizeof(ev_io));
ev_io_init(w, io_cb, -1, 0);
w->data = watcher;
return w;
}
void ioev_io_watcher_free(ev_io *w) {
free(w);
}
void ioev_io_set(ev_io *w, int fd, int ev) {
int events = 0;
if (ev & IOEV_READ) events = events | EV_READ;
if (ev & IOEV_WRITE) events = events | EV_WRITE;
ev_io_set(w, fd, events);
}