From 54064158d84fc4006e651deb314cde156cc383e8 Mon Sep 17 00:00:00 2001 From: tomsmeding Date: Tue, 14 Mar 2017 11:05:35 +0100 Subject: Register working --- runloop.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 runloop.c (limited to 'runloop.c') diff --git a/runloop.c b/runloop.c new file mode 100644 index 0000000..d2865a2 --- /dev/null +++ b/runloop.c @@ -0,0 +1,53 @@ +#include +#include +#include "runloop.h" + + +struct fd_list_item{ + int fd; + runloop_callback *func; +}; + +static struct fd_list_item *fd_list; +static size_t fd_list_len,fd_list_cap; + +__attribute__((constructor)) +static void constructor(void){ + fd_list_cap=16; + fd_list_len=0; + fd_list=malloc(fd_list_cap,struct fd_list_item); +} + + +void runloop_add_fd(int fd,runloop_callback *func){ + if(fd_list_len==fd_list_cap){ + fd_list_cap*=2; + fd_list=realloc(fd_list,fd_list_cap,struct fd_list_item); + } + fd_list[fd_list_len].fd=fd; + fd_list[fd_list_len].func=func; + fd_list_len++; +} + +void runloop_run(void){ + while(true){ + fd_set inset; + FD_ZERO(&inset); + int maxfd=-1; + for(size_t i=0;imaxfd)maxfd=fd_list[i].fd; + } + int ret=select(maxfd+1,&inset,NULL,NULL,NULL); + if(ret<=0)die_perror("select"); + for(size_t i=0;i