X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-pipe2.c;h=d83162c2f5868b99260215bfa2041833ff5f5197;hb=977389d936eb39475d8540651074ab48fcfd85a1;hp=e450469bd6bec1ff4f36cebe4162ab26a3c9183e;hpb=d72a58196097ef02dcd3529050b83f92518770c6;p=gnulib.git diff --git a/tests/test-pipe2.c b/tests/test-pipe2.c index e450469bd..d83162c2f 100644 --- a/tests/test-pipe2.c +++ b/tests/test-pipe2.c @@ -1,5 +1,5 @@ /* Test of pipe2. - Copyright (C) 2009 Free Software Foundation, Inc. + Copyright (C) 2009-2011 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,6 +19,9 @@ #include +#include "signature.h" +SIGNATURE_CHECK (pipe2, int, (int[2], int)); + #include #include @@ -29,18 +32,10 @@ #endif #include "binary-io.h" - -#define ASSERT(expr) \ - do \ - { \ - if (!(expr)) \ - { \ - fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ - fflush (stderr); \ - abort (); \ - } \ - } \ - while (0) +#include "macros.h" +#if GNULIB_NONBLOCKING +# include "nonblocking.h" +#endif /* Return true if FD is open. */ static bool @@ -75,19 +70,22 @@ is_cloexec (int fd) #endif } -/* Return true if FD is in non-blocking mode. */ -static bool -is_nonblocking (int fd) +#if ! GNULIB_NONBLOCKING +static int +get_nonblocking_flag (int fd) { -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - /* We don't use the non-blocking mode for sockets here. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ return 0; -#else +# else +# ifndef F_GETFL +# error Please port fcntl to your platform +# endif int flags; ASSERT ((flags = fcntl (fd, F_GETFL)) >= 0); return (flags & O_NONBLOCK) != 0; -#endif +# endif } +#endif int main () @@ -95,58 +93,49 @@ main () int use_nonblocking; int use_cloexec; -#if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) - for (use_nonblocking = 0; use_nonblocking <= 1; use_nonblocking++) -#else - use_nonblocking = 0; -#endif -#if defined O_CLOEXEC - for (use_cloexec = 0; use_cloexec <= 1; use_cloexec++) -#else - use_cloexec = 0; -#endif + for (use_nonblocking = 0; use_nonblocking <= !!O_NONBLOCK; use_nonblocking++) + for (use_cloexec = 0; use_cloexec <= !!O_CLOEXEC; use_cloexec++) { - int o_flags; - int fd[2]; - - o_flags = 0; -#if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) - if (use_nonblocking) - o_flags |= O_NONBLOCK; -#endif -#if defined O_CLOEXEC - if (use_cloexec) - o_flags |= O_CLOEXEC; -#endif - - fd[0] = -1; - fd[1] = -1; - ASSERT (pipe2 (fd, o_flags) >= 0); - ASSERT (fd[0] >= 0); - ASSERT (fd[1] >= 0); - ASSERT (fd[0] != fd[1]); - ASSERT (is_open (fd[0]) >= 0); - ASSERT (is_open (fd[1]) >= 0); - if (use_cloexec) - { - ASSERT (is_cloexec (fd[0])); - ASSERT (is_cloexec (fd[1])); - } - else - { - ASSERT (!is_cloexec (fd[0])); - ASSERT (!is_cloexec (fd[1])); - } - if (use_nonblocking) - { - ASSERT (is_nonblocking (fd[0])); - ASSERT (is_nonblocking (fd[1])); - } - else - { - ASSERT (!is_nonblocking (fd[0])); - ASSERT (!is_nonblocking (fd[1])); - } + int o_flags; + int fd[2]; + + o_flags = 0; + if (use_nonblocking) + o_flags |= O_NONBLOCK; + if (use_cloexec) + o_flags |= O_CLOEXEC; + + fd[0] = -1; + fd[1] = -1; + ASSERT (pipe2 (fd, o_flags) >= 0); + ASSERT (fd[0] >= 0); + ASSERT (fd[1] >= 0); + ASSERT (fd[0] != fd[1]); + ASSERT (is_open (fd[0])); + ASSERT (is_open (fd[1])); + if (use_cloexec) + { + ASSERT (is_cloexec (fd[0])); + ASSERT (is_cloexec (fd[1])); + } + else + { + ASSERT (!is_cloexec (fd[0])); + ASSERT (!is_cloexec (fd[1])); + } + if (use_nonblocking) + { + ASSERT (get_nonblocking_flag (fd[0]) == 1); + ASSERT (get_nonblocking_flag (fd[1]) == 1); + } + else + { + ASSERT (get_nonblocking_flag (fd[0]) == 0); + ASSERT (get_nonblocking_flag (fd[1]) == 0); + } + + ASSERT (close (fd[0]) == 0); + ASSERT (close (fd[1]) == 0); } return 0;