projects
/
gnulib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
strerror_r: Fix test failure on mingw.
[gnulib.git]
/
lib
/
pipe2.c
diff --git
a/lib/pipe2.c
b/lib/pipe2.c
index
4fa014f
..
18098c4
100644
(file)
--- a/
lib/pipe2.c
+++ b/
lib/pipe2.c
@@
-24,6
+24,7
@@
#include <fcntl.h>
#include "binary-io.h"
#include <fcntl.h>
#include "binary-io.h"
+#include "nonblocking.h"
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
/* Native Woe32 API. */
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
/* Native Woe32 API. */
@@
-55,34
+56,37
@@
pipe2 (int fd[2], int flags)
}
#endif
}
#endif
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-/* Native Woe32 API. */
-
/* Check the supported flags. */
/* Check the supported flags. */
- if ((flags & ~(O_CLOEXEC | O_BINARY | O_TEXT)) != 0)
+ if ((flags & ~(O_CLOEXEC | O_
NONBLOCK | O_
BINARY | O_TEXT)) != 0)
{
errno = EINVAL;
return -1;
}
{
errno = EINVAL;
return -1;
}
- return _pipe (fd, 4096, flags);
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+/* Native Woe32 API. */
-#else
-/* Unix API. */
+ if (_pipe (fd, 4096, flags & ~O_NONBLOCK) < 0)
+ return -1;
- /* Check the supported flags. */
- if ((flags & ~(O_CLOEXEC | O_NONBLOCK | O_TEXT | O_BINARY)) != 0)
+ if (flags & O_NONBLOCK)
{
{
- errno = EINVAL;
- return -1;
+ if (set_nonblocking_flag (fd[0], true) != 0
+ || set_nonblocking_flag (fd[1], true) != 0)
+ goto fail;
}
}
+ return 0;
+
+#else
+/* Unix API. */
+
if (pipe (fd) < 0)
return -1;
/* POSIX <http://www.opengroup.org/onlinepubs/9699919799/functions/pipe.html>
says that initially, the O_NONBLOCK and FD_CLOEXEC flags are cleared on
if (pipe (fd) < 0)
return -1;
/* POSIX <http://www.opengroup.org/onlinepubs/9699919799/functions/pipe.html>
says that initially, the O_NONBLOCK and FD_CLOEXEC flags are cleared on
- both fd[0] a
m
d fd[1]. */
+ both fd[0] a
n
d fd[1]. */
if (flags & O_NONBLOCK)
{
if (flags & O_NONBLOCK)
{
@@
-121,6
+125,8
@@
pipe2 (int fd[2], int flags)
return 0;
return 0;
+#endif
+
fail:
{
int saved_errno = errno;
fail:
{
int saved_errno = errno;
@@
-129,6
+135,4
@@
pipe2 (int fd[2], int flags)
errno = saved_errno;
return -1;
}
errno = saved_errno;
return -1;
}
-
-#endif
}
}