test-pselect: new module
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 5 Jul 2011 21:46:08 +0000 (14:46 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Wed, 6 Jul 2011 07:44:19 +0000 (00:44 -0700)
* 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.

ChangeLog
modules/pselect-tests [new file with mode: 0644]
tests/test-pselect.c [new file with mode: 0644]
tests/test-select.c
tests/test-sys_select-c++.cc

index aca6253..70b1c51 100644 (file)
--- 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 (file)
index 0000000..0a405fc
--- /dev/null
@@ -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 (file)
index 0000000..1d80fe0
--- /dev/null
@@ -0,0 +1,2 @@
+#define TEST_PSELECT
+#include "test-select.c"
index 5c15320..9e927f8 100644 (file)
 #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;
 
index 8279d9a..311b8f0 100644 (file)
 #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 *));