From dc1e58da45332c2645d39154571835d4fb79c456 Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Mon, 27 Jun 2011 21:34:07 -0700 Subject: Fix support for 64-bit mingw - Check for mkdir with one arg at configure time - mingw can't really do select(), so support only time events in eventloop - Declare dlerror() to be compatible with mingw Signed-off-by: Steve Bennett --- jim-eventloop.c | 61 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 30 insertions(+), 31 deletions(-) (limited to 'jim-eventloop.c') diff --git a/jim-eventloop.c b/jim-eventloop.c index ce932a4..fd0336e 100644 --- a/jim-eventloop.c +++ b/jim-eventloop.c @@ -344,8 +344,7 @@ jim_wide Jim_DeleteTimeHandler(Jim_Interp *interp, jim_wide id) int Jim_ProcessEvents(Jim_Interp *interp, int flags) { jim_wide sleep_ms = -1; - int maxfd = -1, numfd = 0, processed = 0; - fd_set rfds, wfds, efds; + int processed = 0; Jim_EventLoop *eventLoop = Jim_GetAssocData(interp, "eventloop"); Jim_FileEvent *fe = eventLoop->fileEventHead; Jim_TimeEvent *te; @@ -359,28 +358,6 @@ int Jim_ProcessEvents(Jim_Interp *interp, int flags) } } - if (flags & JIM_FILE_EVENTS) { - FD_ZERO(&rfds); - FD_ZERO(&wfds); - FD_ZERO(&efds); - - /* Check file events */ - while (fe != NULL) { - int fd = fileno(fe->handle); - - if (fe->mask & JIM_EVENT_READABLE) - FD_SET(fd, &rfds); - if (fe->mask & JIM_EVENT_WRITABLE) - FD_SET(fd, &wfds); - if (fe->mask & JIM_EVENT_EXCEPTION) - FD_SET(fd, &efds); - if (maxfd < fd) - maxfd = fd; - numfd++; - fe = fe->next; - } - } - /* Note that we want call select() even if there are no * file events to process as long as we want to process time * events, in order to sleep until the next time event is ready @@ -410,15 +387,32 @@ int Jim_ProcessEvents(Jim_Interp *interp, int flags) } } - if (numfd == 0) { - /* Some systems (mingw) can't select() in this case, so convert to a simple sleep */ - if (sleep_ms > 0) { - msleep(sleep_ms); - } - } - else { +#ifdef HAVE_SELECT + if (flags & JIM_FILE_EVENTS) { int retval; struct timeval tv, *tvp = NULL; + fd_set rfds, wfds, efds; + int maxfd = -1; + + FD_ZERO(&rfds); + FD_ZERO(&wfds); + FD_ZERO(&efds); + + /* Check file events */ + while (fe != NULL) { + int fd = fileno(fe->handle); + + if (fe->mask & JIM_EVENT_READABLE) + FD_SET(fd, &rfds); + if (fe->mask & JIM_EVENT_WRITABLE) + FD_SET(fd, &wfds); + if (fe->mask & JIM_EVENT_EXCEPTION) + FD_SET(fd, &efds); + if (maxfd < fd) + maxfd = fd; + fe = fe->next; + } + if (sleep_ms >= 0) { tvp = &tv; tvp->tv_sec = sleep_ms / 1000; @@ -474,6 +468,11 @@ int Jim_ProcessEvents(Jim_Interp *interp, int flags) } } } +#else + if (sleep_ms > 0) { + msleep(sleep_ms); + } +#endif /* Check time events */ te = eventLoop->timeEventHead; -- cgit v1.2.3