From ef5856c0c4c6302b6cac9c7cefb4e6cbdcf127be Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 11 Jun 2013 00:10:21 -0700 Subject: [PATCH] tests: port large-fd POSIX spawn tests to OS X Problem reported by Daiki Ueno in . * tests/test-posix_spawn_file_actions_addclose.c: * tests/test-posix_spawn_file_actions_adddup2.c: * tests/test-posix_spawn_file_actions_addopen.c: Include , for OPEN_MAX, if available. (big_fd): New static function. (main): Use it. --- ChangeLog | 12 ++++++++++++ tests/test-posix_spawn_file_actions_addclose.c | 19 +++++++++++++++++-- tests/test-posix_spawn_file_actions_adddup2.c | 17 ++++++++++++++++- tests/test-posix_spawn_file_actions_addopen.c | 18 +++++++++++++++++- 4 files changed, 62 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2c2ac445f..aeb1bc53e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2013-06-11 Paul Eggert + + tests: port large-fd POSIX spawn tests to OS X + Problem reported by Daiki Ueno in + . + * tests/test-posix_spawn_file_actions_addclose.c: + * tests/test-posix_spawn_file_actions_adddup2.c: + * tests/test-posix_spawn_file_actions_addopen.c: + Include , for OPEN_MAX, if available. + (big_fd): New static function. + (main): Use it. + 2013-06-04 Bernhard Voelker tests/nap.h: use an adaptive delay to avoid ctime update issues diff --git a/tests/test-posix_spawn_file_actions_addclose.c b/tests/test-posix_spawn_file_actions_addclose.c index 47b12d0f2..296f10132 100644 --- a/tests/test-posix_spawn_file_actions_addclose.c +++ b/tests/test-posix_spawn_file_actions_addclose.c @@ -23,10 +23,25 @@ SIGNATURE_CHECK (posix_spawn_file_actions_addclose, int, (posix_spawn_file_actions_t *, int)); #include +#include #include #include "macros.h" +/* Return a file descriptor that is too big to use. + Prefer the smallest such fd, except use OPEN_MAX if it is defined + and is greater than getdtablesize (), as that's how OS X works. */ +static int +big_fd (void) +{ + int fd = getdtablesize (); +#ifdef OPEN_MAX + if (fd < OPEN_MAX) + fd = OPEN_MAX; +#endif + return fd; +} + int main (void) { @@ -40,9 +55,9 @@ main (void) ASSERT (posix_spawn_file_actions_addclose (&actions, -1) == EBADF); } { + int bad_fd = big_fd (); errno = 0; - ASSERT (posix_spawn_file_actions_addclose (&actions, getdtablesize ()) - == EBADF); + ASSERT (posix_spawn_file_actions_addclose (&actions, bad_fd) == EBADF); } return 0; diff --git a/tests/test-posix_spawn_file_actions_adddup2.c b/tests/test-posix_spawn_file_actions_adddup2.c index d728eff61..fe33c0258 100644 --- a/tests/test-posix_spawn_file_actions_adddup2.c +++ b/tests/test-posix_spawn_file_actions_adddup2.c @@ -23,14 +23,29 @@ SIGNATURE_CHECK (posix_spawn_file_actions_adddup2, int, (posix_spawn_file_actions_t *, int, int)); #include +#include #include #include "macros.h" +/* Return a file descriptor that is too big to use. + Prefer the smallest such fd, except use OPEN_MAX if it is defined + and is greater than getdtablesize (), as that's how OS X works. */ +static int +big_fd (void) +{ + int fd = getdtablesize (); +#ifdef OPEN_MAX + if (fd < OPEN_MAX) + fd = OPEN_MAX; +#endif + return fd; +} + int main (void) { - int bad_fd = getdtablesize (); + int bad_fd = big_fd (); posix_spawn_file_actions_t actions; ASSERT (posix_spawn_file_actions_init (&actions) == 0); diff --git a/tests/test-posix_spawn_file_actions_addopen.c b/tests/test-posix_spawn_file_actions_addopen.c index c2329d4fc..a4865ca97 100644 --- a/tests/test-posix_spawn_file_actions_addopen.c +++ b/tests/test-posix_spawn_file_actions_addopen.c @@ -25,10 +25,25 @@ SIGNATURE_CHECK (posix_spawn_file_actions_addopen, int, #include #include +#include #include #include "macros.h" +/* Return a file descriptor that is too big to use. + Prefer the smallest such fd, except use OPEN_MAX if it is defined + and is greater than getdtablesize (), as that's how OS X works. */ +static int +big_fd (void) +{ + int fd = getdtablesize (); +#ifdef OPEN_MAX + if (fd < OPEN_MAX) + fd = OPEN_MAX; +#endif + return fd; +} + int main (void) { @@ -44,8 +59,9 @@ main (void) == EBADF); } { + int bad_fd = big_fd (); errno = 0; - ASSERT (posix_spawn_file_actions_addopen (&actions, getdtablesize (), + ASSERT (posix_spawn_file_actions_addopen (&actions, bad_fd, "foo", 0, O_RDONLY) == EBADF); } -- 2.11.0