summaryrefslogtreecommitdiff
path: root/compat
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2012-09-25 10:40:18 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2012-09-25 10:40:18 -0700
commitd782797aaf230e375d440d8ca84cd0465edd7ff4 (patch)
treefacd865d1d87ae5ab065718b1cd8859f1d95234a /compat
parentMerge branch 'ep/malloc-check-perturb' (diff)
parentmake poll() work on platforms that can't recv() on a non-socket (diff)
downloadtgif-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