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
This commit is contained in:
commit
d782797aaf
20
Makefile
20
Makefile
@ -154,6 +154,11 @@ all::
|
||||
#
|
||||
# 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_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/mingw.h
|
||||
LIB_H += compat/obstack.h
|
||||
LIB_H += compat/poll/poll.h
|
||||
LIB_H += compat/precompose_utf8.h
|
||||
LIB_H += compat/terminal.h
|
||||
LIB_H += compat/win32/dirent.h
|
||||
LIB_H += compat/win32/poll.h
|
||||
LIB_H += compat/win32/pthread.h
|
||||
LIB_H += compat/win32/syslog.h
|
||||
LIB_H += connected.h
|
||||
@ -1225,7 +1230,7 @@ ifeq ($(uname_S),Windows)
|
||||
NO_PREAD = YesPlease
|
||||
NEEDS_CRYPTO_WITH_SSL = YesPlease
|
||||
NO_LIBGEN_H = YesPlease
|
||||
NO_SYS_POLL_H = YesPlease
|
||||
NO_POLL = YesPlease
|
||||
NO_SYMLINK_HEAD = YesPlease
|
||||
NO_IPV6 = 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
|
||||
COMPAT_OBJS = compat/msvc.o compat/winansi.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\"
|
||||
BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -SUBSYSTEM:CONSOLE -NODEFAULTLIB:MSVCRT.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
|
||||
NEEDS_CRYPTO_WITH_SSL = YesPlease
|
||||
NO_LIBGEN_H = YesPlease
|
||||
NO_SYS_POLL_H = YesPlease
|
||||
NO_POLL = YesPlease
|
||||
NO_SYMLINK_HEAD = YesPlease
|
||||
NO_UNIX_SOCKETS = YesPlease
|
||||
NO_SETENV = YesPlease
|
||||
@ -1356,7 +1361,7 @@ ifneq (,$(findstring MINGW,$(uname_S)))
|
||||
COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
|
||||
COMPAT_OBJS += compat/mingw.o compat/winansi.o \
|
||||
compat/win32/pthread.o compat/win32/syslog.o \
|
||||
compat/win32/poll.o compat/win32/dirent.o
|
||||
compat/win32/dirent.o
|
||||
EXTLIBS += -lws2_32
|
||||
PTHREAD_LIBS =
|
||||
X = .exe
|
||||
@ -1610,6 +1615,11 @@ ifdef NO_GETTEXT
|
||||
BASIC_CFLAGS += -DNO_GETTEXT
|
||||
USE_GETTEXT_SCHEME ?= fallthrough
|
||||
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
|
||||
COMPAT_CFLAGS += -DNO_STRCASESTR
|
||||
COMPAT_OBJS += compat/strcasestr.o
|
||||
|
@ -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;
|
Loading…
Reference in New Issue
Block a user