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 仕事場