From: nobu.nakada@... Date: 2002-02-05T22:27:48+09:00 Subject: [ruby-dev:15855] Re: [ruby-cvs] ruby: * io.c (fptr_finalize): should raise error when fclose fails. なかだです。 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はできる。 中田 伸悦