pipe2: Simplify code.
authorBruno Haible <bruno@clisp.org>
Sun, 17 Apr 2011 21:36:27 +0000 (23:36 +0200)
committerBruno Haible <bruno@clisp.org>
Sun, 17 Apr 2011 21:36:27 +0000 (23:36 +0200)
* lib/pipe2.c (pipe2): Reduce code duplication.

ChangeLog
lib/pipe2.c

index 1f09ff8..c5e07aa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2011-04-17  Bruno Haible  <bruno@clisp.org>
 
+       pipe2: Simplify code.
+       * lib/pipe2.c (pipe2): Reduce code duplication.
+
+2011-04-17  Bruno Haible  <bruno@clisp.org>
+
        nonblocking: Add comment.
        * lib/fcntl.in.h (O_NONBLOCK): Add comment.
 
index 6ffb101..18098c4 100644 (file)
@@ -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
 }