From: corinna Date: Mon, 18 Apr 2011 12:00:02 +0000 (+0000) Subject: * cygwin.din (ppoll): Export. X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=67cc3103894fb6b064c438d86157dd1f459114a9;p=pf3gnuchains%2Fpf3gnuchains4x.git * cygwin.din (ppoll): Export. * poll.cc (ppoll): Implement. * posix.sgml (std-gnu): Add ppoll. * include/cygwin/version.h: Bump API minor number. * include/sys/poll.h (ppoll): Declare. --- diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 83d332020f..1bb3d0ffde 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,5 +1,13 @@ 2011-04-18 Corinna Vinschen + * cygwin.din (ppoll): Export. + * poll.cc (ppoll): Implement. + * posix.sgml (std-gnu): Add ppoll. + * include/cygwin/version.h: Bump API minor number. + * include/sys/poll.h (ppoll): Declare. + +2011-04-18 Corinna Vinschen + * fhandler_socket.cc (fhandler_socket::evaluate_events): Handle the FD_CLOSE event specially when called from accept. Explain why. (fhandler_socket::shutdown): Fake success on not-connected socket and diff --git a/winsup/cygwin/cygwin.din b/winsup/cygwin/cygwin.din index d5edb20529..823776d602 100644 --- a/winsup/cygwin/cygwin.din +++ b/winsup/cygwin/cygwin.din @@ -1160,6 +1160,7 @@ pow10 NOSIGFE pow10f NOSIGFE powf NOSIGFE _powf = powf NOSIGFE +ppoll SIGFE pread SIGFE printf SIGFE program_invocation_name DATA diff --git a/winsup/cygwin/include/cygwin/version.h b/winsup/cygwin/include/cygwin/version.h index 072f62dcd7..95e5876daf 100644 --- a/winsup/cygwin/include/cygwin/version.h +++ b/winsup/cygwin/include/cygwin/version.h @@ -404,12 +404,13 @@ details. */ 238: Export pthread_spin_destroy, pthread_spin_init, pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock. 239: Export pthread_setschedprio. + 240: Export ppoll. */ /* Note that we forgot to bump the api for ualarm, strtoll, strtoull */ #define CYGWIN_VERSION_API_MAJOR 0 -#define CYGWIN_VERSION_API_MINOR 239 +#define CYGWIN_VERSION_API_MINOR 240 /* There is also a compatibity version number associated with the shared memory regions. It is incremented when incompatible diff --git a/winsup/cygwin/include/sys/poll.h b/winsup/cygwin/include/sys/poll.h index 7fd1c6eb05..a9d228b634 100644 --- a/winsup/cygwin/include/sys/poll.h +++ b/winsup/cygwin/include/sys/poll.h @@ -1,6 +1,6 @@ /* sys/poll.h - Copyright 2000, 2001, 2006 Red Hat, Inc. + Copyright 2000, 2001, 2006, 2011 Red Hat, Inc. This file is part of Cygwin. @@ -12,6 +12,7 @@ #define _SYS_POLL_H #include +#include __BEGIN_DECLS @@ -39,6 +40,9 @@ struct pollfd { typedef unsigned int nfds_t; extern int poll __P ((struct pollfd *fds, nfds_t nfds, int timeout)); +extern int ppoll __P ((struct pollfd *fds, nfds_t nfds, + const struct timespec *timeout_ts, + const sigset_t *sigmask)); __END_DECLS diff --git a/winsup/cygwin/poll.cc b/winsup/cygwin/poll.cc index 2e68f3249d..3c342adfd5 100644 --- a/winsup/cygwin/poll.cc +++ b/winsup/cygwin/poll.cc @@ -21,6 +21,8 @@ #include "fhandler.h" #include "dtable.h" #include "cygheap.h" +#include "pinfo.h" +#include "sigproc.h" extern "C" int poll (struct pollfd *fds, nfds_t nfds, int timeout) @@ -124,3 +126,24 @@ poll (struct pollfd *fds, nfds_t nfds, int timeout) return ret; } + +extern "C" int +ppoll (struct pollfd *fds, nfds_t nfds, const struct timespec *timeout_ts, + const sigset_t *sigmask) +{ + int timeout; + sigset_t oldset = _my_tls.sigmask; + + myfault efault; + if (efault.faulted (EFAULT)) + return -1; + timeout = (timeout_ts == NULL) + ? -1 + : (timeout_ts->tv_sec * 1000 + timeout_ts->tv_nsec / 1000000); + if (sigmask) + set_signal_mask (*sigmask, _my_tls.sigmask); + int ret = poll (fds, nfds, timeout); + if (sigmask) + set_signal_mask (oldset, _my_tls.sigmask); + return ret; +} diff --git a/winsup/cygwin/posix.sgml b/winsup/cygwin/posix.sgml index d44f2bfd59..47cbcab6f9 100644 --- a/winsup/cygwin/posix.sgml +++ b/winsup/cygwin/posix.sgml @@ -1116,6 +1116,7 @@ also IEEE Std 1003.1-2008 (POSIX.1-2008). pipe2 pow10 pow10f + ppoll removexattr setxattr strchrnul