system/FileDescriptor: implement CreatePipe() on Windows

This commit is contained in:
Max Kellermann 2017-08-11 08:15:47 +02:00
parent 5a495cc165
commit 7484bc31b4
2 changed files with 8 additions and 0 deletions

View File

@ -99,6 +99,8 @@ FileDescriptor::OpenNonBlocking(const char *pathname) noexcept
return Open(pathname, O_RDWR | O_NONBLOCK); return Open(pathname, O_RDWR | O_NONBLOCK);
} }
#endif
bool bool
FileDescriptor::CreatePipe(FileDescriptor &r, FileDescriptor &w) noexcept FileDescriptor::CreatePipe(FileDescriptor &r, FileDescriptor &w) noexcept
{ {
@ -107,6 +109,8 @@ FileDescriptor::CreatePipe(FileDescriptor &r, FileDescriptor &w) noexcept
#ifdef HAVE_PIPE2 #ifdef HAVE_PIPE2
const int flags = O_CLOEXEC; const int flags = O_CLOEXEC;
const int result = pipe2(fds, flags); const int result = pipe2(fds, flags);
#elif defined(_WIN32)
const int result = _pipe(fds, 512, _O_BINARY);
#else #else
const int result = pipe(fds); const int result = pipe(fds);
#endif #endif
@ -119,6 +123,8 @@ FileDescriptor::CreatePipe(FileDescriptor &r, FileDescriptor &w) noexcept
return true; return true;
} }
#ifndef _WIN32
void void
FileDescriptor::SetNonBlocking() noexcept FileDescriptor::SetNonBlocking() noexcept
{ {

View File

@ -110,9 +110,11 @@ public:
#ifndef WIN32 #ifndef WIN32
bool OpenNonBlocking(const char *pathname) noexcept; bool OpenNonBlocking(const char *pathname) noexcept;
#endif
static bool CreatePipe(FileDescriptor &r, FileDescriptor &w) noexcept; static bool CreatePipe(FileDescriptor &r, FileDescriptor &w) noexcept;
#ifndef _WIN32
/** /**
* Enable non-blocking mode on this file descriptor. * Enable non-blocking mode on this file descriptor.
*/ */