Trying to get this somewhat working
This commit is contained in:
parent
fc323ec8ab
commit
eb5778eb33
|
@ -7,7 +7,7 @@
|
|||
|
||||
|
||||
# define ARRAY(type, name) \
|
||||
typedef Array type ## Array; \
|
||||
typedef Array name ## Array; \
|
||||
Array * name ## array_new(void) { return array_new(sizeof(type)); }
|
||||
|
||||
|
||||
|
@ -25,7 +25,7 @@ void array_delete(Array * array);
|
|||
int array_append(Array * array, void * data);
|
||||
void array_apply(Array * array, ArrayApplyFunc func, void * userdata);
|
||||
unsigned int array_count(Array * array);
|
||||
int array_get(Array * array, unsigned int pos, void ** data);
|
||||
int array_get(Array * array, unsigned int pos, void * data);
|
||||
int array_remove_pos(Array * array, unsigned int pos);
|
||||
int array_set(Array * array, unsigned int pos, void * data);
|
||||
|
||||
|
|
|
@ -28,6 +28,6 @@ int event_register_io_read(Event * event, int fd, EventIOFunc func,
|
|||
int event_register_io_write(Event * event, int fd, EventIOFunc func,
|
||||
void * userdata);
|
||||
int event_register_timeout(Event * event, struct timeval timeout,
|
||||
EventTimeoutFunc * func, void * userdata);
|
||||
EventTimeoutFunc func, void * userdata);
|
||||
|
||||
#endif /* !_EVENT_H */
|
||||
|
|
17
src/array.c
17
src/array.c
|
@ -3,7 +3,9 @@
|
|||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#ifdef DEBUG
|
||||
# include <stdio.h>
|
||||
#endif
|
||||
#include <string.h>
|
||||
#include "array.h"
|
||||
|
||||
|
@ -20,6 +22,9 @@ Array * array_new(unsigned int size)
|
|||
{
|
||||
Array * array;
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "%s%d%s", "array_new(", size, ")\n");
|
||||
#endif
|
||||
if((array = malloc(sizeof(Array))) == NULL)
|
||||
return NULL;
|
||||
array->data = NULL;
|
||||
|
@ -41,10 +46,7 @@ int array_append(Array * array, void * data)
|
|||
void * p;
|
||||
|
||||
if((p = realloc(array->data, array->size * (array->count + 1))) == NULL)
|
||||
{
|
||||
perror("malloc");
|
||||
return 1;
|
||||
}
|
||||
array->data = p;
|
||||
memcpy(&p[array->size * array->count], data, array->size);
|
||||
array->count++;
|
||||
|
@ -67,11 +69,14 @@ unsigned int array_count(Array * array)
|
|||
}
|
||||
|
||||
|
||||
int array_get(Array * array, unsigned int pos, void ** data)
|
||||
int array_get(Array * array, unsigned int pos, void * data)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "%s%d%s", "array_get(array, ", pos, ", data)\n");
|
||||
#endif
|
||||
if(pos >= array->count)
|
||||
return 1;
|
||||
memcpy(*data, &array->data[pos * array->size], array->size);
|
||||
memcpy(data, &array->data[pos * array->size], array->size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
32
src/event.c
32
src/event.c
|
@ -25,7 +25,7 @@ typedef struct _EventTimeout
|
|||
EventTimeoutFunc func;
|
||||
void * data;
|
||||
} EventTimeout;
|
||||
ARRAY(EventTimeout, eventtimeout);
|
||||
ARRAY(EventTimeout *, eventtimeout);
|
||||
|
||||
typedef struct _EventIO
|
||||
{
|
||||
|
@ -33,17 +33,17 @@ typedef struct _EventIO
|
|||
EventIOFunc func;
|
||||
void * data;
|
||||
} EventIO;
|
||||
ARRAY(EventIO, eventio);
|
||||
ARRAY(EventIO *, eventio);
|
||||
|
||||
struct _Event
|
||||
{
|
||||
int fdmax;
|
||||
fd_set rfds;
|
||||
fd_set wfds;
|
||||
EventTimeoutArray * timeouts;
|
||||
eventioArray * reads;
|
||||
eventioArray * writes;
|
||||
eventtimeoutArray * timeouts;
|
||||
struct timeval timeout;
|
||||
EventIOArray * reads;
|
||||
EventIOArray * writes;
|
||||
int fdmax;
|
||||
};
|
||||
|
||||
|
||||
|
@ -89,17 +89,21 @@ int event_loop(Event * event)
|
|||
{
|
||||
struct timeval * timeout = event->timeout.tv_sec == LONG_MAX
|
||||
&& event->timeout.tv_usec == LONG_MAX ? NULL : &event->timeout;
|
||||
fd_set rfds;
|
||||
fd_set wfds;
|
||||
int ret;
|
||||
|
||||
for(; (ret = select(event->fdmax+1, &event->rfds, &event->wfds, NULL,
|
||||
for(rfds = event->rfds, wfds = event->wfds;
|
||||
(ret = select(event->fdmax+1, &rfds, &wfds, NULL,
|
||||
timeout)) != -1;
|
||||
timeout = event->timeout.tv_sec == LONG_MAX
|
||||
&& event->timeout.tv_usec == LONG_MAX
|
||||
? NULL : &event->timeout)
|
||||
rfds = event->rfds, wfds = event->wfds)
|
||||
{
|
||||
_loop_timeouts(event);
|
||||
_loop_reads(event);
|
||||
_loop_writes(event);
|
||||
timeout = event->timeout.tv_sec == LONG_MAX
|
||||
&& event->timeout.tv_usec == LONG_MAX
|
||||
? NULL : &event->timeout;
|
||||
}
|
||||
if(ret != -1)
|
||||
return 0;
|
||||
|
@ -169,8 +173,9 @@ int event_register_io_read(Event * event, int fd, EventIOFunc func,
|
|||
eventio->fd = fd;
|
||||
eventio->func = func;
|
||||
eventio->data = userdata;
|
||||
array_append(event->reads, eventio);
|
||||
event->fdmax = max(event->fdmax, fd);
|
||||
FD_SET(fd, &event->rfds);
|
||||
array_append(event->reads, eventio);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -186,15 +191,16 @@ int event_register_io_write(Event * event, int fd, EventIOFunc func,
|
|||
eventio->fd = fd;
|
||||
eventio->func = func;
|
||||
eventio->data = userdata;
|
||||
array_append(event->writes, eventio);
|
||||
event->fdmax = max(event->fdmax, fd);
|
||||
FD_SET(fd, &event->wfds);
|
||||
array_append(event->writes, eventio);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* event_register_timeout */
|
||||
int event_register_timeout(Event * event, struct timeval timeout,
|
||||
EventTimeoutFunc * func, void * data)
|
||||
EventTimeoutFunc func, void * data)
|
||||
{
|
||||
EventTimeout * eventtimeout;
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user