diff options
author | Junio C Hamano <gitster@pobox.com> | 2012-09-25 10:40:18 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-09-25 10:40:18 -0700 |
commit | d782797aaf230e375d440d8ca84cd0465edd7ff4 (patch) | |
tree | facd865d1d87ae5ab065718b1cd8859f1d95234a /compat | |
parent | Merge branch 'ep/malloc-check-perturb' (diff) | |
parent | make poll() work on platforms that can't recv() on a non-socket (diff) | |
download | tgif-d782797aaf230e375d440d8ca84cd0465edd7ff4.tar.xz |
Merge branch 'js/poll-emu'
* js/poll-emu:
make poll() work on platforms that can't recv() on a non-socket
poll() exits too early with EFAULT if 1st arg is NULL
fix some win32 specific dependencies in poll.c
make poll available for other platforms lacking it
Diffstat (limited to 'compat')
-rw-r--r-- | compat/poll/poll.c (renamed from compat/win32/poll.c) | 14 | ||||
-rw-r--r-- | compat/poll/poll.h (renamed from compat/win32/poll.h) | 0 |
2 files changed, 11 insertions, 3 deletions
diff --git a/compat/win32/poll.c b/compat/poll/poll.c index 403eaa7a3c..7d226ecb29 100644 --- a/compat/win32/poll.c +++ b/compat/poll/poll.c @@ -24,7 +24,9 @@ # pragma GCC diagnostic ignored "-Wtype-limits" #endif -#include <malloc.h> +#if defined(WIN32) +# include <malloc.h> +#endif #include <sys/types.h> @@ -48,7 +50,9 @@ #else # include <sys/time.h> # include <sys/socket.h> -# include <sys/select.h> +# ifndef NO_SYS_SELECT_H +# include <sys/select.h> +# endif # include <unistd.h> #endif @@ -302,6 +306,10 @@ compute_revents (int fd, int sought, fd_set *rfds, fd_set *wfds, fd_set *efds) || socket_errno == ECONNABORTED || socket_errno == ENETRESET) happened |= POLLHUP; + /* some systems can't use recv() on non-socket, including HP NonStop */ + else if (/* (r == -1) && */ socket_errno == ENOTSOCK) + happened |= (POLLIN | POLLRDNORM) & sought; + else happened |= POLLERR; } @@ -349,7 +357,7 @@ poll (struct pollfd *pfd, nfds_t nfd, int timeout) /* EFAULT is not necessary to implement, but let's do it in the simplest case. */ - if (!pfd) + if (!pfd && nfd) { errno = EFAULT; return -1; diff --git a/compat/win32/poll.h b/compat/poll/poll.h index b7aa59d973..b7aa59d973 100644 --- a/compat/win32/poll.h +++ b/compat/poll/poll.h |