aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/event_loop.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/event_loop.c')
-rw-r--r--src/event_loop.c84
1 files changed, 39 insertions, 45 deletions
diff --git a/src/event_loop.c b/src/event_loop.c
index 736a553..54b83db 100644
--- a/src/event_loop.c
+++ b/src/event_loop.c
@@ -6,6 +6,7 @@
*/
#include "event_loop.h"
+
#include "log.h"
#include "string.h"
@@ -20,15 +21,14 @@ struct event_fd {
int fd;
short events;
event_handler handler;
- void *arg;
+ void* arg;
int once;
SIMPLEQ_ENTRY(event_fd) entries;
};
-static struct event_fd *event_fd_create(int fd, short events, event_handler handler, void *arg)
-{
- struct event_fd *res = calloc(1, sizeof(struct event_fd));
+static struct event_fd* event_fd_create(int fd, short events, event_handler handler, void* arg) {
+ struct event_fd* res = calloc(1, sizeof(struct event_fd));
if (!res) {
log_errno("calloc");
return NULL;
@@ -43,21 +43,18 @@ static struct event_fd *event_fd_create(int fd, short events, event_handler hand
return res;
}
-static void event_fd_destroy(struct event_fd *entry)
-{
+static void event_fd_destroy(struct event_fd* entry) {
free(entry);
}
-static void event_fd_queue_create(struct event_fd_queue *queue)
-{
+static void event_fd_queue_create(struct event_fd_queue* queue) {
SIMPLEQ_INIT(queue);
}
-static void event_fd_queue_destroy(struct event_fd_queue *queue)
-{
- struct event_fd *entry1 = SIMPLEQ_FIRST(queue);
+static void event_fd_queue_destroy(struct event_fd_queue* queue) {
+ struct event_fd* entry1 = SIMPLEQ_FIRST(queue);
while (entry1) {
- struct event_fd *entry2 = SIMPLEQ_NEXT(entry1, entries);
+ struct event_fd* entry2 = SIMPLEQ_NEXT(entry1, entries);
event_fd_destroy(entry1);
entry1 = entry2;
}
@@ -69,11 +66,10 @@ struct event_loop {
struct event_fd_queue entries;
};
-int event_loop_create(struct event_loop **_loop)
-{
+int event_loop_create(struct event_loop** _loop) {
int ret = 0;
- struct event_loop *loop = calloc(1, sizeof(struct event_loop));
+ struct event_loop* loop = calloc(1, sizeof(struct event_loop));
if (!loop) {
log_errno("calloc");
return -1;
@@ -85,14 +81,12 @@ int event_loop_create(struct event_loop **_loop)
return ret;
}
-void event_loop_destroy(struct event_loop *loop)
-{
+void event_loop_destroy(struct event_loop* loop) {
event_fd_queue_destroy(&loop->entries);
free(loop);
}
-static void event_loop_add_internal(struct event_loop *loop, struct event_fd *entry)
-{
+static void event_loop_add_internal(struct event_loop* loop, struct event_fd* entry) {
log_debug("Adding descriptor %d to event loop\n", entry->fd);
nfds_t nfds = loop->nfds + 1;
@@ -100,19 +94,24 @@ static void event_loop_add_internal(struct event_loop *loop, struct event_fd *en
loop->nfds = nfds;
}
-int event_loop_add(struct event_loop *loop, int fd, short events, event_handler handler, void *arg)
-{
- struct event_fd *entry = event_fd_create(fd, events, handler, arg);
+int event_loop_add(struct event_loop* loop,
+ int fd,
+ short events,
+ event_handler handler,
+ void* arg) {
+ struct event_fd* entry = event_fd_create(fd, events, handler, arg);
if (!entry)
return -1;
event_loop_add_internal(loop, entry);
return 0;
}
-int event_loop_add_once(struct event_loop *loop, int fd, short events, event_handler handler,
- void *arg)
-{
- struct event_fd *entry = event_fd_create(fd, events, handler, arg);
+int event_loop_add_once(struct event_loop* loop,
+ int fd,
+ short events,
+ event_handler handler,
+ void* arg) {
+ struct event_fd* entry = event_fd_create(fd, events, handler, arg);
if (!entry)
return -1;
entry->once = 1;
@@ -120,8 +119,7 @@ int event_loop_add_once(struct event_loop *loop, int fd, short events, event_han
return 0;
}
-static void event_loop_remove(struct event_loop *loop, struct event_fd *entry)
-{
+static void event_loop_remove(struct event_loop* loop, struct event_fd* entry) {
log_debug("Removing descriptor %d from event loop\n", entry->fd);
SIMPLEQ_REMOVE(&loop->entries, entry, event_fd, entries);
@@ -129,21 +127,19 @@ static void event_loop_remove(struct event_loop *loop, struct event_fd *entry)
--loop->nfds;
}
-static char *append_event(char *buf, size_t sz, char *ptr, const char *event)
-{
+static char* append_event(char* buf, size_t sz, char* ptr, const char* event) {
if (ptr > buf)
ptr = string_append(ptr, buf + sz, ",");
return string_append(ptr, buf + sz, event);
}
-static char *events_to_string(short events)
-{
+static char* events_to_string(short events) {
const size_t sz = 128;
- char *buf = calloc(1, sz);
+ char* buf = calloc(1, sz);
if (!buf)
return NULL;
- char *ptr = buf;
+ char* ptr = buf;
if (events & POLLNVAL)
ptr = append_event(buf, sz, ptr, "POLLNVAL");
@@ -163,15 +159,14 @@ static char *events_to_string(short events)
return buf;
}
-static struct pollfd *make_pollfds(const struct event_loop *loop)
-{
- struct pollfd *fds = calloc(loop->nfds, sizeof(struct pollfd));
+static struct pollfd* make_pollfds(const struct event_loop* loop) {
+ struct pollfd* fds = calloc(loop->nfds, sizeof(struct pollfd));
if (!fds) {
log_errno("calloc");
return NULL;
}
- struct event_fd *entry = SIMPLEQ_FIRST(&loop->entries);
+ struct event_fd* entry = SIMPLEQ_FIRST(&loop->entries);
for (nfds_t i = 0; i < loop->nfds; ++i, entry = SIMPLEQ_NEXT(entry, entries)) {
fds[i].fd = entry->fd;
fds[i].events = entry->events;
@@ -179,7 +174,7 @@ static struct pollfd *make_pollfds(const struct event_loop *loop)
log_debug("Descriptors:\n");
for (nfds_t i = 0; i < loop->nfds; ++i) {
- char *events = events_to_string(fds[i].events);
+ char* events = events_to_string(fds[i].events);
log_debug(" %d (%s)\n", fds[i].fd, events ? events : "");
free(events);
}
@@ -187,13 +182,12 @@ static struct pollfd *make_pollfds(const struct event_loop *loop)
return fds;
}
-int event_loop_run(struct event_loop *loop)
-{
+int event_loop_run(struct event_loop* loop) {
/* Cache the number of event descriptors so that event handlers can
* append new ones. */
const nfds_t nfds = loop->nfds;
- struct pollfd *fds = make_pollfds(loop);
+ struct pollfd* fds = make_pollfds(loop);
if (!fds)
return -1;
@@ -204,14 +198,14 @@ int event_loop_run(struct event_loop *loop)
}
ret = 0;
- struct event_fd *entry = SIMPLEQ_FIRST(&loop->entries);
+ struct event_fd* entry = SIMPLEQ_FIRST(&loop->entries);
for (nfds_t i = 0; i < nfds; ++i) {
- struct event_fd *next = SIMPLEQ_NEXT(entry, entries);
+ struct event_fd* next = SIMPLEQ_NEXT(entry, entries);
if (!fds[i].revents)
goto next;
- char *events = events_to_string(fds[i].revents);
+ char* events = events_to_string(fds[i].revents);
log_debug("Descriptor %d is ready: %s\n", fds[i].fd, events ? events : "");
free(events);