X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fpipe-safer.c;h=e4431b33a47961095d348a20a59535ddb7f20e10;hb=2d90a49d529516f9b56b944af0cb22c71cb1b1bc;hp=646cd5dabb44db0bc345a5aa989146f7c862b842;hpb=8f4714e0c552bfc884ebfaa6317a010bf3101e9d;p=gnulib.git diff --git a/lib/pipe-safer.c b/lib/pipe-safer.c index 646cd5dab..e4431b33a 100644 --- a/lib/pipe-safer.c +++ b/lib/pipe-safer.c @@ -17,9 +17,7 @@ /* Written by Jim Meyering. */ -#ifdef HAVE_CONFIG_H -# include -#endif +#include #include "unistd-safer.h" @@ -33,25 +31,27 @@ int pipe_safer (int fd[2]) { -#if HAVE_FUNC_PIPE - int fail = pipe (fd); - if (fail) - return fail; - - { - int i; - for (i = 0; i < 2; i++) - { - int f = fd_safer (fd[i]); - if (f < 0) - return -1; - fd[i] = f; - } - } - - return 0; -#else /* ! HAVE_FUNC_PIPE */ +#if HAVE_PIPE + if (pipe (fd) == 0) + { + int i; + for (i = 0; i < 2; i++) + { + fd[i] = fd_safer (fd[i]); + if (fd[i] < 0) + { + int e = errno; + close (fd[1 - i]); + errno = e; + return -1; + } + } + + return 0; + } +#else errno = ENOSYS; - return -1; #endif + + return -1; }