From: nobu@... Date: 2004-12-26T15:04:13+09:00 Subject: [ruby-dev:25333] Re: test_readline.rb blocks on BSD again なかだです。 At Sun, 26 Dec 2004 14:48:02 +0900, Tanaka Akira wrote in [ruby-dev:25332]: > んーと、こっちは freopen が責任を持って FILE 内のモードを変えてくれる > と思うので、モードが食い違うことは起きないと思うんですよね。それなのに > 禁止するのはなぜでしょう? なるほど、いわれてみれば確かにその通り。 > あと、ついでに尋ねますが、1.9 の io.c の io_reopen で、なんで CYGWIN > だけは stdin とかを fclose するのを許しているんでしょう? このifdefは1.321で追加されたものなので、わたなべさんに聞かない と。しばらく留守にしていてMLもほとんど読めなかった時期ですし。 Index: io.c =================================================================== RCS file: /cvs/ruby/src/ruby/io.c,v retrieving revision 1.320 retrieving revision 1.322 diff -u -2 -p -r1.320 -r1.322 --- io.c 19 Nov 2004 16:59:11 -0000 1.320 +++ io.c 20 Nov 2004 12:18:16 -0000 1.322 @@ -3284,4 +3284,5 @@ io_reopen(io, nfile) fd2 = fileno(orig->f); if (fd != fd2) { +#if !defined __CYGWIN__ if (fptr->f == stdin || fptr->f == stdout || fptr->f == stderr) { clearerr(fptr->f); @@ -3291,9 +3292,12 @@ io_reopen(io, nfile) } else { +#endif fclose(fptr->f); if (dup2(fd2, fd) < 0) rb_sys_fail(orig->path); fptr->f = rb_fdopen(fd, mode); +#if !defined __CYGWIN__ } +#endif rb_thread_fd_close(fd); if ((orig->mode & FMODE_READABLE) && pos >= 0) { -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦