diff options
author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-12-07 15:47:59 +0000 |
---|---|---|
committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-12-07 15:47:59 +0000 |
commit | c3ce319d7d9ea2bbde36aa65baf6fecebc9f101a (patch) | |
tree | 32ae08c08de692e1bef7fc9a846c965d0774da95 /io.c | |
parent | 6100eced2ed54b75c059e7fac4b69182798cfa75 (diff) | |
download | ruby-c3ce319d7d9ea2bbde36aa65baf6fecebc9f101a.tar.gz |
* io.c (pipe_open): win32 bidirectional pipe support.
* win32/win32.[ch] (rb_w32_pipe_exec): ditto.
* win32/win32.[ch] (socketpair): new function. POSIX socketpair
emulation.
* win32/win32.c (socketpair_internal): ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7493 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 11 |
1 files changed, 5 insertions, 6 deletions
@@ -2805,7 +2805,7 @@ pipe_open(argc, argv, mode) struct popen_arg arg; volatile int doexec; #elif defined(_WIN32) - int r, w; + int fd; int openmode = rb_io_mode_modenum(mode); char *exename = NULL; #endif @@ -2895,7 +2895,7 @@ pipe_open(argc, argv, mode) else { cmd = StringValueCStr(prog); } - while ((pid = rb_w32_pipe_exec(cmd, exename, openmode, &r, &w)) == -1) { + while ((pid = rb_w32_pipe_exec(cmd, exename, openmode, &fd)) == -1) { /* exec failed */ switch (errno) { case EAGAIN: @@ -2910,14 +2910,13 @@ pipe_open(argc, argv, mode) } } if ((modef & FMODE_READABLE) && (modef & FMODE_WRITABLE)) { - close(w); - fp = rb_fdopen(r, "r+"); + fp = rb_fdopen(fd, "r+"); } else if (modef & FMODE_READABLE) { - fp = rb_fdopen(r, "r"); + fp = rb_fdopen(fd, "r"); } else { - fp = rb_fdopen(w, "w"); + fp = rb_fdopen(fd, "w"); } #else prog = rb_ary_join(rb_ary_new4(argc, argv), rb_str_new2(" ")); |