mirror of /home/gitosis/repositories/libev.git
now port to microsofts goddamn broken pseudo-c-we-do-it-different-to-spite-you so-called c compiler
This commit is contained in:
parent
39e176f539
commit
1b2d925357
68
ev.c
68
ev.c
|
@ -56,9 +56,7 @@
|
|||
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include <stdio.h>
|
||||
|
@ -66,12 +64,17 @@
|
|||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <sys/types.h>
|
||||
#ifndef WIN32
|
||||
# include <sys/wait.h>
|
||||
#endif
|
||||
#include <sys/time.h>
|
||||
#include <time.h>
|
||||
|
||||
#ifndef PERL
|
||||
# include <signal.h>
|
||||
#endif
|
||||
|
||||
#ifndef WIN32
|
||||
# include <unistd.h>
|
||||
# include <sys/time.h>
|
||||
# include <sys/wait.h>
|
||||
#endif
|
||||
/**/
|
||||
|
||||
#ifndef EV_USE_MONOTONIC
|
||||
|
@ -96,7 +99,9 @@
|
|||
|
||||
#ifndef EV_USE_WIN32
|
||||
# ifdef WIN32
|
||||
# define EV_USE_WIN32 1
|
||||
# define EV_USE_WIN32 0 /* it does not exist, use select */
|
||||
# undef EV_USE_SELECT
|
||||
# define EV_USE_SELECT 1
|
||||
# else
|
||||
# define EV_USE_WIN32 0
|
||||
# endif
|
||||
|
@ -296,6 +301,11 @@ ev_now (EV_P)
|
|||
fprintf (stderr, "slimmed down " # stem " to %d\n", stem ## max);/*D*/\
|
||||
}
|
||||
|
||||
/* microsoft's pseudo-c is quite far from C as the rest of the world and the standard knows it */
|
||||
/* bringing us everlasting joy in form of stupid extra macros that are not required in C */
|
||||
#define array_free_microshit(stem) \
|
||||
ev_free (stem ## s); stem ## cnt = stem ## max = 0;
|
||||
|
||||
#define array_free(stem, idx) \
|
||||
ev_free (stem ## s idx); stem ## cnt idx = stem ## max idx = 0;
|
||||
|
||||
|
@ -324,7 +334,7 @@ event (EV_P_ W w, int events)
|
|||
}
|
||||
|
||||
w->pending = ++pendingcnt [ABSPRI (w)];
|
||||
array_needsize (pendings [ABSPRI (w)], pendingmax [ABSPRI (w)], pendingcnt [ABSPRI (w)], );
|
||||
array_needsize (pendings [ABSPRI (w)], pendingmax [ABSPRI (w)], pendingcnt [ABSPRI (w)], (void));
|
||||
pendings [ABSPRI (w)][w->pending - 1].w = w;
|
||||
pendings [ABSPRI (w)][w->pending - 1].events = events;
|
||||
}
|
||||
|
@ -389,7 +399,7 @@ fd_change (EV_P_ int fd)
|
|||
anfds [fd].reify = 1;
|
||||
|
||||
++fdchangecnt;
|
||||
array_needsize (fdchanges, fdchangemax, fdchangecnt, );
|
||||
array_needsize (fdchanges, fdchangemax, fdchangecnt, (void));
|
||||
fdchanges [fdchangecnt - 1] = fd;
|
||||
}
|
||||
|
||||
|
@ -405,6 +415,16 @@ fd_kill (EV_P_ int fd)
|
|||
}
|
||||
}
|
||||
|
||||
static int
|
||||
fd_valid (int fd)
|
||||
{
|
||||
#ifdef WIN32
|
||||
return !!win32_get_osfhandle (fd);
|
||||
#else
|
||||
return fcntl (fd, F_GETFD) != -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* called on EBADF to verify fds */
|
||||
static void
|
||||
fd_ebadf (EV_P)
|
||||
|
@ -413,7 +433,7 @@ fd_ebadf (EV_P)
|
|||
|
||||
for (fd = 0; fd < anfdmax; ++fd)
|
||||
if (anfds [fd].events)
|
||||
if (fcntl (fd, F_GETFD) == -1 && errno == EBADF)
|
||||
if (!fd_valid (fd) == -1 && errno == EBADF)
|
||||
fd_kill (EV_A_ fd);
|
||||
}
|
||||
|
||||
|
@ -572,9 +592,10 @@ siginit (EV_P)
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
static struct ev_child *childs [PID_HASHSIZE];
|
||||
|
||||
#ifndef WIN32
|
||||
|
||||
static struct ev_child *childs [PID_HASHSIZE];
|
||||
static struct ev_signal childev;
|
||||
|
||||
#ifndef WCONTINUED
|
||||
|
@ -728,12 +749,13 @@ loop_destroy (EV_P)
|
|||
for (i = NUMPRI; i--; )
|
||||
array_free (pending, [i]);
|
||||
|
||||
array_free (fdchange, );
|
||||
array_free (timer, );
|
||||
array_free (periodic, );
|
||||
array_free (idle, );
|
||||
array_free (prepare, );
|
||||
array_free (check, );
|
||||
/* have to use the microsoft-never-gets-it-right macro */
|
||||
array_free_microshit (fdchange);
|
||||
array_free_microshit (timer);
|
||||
array_free_microshit (periodic);
|
||||
array_free_microshit (idle);
|
||||
array_free_microshit (prepare);
|
||||
array_free_microshit (check);
|
||||
|
||||
method = 0;
|
||||
}
|
||||
|
@ -848,8 +870,10 @@ ev_default_destroy (void)
|
|||
struct ev_loop *loop = default_loop;
|
||||
#endif
|
||||
|
||||
#ifndef WIN32
|
||||
ev_ref (EV_A); /* child watcher */
|
||||
ev_signal_stop (EV_A_ &childev);
|
||||
#endif
|
||||
|
||||
ev_ref (EV_A); /* signal watcher */
|
||||
ev_io_stop (EV_A_ &sigev);
|
||||
|
@ -1223,7 +1247,7 @@ ev_timer_start (EV_P_ struct ev_timer *w)
|
|||
assert (("ev_timer_start called with negative timer repeat value", w->repeat >= 0.));
|
||||
|
||||
ev_start (EV_A_ (W)w, ++timercnt);
|
||||
array_needsize (timers, timermax, timercnt, );
|
||||
array_needsize (timers, timermax, timercnt, (void));
|
||||
timers [timercnt - 1] = w;
|
||||
upheap ((WT *)timers, timercnt - 1);
|
||||
|
||||
|
@ -1280,7 +1304,7 @@ ev_periodic_start (EV_P_ struct ev_periodic *w)
|
|||
((WT)w)->at += ceil ((rt_now - ((WT)w)->at) / w->interval) * w->interval;
|
||||
|
||||
ev_start (EV_A_ (W)w, ++periodiccnt);
|
||||
array_needsize (periodics, periodicmax, periodiccnt, );
|
||||
array_needsize (periodics, periodicmax, periodiccnt, (void));
|
||||
periodics [periodiccnt - 1] = w;
|
||||
upheap ((WT *)periodics, periodiccnt - 1);
|
||||
|
||||
|
@ -1312,7 +1336,7 @@ ev_idle_start (EV_P_ struct ev_idle *w)
|
|||
return;
|
||||
|
||||
ev_start (EV_A_ (W)w, ++idlecnt);
|
||||
array_needsize (idles, idlemax, idlecnt, );
|
||||
array_needsize (idles, idlemax, idlecnt, (void));
|
||||
idles [idlecnt - 1] = w;
|
||||
}
|
||||
|
||||
|
@ -1334,7 +1358,7 @@ ev_prepare_start (EV_P_ struct ev_prepare *w)
|
|||
return;
|
||||
|
||||
ev_start (EV_A_ (W)w, ++preparecnt);
|
||||
array_needsize (prepares, preparemax, preparecnt, );
|
||||
array_needsize (prepares, preparemax, preparecnt, (void));
|
||||
prepares [preparecnt - 1] = w;
|
||||
}
|
||||
|
||||
|
@ -1356,7 +1380,7 @@ ev_check_start (EV_P_ struct ev_check *w)
|
|||
return;
|
||||
|
||||
ev_start (EV_A_ (W)w, ++checkcnt);
|
||||
array_needsize (checks, checkmax, checkcnt, );
|
||||
array_needsize (checks, checkmax, checkcnt, (void));
|
||||
checks [checkcnt - 1] = w;
|
||||
}
|
||||
|
||||
|
|
2
ev.h
2
ev.h
|
@ -100,7 +100,7 @@ struct ev_loop;
|
|||
int pending; /* private */ \
|
||||
int priority; /* private */ \
|
||||
EV_COMMON; /* rw */ \
|
||||
void (*cb)(EV_P_ struct type *, int revents); /* private */ /* gets invoked with an eventmask */
|
||||
void (*cb)(EV_P_ struct type *, int revents) /* private */ /* gets invoked with an eventmask */
|
||||
|
||||
#define EV_WATCHER_LIST(type) \
|
||||
EV_WATCHER (type); \
|
||||
|
|
11
ev_select.c
11
ev_select.c
|
@ -29,18 +29,15 @@
|
|||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* for broken bsd's */
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/* for unix systems */
|
||||
#ifndef WIN32
|
||||
#ifdef WIN32
|
||||
typedef unsigned int uint32_t;
|
||||
#else
|
||||
# include <sys/select.h>
|
||||
# include <inttypes.h>
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
static void
|
||||
select_modify (EV_P_ int fd, int oev, int nev)
|
||||
|
|
11
event.c
11
event.c
|
@ -31,9 +31,12 @@
|
|||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/time.h>
|
||||
#include <assert.h>
|
||||
|
||||
#ifndef WIN32
|
||||
# include <sys/time.h>
|
||||
#endif
|
||||
|
||||
#include "ev.h"
|
||||
#include "event.h"
|
||||
|
||||
|
@ -240,9 +243,9 @@ int event_del (struct event *ev)
|
|||
|
||||
int event_pending (struct event *ev, short events, struct timeval *tv)
|
||||
{
|
||||
short revents = 0;
|
||||
dLOOPev;
|
||||
|
||||
short revents = 0;
|
||||
|
||||
if (ev->ev_events & EV_SIGNAL)
|
||||
{
|
||||
|
@ -311,8 +314,8 @@ x_loopexit_cb (int revents, void *base)
|
|||
|
||||
int event_base_loopexit (struct event_base *base, struct timeval *tv)
|
||||
{
|
||||
dLOOPbase;
|
||||
ev_tstamp after = tv_get (tv);
|
||||
dLOOPbase;
|
||||
|
||||
ev_once (EV_A_ -1, 0, after >= 0. ? after : 0., x_loopexit_cb, (void *)base);
|
||||
|
||||
|
@ -337,8 +340,8 @@ x_once_cb (int revents, void *arg)
|
|||
|
||||
int event_base_once (struct event_base *base, int fd, short events, void (*cb)(int, short, void *), void *arg, struct timeval *tv)
|
||||
{
|
||||
dLOOPbase;
|
||||
struct x_once *once = malloc (sizeof (struct x_once));
|
||||
dLOOPbase;
|
||||
|
||||
if (!once)
|
||||
return -1;
|
||||
|
|
Loading…
Reference in New Issue