From 25a871a5ff313e9743bb655f8457affb7430954f Mon Sep 17 00:00:00 2001 From: Luke Daley Date: Sun, 18 May 2008 08:17:37 +0000 Subject: [PATCH] =?UTF-8?q?=E2=80=A2=20Handle=20select=20being=20called=20?= =?UTF-8?q?with=20NULL=20for=20the=20readfds.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://svn.textmate.org/trunk/Tools/tm_interactive_input@9609 dfb7d73b-c2ec-0310-8fea-fb051d288c6d --- src/system_function_overrides.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/system_function_overrides.c b/src/system_function_overrides.c index 7932525..43c2908 100644 --- a/src/system_function_overrides.c +++ b/src/system_function_overrides.c @@ -101,19 +101,16 @@ int close(int);int close(int fd) { } int select(int nfds, fd_set * __restrict readfds, fd_set * __restrict writefds, fd_set * __restrict errorfds, struct timeval * __restrict timeout) { - - fd_set orig_readfds; - - // FD_COPY should do this for us, but it caused problems when I tried it. - int i; - for (i = 0; i < nfds; ++i) { - if (FD_ISSET(i, readfds)) { - FD_SET(i, &orig_readfds); - } + if (readfds == NULL) { + return syscall(SYS_select, nfds, readfds, writefds, errorfds, timeout); + } else { + fd_set orig_readfds; + FD_ZERO(&orig_readfds); + FD_COPY(readfds, &orig_readfds); + + int fd_count = syscall(SYS_select, nfds, readfds, writefds, errorfds, timeout); + return fd_count + stdin_fd_tracker_inspect_select_readfds(nfds, &orig_readfds, readfds); } - - int fd_count = syscall(SYS_select, nfds, readfds, writefds, errorfds, timeout); - return fd_count + stdin_fd_tracker_inspect_select_readfds(nfds, &orig_readfds, readfds); } int select_darwinextsn(int nfds, fd_set * __restrict readfds, fd_set * __restrict writefds, fd_set * __restrict errorfds, struct timeval * __restrict timeout) {