diff options
Diffstat (limited to 'otherlibs/win32unix/pipe.c')
-rw-r--r-- | otherlibs/win32unix/pipe.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/otherlibs/win32unix/pipe.c b/otherlibs/win32unix/pipe.c index d5e17ca54..c782f7afa 100644 --- a/otherlibs/win32unix/pipe.c +++ b/otherlibs/win32unix/pipe.c @@ -17,15 +17,22 @@ #include <fcntl.h> #define SIZEBUF 1024 -#define MODE O_BINARY -value unix_pipe() /* ML */ +value unix_pipe(value unit) /* ML */ { - int fd[2]; - value res; - if (_pipe(fd, SIZEBUF, MODE) == -1) uerror("pipe", Nothing); - res = alloc_tuple(2); - Field(res, 0) = Val_int(fd[0]); - Field(res, 1) = Val_int(fd[1]); + HANDLE readh, writeh; + value readfd = Val_unit, writefd = Val_unit, res; + + if (! CreatePipe(&readh, &writeh, NULL, SIZEBUF)) { + _dosmaperr(GetLastError()); + uerror("pipe", Nothing); + } + Begin_roots2(readfd, writefd) + readfd = win_alloc_handle(readh); + writefd = win_alloc_handle(writeh); + res = alloc_tuple(2); + Field(res, 0) = readfd; + Field(res, 1) = writefd; + End_roots(); return res; } |