diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 1997-09-03 14:38:02 +0000 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 1997-09-03 14:38:02 +0000 |
commit | 1e664b94467a65841e63d2dea50cd1f64e8a3258 (patch) | |
tree | 377f874869769eb40984803bcc6b6648a06b68e4 /otherlibs/win32unix/pipe.c | |
parent | 47745356d34649ee4c531fea679e3a008cf90197 (diff) |
Implementation du type file_descr par le type HANDLE de Win32. Court-circuite la libc de MSVC.
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@1700 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
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; } |