summaryrefslogtreecommitdiff
path: root/jim-eventloop.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2011-06-27 21:34:07 -0700
committerSteve Bennett <steveb@workware.net.au>2011-06-28 16:20:04 +1000
commitdc1e58da45332c2645d39154571835d4fb79c456 (patch)
treee34cd916911b1249ea0838f741272af25841e686 /jim-eventloop.c
parentab51e987cb8a9e9fce6af1eeb3b6309f8c11941f (diff)
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 <steveb@workware.net.au>
Diffstat (limited to 'jim-eventloop.c')
-rw-r--r--jim-eventloop.c61
1 files changed, 30 insertions, 31 deletions
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;