diff options
author | Steve Bennett <steveb@workware.net.au> | 2011-06-27 21:34:07 -0700 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2011-06-28 16:20:04 +1000 |
commit | dc1e58da45332c2645d39154571835d4fb79c456 (patch) | |
tree | e34cd916911b1249ea0838f741272af25841e686 /jim-eventloop.c | |
parent | ab51e987cb8a9e9fce6af1eeb3b6309f8c11941f (diff) | |
download | jimtcl-dc1e58da45332c2645d39154571835d4fb79c456.zip jimtcl-dc1e58da45332c2645d39154571835d4fb79c456.tar.gz jimtcl-dc1e58da45332c2645d39154571835d4fb79c456.tar.bz2 |
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.c | 61 |
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; |