From: nobu@... Date: 2004-12-11T10:42:14+09:00 Subject: [ruby-dev:25155] Re: 1.8 reopen problem with duplex popen なかだです。 At Sat, 11 Dec 2004 00:30:06 +0900, Tanaka Akira wrote in [ruby-dev:25152]: > > 次のように、1.8 で双方向 popen な IO を reopen するとエラーになること > があります。 こういうのはどうでしょうか。 Index: io.c =================================================================== RCS file: /cvs/ruby/src/ruby/io.c,v retrieving revision 1.246.2.59 diff -u -2 -p -r1.246.2.59 io.c --- io.c 10 Dec 2004 15:13:06 -0000 1.246.2.59 +++ io.c 11 Dec 2004 01:38:04 -0000 @@ -3172,9 +3172,19 @@ io_reopen(io, nfile) } else { + FILE *f2 = fptr->f2; fclose(fptr->f); - fptr->f = NULL; + fptr->f = f2; + fptr->f2 = NULL; + fptr->mode &= ~FMODE_READABLE; if (dup2(fd2, fd) < 0) rb_sys_fail(orig->path); - fptr->f = rb_fdopen(fd, mode); + if (f2) { + fptr->f = rb_fdopen(fd, "r"); + fptr->f2 = f2; + fptr->mode |= FMODE_READABLE; + } + else { + fptr->f = rb_fdopen(fd, mode); + } } rb_thread_fd_close(fd); -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦