+++ /dev/null
-/* event.c -- event management stuff
- *
- * author: hackbard@hackdaworld.dyndns.org
- *
- */
-
-#include "event.h"
-
-int event_init(t_event *event) {
-
- puts("[event] initializing event system ...");
-
- event->maxfd=0;
-
- FD_ZERO(&(event->rfds));
- FD_ZERO(&(event->rfds_o));
- FD_ZERO(&(event->wfds));
- FD_ZERO(&(event->wfds_o));
-
- return E_SUCCESS;
-}
-
-int event_math(int fd,t_event *event,char rw,char ar) {
-
- if(ar==ADD) {
- if(rw==READ) FD_SET(fd,&(event->rfds_o));
- else FD_SET(fd,&(event->wfds_o));
- if(fd>event->maxfd) event->maxfd=fd;
- } else {
- if(rw==READ) FD_CLR(fd,&(event->rfds_o));
- else FD_CLR(fd,&(event->wfds_o));
- if(fd==event->maxfd) event->maxfd-=1;
- }
-
- printf("[event] %c fd %d to %c file descriptor set\n",ar==ADD?'+':'-',fd,
- rw==READ?'r':'w');
-
- return E_SUCCESS;
-}
-
-int event_start(t_event *event,void *ptr,
- int (*callback0)(t_event *event,void *ptr),
- int (*callback1)(t_event *event,void *ptr)) {
-
- int s_ret;
- struct timeval tv;
-
- /* switch on event system */
- event->status=ENABLED;
-
- while(event->status&ENABLED) {
-
- event->rfds=event->rfds_o;
- event->wfds=event->wfds_o;
- tv=event->timeout;
-
- if((s_ret=select(event->maxfd+1,&(event->rfds),&(event->wfds),NULL,
- &tv))==-1) {
- perror("[event] select call");
- return E_ERROR;
- }
-
- if(s_ret) {
- /* 1+ fd(s) available for reading/writing */
- if(callback0(event,ptr)==CALLBACK_ERROR) {
- puts("[event] callback0 returned error");
- return E_ERROR;
- }
- }
-
- /* usual stuff to be executed */
- if(callback1(event,ptr)==CALLBACK_ERROR) {
- puts("[event] callback returned error");
- return E_ERROR;
- }
-
- }
-
- return E_SUCCESS;
-}
-
-int event_stop(t_event *event) {
-
- puts("[event] shutdown");
- event->status=DISABLED;
-
- return E_SUCCESS;
-}