X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fpipe-safer.c;h=f2e0ad6fb059b280eaac2a96acb190fdfb32e080;hb=bbfcd2f1a92c9bdbb8d7d7d0a8a8c6665c316747;hp=646cd5dabb44db0bc345a5aa989146f7c862b842;hpb=8f4714e0c552bfc884ebfaa6317a010bf3101e9d;p=gnulib.git diff --git a/lib/pipe-safer.c b/lib/pipe-safer.c index 646cd5dab..f2e0ad6fb 100644 --- a/lib/pipe-safer.c +++ b/lib/pipe-safer.c @@ -1,10 +1,10 @@ /* Invoke pipe, but avoid some glitches. - Copyright (C) 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 2005-2006, 2009-2013 Free Software Foundation, Inc. - This program is free software; you can redistribute it and/or modify + 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 - the Free Software Foundation; either version 2, or (at your option) - any later version. + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -12,14 +12,11 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ /* Written by Jim Meyering. */ -#ifdef HAVE_CONFIG_H -# include -#endif +#include #include "unistd-safer.h" @@ -33,25 +30,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; }