Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2005-04-19 12:32:59 +0400
committerCorinna Vinschen <corinna@vinschen.de>2005-04-19 12:32:59 +0400
commitd02099f2396a189ec56227b554b396178013d0b8 (patch)
tree648b2d1c00a6273096e8bfb2945df1e75a9c71a6 /winsup/cygwin/select.cc
parent3b4ed14c7cabd6362c6a4c923dc2bc4810b450ad (diff)
* cygwin.din (pselect): Export.
* select.cc (pselect): New function. * include/cygwin/version.h: Bump API minor number. * include/sys/select.h: Include signal.h. Declare pselect.
Diffstat (limited to 'winsup/cygwin/select.cc')
-rw-r--r--winsup/cygwin/select.cc28
1 files changed, 28 insertions, 0 deletions
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc
index 2daa88a5f..4abc24985 100644
--- a/winsup/cygwin/select.cc
+++ b/winsup/cygwin/select.cc
@@ -36,6 +36,7 @@ details. */
#include "fhandler.h"
#include "dtable.h"
#include "cygheap.h"
+#include "pinfo.h"
#include "sigproc.h"
#include "tty.h"
#include "ntdll.h"
@@ -158,6 +159,33 @@ cygwin_select (int maxfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
return timeout ? 0 : sel.poll (readfds, writefds, exceptfds);
}
+extern "C" int
+pselect(int maxfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
+ const struct timespec *ts, const sigset_t *set)
+{
+ struct timeval tv;
+ sigset_t oldset = myself->getsigmask ();
+
+ if (ts)
+ {
+ if (check_invalid_read_struct_errno (ts))
+ return -1;
+ tv.tv_sec = ts->tv_sec;
+ tv.tv_usec = ts->tv_nsec / 1000;
+ }
+ if (set)
+ {
+ if (check_invalid_read_struct_errno (set))
+ return -1;
+ set_signal_mask (*set);
+ }
+ int ret = cygwin_select (maxfds, readfds, writefds, exceptfds,
+ ts ? &tv : NULL);
+ if (set)
+ set_signal_mask (oldset);
+ return ret;
+}
+
/* Call cleanup functions for all inspected fds. Gets rid of any
executing threads. */
void