summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2011-04-17 23:36:27 +0200
committerBruno Haible <bruno@clisp.org>2011-04-17 23:36:27 +0200
commitde3622c2af51046d476a9daf6b8f77df0ae20c9f (patch)
treeab622f16db4af2b3a277a14a40fc4e60557cde9e /lib
parente9da144137c07d2ec6f94745a347f771d14d2a10 (diff)
downloadgnulib-de3622c2af51046d476a9daf6b8f77df0ae20c9f.tar.gz
pipe2: Simplify code.
* lib/pipe2.c (pipe2): Reduce code duplication.
Diffstat (limited to 'lib')
-rw-r--r--lib/pipe2.c22
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
}