diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2006-08-11 20:28:42 +0000 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2006-08-11 20:28:42 +0000 |
commit | 3244e9a493531c24b414b6e64d3396f466e357aa (patch) | |
tree | 28ebc3196a3f628f74fce25f50a27a637eda0e26 /lib/pipe-safer.c | |
parent | 80886a8db3955316c7af3b47306c97e48a187078 (diff) | |
download | coreutils-3244e9a493531c24b414b6e64d3396f466e357aa.tar.xz |
* pipe-safer.c (pipe_safer): Fix misspelling: HAVE_FUNC_PIPE ->
HAVE_PIPE. Fix a file descriptor leak when fd_safer fails.
Diffstat (limited to 'lib/pipe-safer.c')
-rw-r--r-- | lib/pipe-safer.c | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/lib/pipe-safer.c b/lib/pipe-safer.c index 646cd5dab..81df99454 100644 --- a/lib/pipe-safer.c +++ b/lib/pipe-safer.c @@ -33,25 +33,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; } |