diff options
author | Bruno Haible <bruno@clisp.org> | 2011-04-17 23:36:27 +0200 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2011-04-17 23:36:27 +0200 |
commit | de3622c2af51046d476a9daf6b8f77df0ae20c9f (patch) | |
tree | ab622f16db4af2b3a277a14a40fc4e60557cde9e /lib/pipe2.c | |
parent | e9da144137c07d2ec6f94745a347f771d14d2a10 (diff) | |
download | gnulib-de3622c2af51046d476a9daf6b8f77df0ae20c9f.tar.gz |
pipe2: Simplify code.
* lib/pipe2.c (pipe2): Reduce code duplication.
Diffstat (limited to 'lib/pipe2.c')
-rw-r--r-- | lib/pipe2.c | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/lib/pipe2.c b/lib/pipe2.c index 6ffb101f3d..18098c4b4e 100644 --- a/lib/pipe2.c +++ b/lib/pipe2.c @@ -66,23 +66,17 @@ pipe2 (int fd[2], int flags) #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Native Woe32 API. */ + if (_pipe (fd, 4096, flags & ~O_NONBLOCK) < 0) + return -1; + if (flags & O_NONBLOCK) { - int result = _pipe (fd, 4096, flags & ~O_NONBLOCK); - if (result != 0) - return result; if (set_nonblocking_flag (fd[0], true) != 0 || set_nonblocking_flag (fd[1], true) != 0) - { - int saved_errno = errno; - close (fd[0]); - close (fd[1]); - result = -1; - errno = saved_errno; - } - return result; + goto fail; } - return _pipe (fd, 4096, flags); + + return 0; #else /* Unix API. */ @@ -131,6 +125,8 @@ pipe2 (int fd[2], int flags) return 0; +#endif + fail: { int saved_errno = errno; @@ -139,6 +135,4 @@ pipe2 (int fd[2], int flags) errno = saved_errno; return -1; } - -#endif } |