なかだです。

At Tue, 5 Feb 2002 07:56:29 +0000,
cvs-admin / ruby-lang.org (matz) wrote:
>     * io.c (fptr_finalize): should raise error when fclose fails.

SocketはR/W用にそれぞれrb_fdopen()してるので、closeのときに
EBADFになります。書き込み用のf2を先にfclose()したほうがいいよう
に思いますが。

それと、DOSishな環境でコンパイルできなくなってませんか。


Index: io.c =================================================================== RCS file: /cvs/ruby/src/ruby/io.c,v retrieving revision 1.110 diff -u -2 -p -r1.110 io.c --- io.c 2002/02/05 07:56:29 1.110 +++ io.c 2002/02/05 13:26:34 @@ -1076,15 +1076,16 @@ fptr_finalize(fptr, fin) OpenFile *fptr; { - int n1 = 0, n2 = 0, e = 0; + int n1 = 0, n2 = 0, e = 0, f2 = -1; - if (fptr->f) { - n1 = fclose(fptr->f); - if (n1 < 0) e = errno; - } if (fptr->f2) { + f2 = fileno(fptr->f2); n2 = fclose(fptr->f2); + if (n2 < 0) e = errno; + } + if (fptr->f && fptr->f != fptr->f2 && fileno(fptr->f) != f2) { + n1 = fclose(fptr->f); } if (!fin && (n1 < 0 || n2 < 0)) { - if (n2 == 0) errno = e; + if (n1 == 0) errno = e; rb_sys_fail(fptr->path); } @@ -1645,5 +1646,5 @@ pipe_finalize(fptr) rb_last_status = INT2FIX(status); #else - fptr_finalize(fptr); + fptr_finalize(fptr, Qtrue); #endif pipe_del_fptr(fptr);
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦