summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--modules/pselect-tests12
-rw-r--r--tests/test-pselect.c2
-rw-r--r--tests/test-select.c21
-rw-r--r--tests/test-sys_select-c++.cc6
5 files changed, 46 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index aca62533e3..70b1c51572 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2011-07-05 Paul Eggert <eggert@cs.ucla.edu>
+ test-pselect: new module
+ * modules/pselect-tests, tests/test-pselect.c: New files.
+ * tests/test-select.c, tests/test-sys_select-c++.cc:
+ If TEST_PSELECT is defined, test pselect instead of testing select.
+
* tests/test-sys_select.c (sigset_t): Test for it, too.
Suggested by Bruno Haible.
diff --git a/modules/pselect-tests b/modules/pselect-tests
new file mode 100644
index 0000000000..0a405fcb68
--- /dev/null
+++ b/modules/pselect-tests
@@ -0,0 +1,12 @@
+Files:
+tests/test-pselect.c
+
+Depends-on:
+select-tests
+
+configure.ac:
+
+Makefile.am:
+TESTS += test-pselect
+check_PROGRAMS += test-pselect
+test_pselect_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB)
diff --git a/tests/test-pselect.c b/tests/test-pselect.c
new file mode 100644
index 0000000000..1d80fe09fc
--- /dev/null
+++ b/tests/test-pselect.c
@@ -0,0 +1,2 @@
+#define TEST_PSELECT
+#include "test-select.c"
diff --git a/tests/test-select.c b/tests/test-select.c
index 5c1532015d..9e927f81d6 100644
--- a/tests/test-select.c
+++ b/tests/test-select.c
@@ -21,8 +21,16 @@
#include <sys/select.h>
#include "signature.h"
+
+#ifdef TEST_PSELECT
+SIGNATURE_CHECK (pselect, int,
+ (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
+ struct timespec const *restrict, const sigset_t *restrict));
+#else
SIGNATURE_CHECK (select, int, (int, fd_set *, fd_set *, fd_set *,
struct timeval *));
+#endif
+
/* The following may be macros without underlying functions, so only
check signature if they are not macros. */
#ifndef FD_CLR
@@ -190,7 +198,20 @@ do_select (int fd, int ev, struct timeval *timeout)
FD_SET (fd, &wfds);
if (ev & SEL_EXC)
FD_SET (fd, &xfds);
+#ifdef TEST_PSELECT
+ {
+ struct timespec ts, *pts = NULL;
+ if (timeout)
+ {
+ ts.tv_sec = timeout->tv_sec;
+ ts.tv_nsec = timeout->tv_usec * 1000;
+ pts = &ts;
+ }
+ r = pselect (fd + 1, &rfds, &wfds, &xfds, pts, NULL);
+ }
+#else
r = select (fd + 1, &rfds, &wfds, &xfds, timeout);
+#endif
if (r < 0)
return r;
diff --git a/tests/test-sys_select-c++.cc b/tests/test-sys_select-c++.cc
index 8279d9afa2..311b8f007b 100644
--- a/tests/test-sys_select-c++.cc
+++ b/tests/test-sys_select-c++.cc
@@ -24,6 +24,12 @@
#include "signature.h"
+#if GNULIB_TEST_PSELECT
+SIGNATURE_CHECK (GNULIB_NAMESPACE::pselect, int,
+ (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
+ struct timespec const *restrict, sigset_t const *restrict));
+#endif
+
#if GNULIB_TEST_SELECT
SIGNATURE_CHECK (GNULIB_NAMESPACE::select, int,
(int, fd_set *, fd_set *, fd_set *, struct timeval *));