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
maint
Junio C Hamano 2012-09-25 10:40:18 -07:00
commit d782797aaf
3 changed files with 26 additions and 8 deletions

View File

@ -154,6 +154,11 @@ all::
# #
# Define NO_MMAP if you want to avoid mmap. # Define NO_MMAP if you want to avoid mmap.
# #
# Define NO_SYS_POLL_H if you don't have sys/poll.h.
#
# Define NO_POLL if you do not have or don't want to use poll().
# This also implies NO_SYS_POLL_H.
#
# Define NO_PTHREADS if you do not have or do not want to use Pthreads. # Define NO_PTHREADS if you do not have or do not want to use Pthreads.
# #
# Define NO_PREAD if you have a problem with pread() system call (e.g. # Define NO_PREAD if you have a problem with pread() system call (e.g.
@ -604,10 +609,10 @@ LIB_H += compat/bswap.h
LIB_H += compat/cygwin.h LIB_H += compat/cygwin.h
LIB_H += compat/mingw.h LIB_H += compat/mingw.h
LIB_H += compat/obstack.h LIB_H += compat/obstack.h
LIB_H += compat/poll/poll.h
LIB_H += compat/precompose_utf8.h LIB_H += compat/precompose_utf8.h
LIB_H += compat/terminal.h LIB_H += compat/terminal.h
LIB_H += compat/win32/dirent.h LIB_H += compat/win32/dirent.h
LIB_H += compat/win32/poll.h
LIB_H += compat/win32/pthread.h LIB_H += compat/win32/pthread.h
LIB_H += compat/win32/syslog.h LIB_H += compat/win32/syslog.h
LIB_H += connected.h LIB_H += connected.h
@ -1225,7 +1230,7 @@ ifeq ($(uname_S),Windows)
NO_PREAD = YesPlease NO_PREAD = YesPlease
NEEDS_CRYPTO_WITH_SSL = YesPlease NEEDS_CRYPTO_WITH_SSL = YesPlease
NO_LIBGEN_H = YesPlease NO_LIBGEN_H = YesPlease
NO_SYS_POLL_H = YesPlease NO_POLL = YesPlease
NO_SYMLINK_HEAD = YesPlease NO_SYMLINK_HEAD = YesPlease
NO_IPV6 = YesPlease NO_IPV6 = YesPlease
NO_UNIX_SOCKETS = YesPlease NO_UNIX_SOCKETS = YesPlease
@ -1266,7 +1271,7 @@ ifeq ($(uname_S),Windows)
BASIC_CFLAGS = -nologo -I. -I../zlib -Icompat/vcbuild -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE BASIC_CFLAGS = -nologo -I. -I../zlib -Icompat/vcbuild -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE
COMPAT_OBJS = compat/msvc.o compat/winansi.o \ COMPAT_OBJS = compat/msvc.o compat/winansi.o \
compat/win32/pthread.o compat/win32/syslog.o \ compat/win32/pthread.o compat/win32/syslog.o \
compat/win32/poll.o compat/win32/dirent.o compat/win32/dirent.o
COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DNOGDI -DHAVE_STRING_H -DHAVE_ALLOCA_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\" COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DNOGDI -DHAVE_STRING_H -DHAVE_ALLOCA_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -SUBSYSTEM:CONSOLE -NODEFAULTLIB:MSVCRT.lib BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -SUBSYSTEM:CONSOLE -NODEFAULTLIB:MSVCRT.lib
EXTLIBS = user32.lib advapi32.lib shell32.lib wininet.lib ws2_32.lib EXTLIBS = user32.lib advapi32.lib shell32.lib wininet.lib ws2_32.lib
@ -1321,7 +1326,7 @@ ifneq (,$(findstring MINGW,$(uname_S)))
NO_PREAD = YesPlease NO_PREAD = YesPlease
NEEDS_CRYPTO_WITH_SSL = YesPlease NEEDS_CRYPTO_WITH_SSL = YesPlease
NO_LIBGEN_H = YesPlease NO_LIBGEN_H = YesPlease
NO_SYS_POLL_H = YesPlease NO_POLL = YesPlease
NO_SYMLINK_HEAD = YesPlease NO_SYMLINK_HEAD = YesPlease
NO_UNIX_SOCKETS = YesPlease NO_UNIX_SOCKETS = YesPlease
NO_SETENV = YesPlease NO_SETENV = YesPlease
@ -1356,7 +1361,7 @@ ifneq (,$(findstring MINGW,$(uname_S)))
COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\" COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
COMPAT_OBJS += compat/mingw.o compat/winansi.o \ COMPAT_OBJS += compat/mingw.o compat/winansi.o \
compat/win32/pthread.o compat/win32/syslog.o \ compat/win32/pthread.o compat/win32/syslog.o \
compat/win32/poll.o compat/win32/dirent.o compat/win32/dirent.o
EXTLIBS += -lws2_32 EXTLIBS += -lws2_32
PTHREAD_LIBS = PTHREAD_LIBS =
X = .exe X = .exe
@ -1610,6 +1615,11 @@ ifdef NO_GETTEXT
BASIC_CFLAGS += -DNO_GETTEXT BASIC_CFLAGS += -DNO_GETTEXT
USE_GETTEXT_SCHEME ?= fallthrough USE_GETTEXT_SCHEME ?= fallthrough
endif endif
ifdef NO_POLL
NO_SYS_POLL_H = YesPlease
COMPAT_CFLAGS += -DNO_POLL -Icompat/poll
COMPAT_OBJS += compat/poll/poll.o
endif
ifdef NO_STRCASESTR ifdef NO_STRCASESTR
COMPAT_CFLAGS += -DNO_STRCASESTR COMPAT_CFLAGS += -DNO_STRCASESTR
COMPAT_OBJS += compat/strcasestr.o COMPAT_OBJS += compat/strcasestr.o

View File

@ -24,7 +24,9 @@
# pragma GCC diagnostic ignored "-Wtype-limits" # pragma GCC diagnostic ignored "-Wtype-limits"
#endif #endif


#include <malloc.h> #if defined(WIN32)
# include <malloc.h>
#endif


#include <sys/types.h> #include <sys/types.h>


@ -48,7 +50,9 @@
#else #else
# include <sys/time.h> # include <sys/time.h>
# include <sys/socket.h> # include <sys/socket.h>
# include <sys/select.h> # ifndef NO_SYS_SELECT_H
# include <sys/select.h>
# endif
# include <unistd.h> # include <unistd.h>
#endif #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) || socket_errno == ECONNABORTED || socket_errno == ENETRESET)
happened |= POLLHUP; 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 else
happened |= POLLERR; 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 /* EFAULT is not necessary to implement, but let's do it in the
simplest case. */ simplest case. */
if (!pfd) if (!pfd && nfd)
{ {
errno = EFAULT; errno = EFAULT;
return -1; return -1;