In message <20050908.120716.71112483.taca / back-street.net> on Thu, 8 Sep 2005 12:07:19 +0900, Takahiro Kambe <taca / back-street.net> wrote: > P.S. > 以下のようなパッチもいただいたのですが、この変更が正しいかどうか私には > わかりませんでした。 > > + > +--- ext/dl/dl.c.orig 2005-08-17 17:14:22.000000000 +0000 > ++++ ext/dl/dl.c > +@@ -543,7 +543,11 @@ rb_io_to_ptr(VALUE self) > + GetOpenFile(self, fptr); > + fp = fptr->f; > + > ++#if defined(__DragonFly__) > ++ return fp ? rb_dlptr_new(fp, 1, 0) : Qnil; > ++#else > + return fp ? rb_dlptr_new(fp, sizeof(FILE), 0) : Qnil; > ++#endif > + } > + > + VALUE 別の方からも連絡をいただき、この修正が必要な理由を教えて貰いました。 まず、DragonFly BSDでは、FILE型の内容が標準ライブラリ関数の外からは 不可視となっていて、ABIの変更に対する変更の影響を受けないようにしてい るとのことです。(これはソースのレベルの話で、FILE型の大きさが変わった りしたら、バイナリ・レベルではダメだろうと私は思います。) というわけで、sizeof(FILE)というコードを書くと、サイズが決められないた めにコンパイル・エラーになるわけです。 また、 >> Since the use here to prevent the Garbage Collector >> to collect something from inside FILE, it would hide only real bugs. と言われましたが、この辺りの真偽の程は私にはわかりません。 -- 神戸 隆博(かんべ たかひろ) at 仕事場