From: Nobuyoshi Nakada Date: 2007-03-22T17:25:28+09:00 Subject: [ruby-dev:30668] Re: ロード済み拡張ライブラリの判別 なかだです。 At Wed, 21 Mar 2007 17:44:19 +0900, arton wrote in [ruby-dev:30657]: > Exerbのコアに1.8.6を利用しようとして気づいたのですが、拡張ライブラリがロー > ド済みかどうか、Cプログラムから判断するための関数が1.8.6ではなくなってい > るように思います(他の方法があるのかも知れないので断定できないです)。 > 代わりとなるexternな関数はないでしょうか? [ruby-dev:30434]で > (2) rb_provided()は拡張ライブラリについてはあきらめる > > rb_provided()はautoload関連でしか使われていないので、とりあえず > は(2)でいいのではないかと思います。 と書いたとおり、exerbについては考えていませんでした。 > 以前は、Exerbからロードした拡張ライブラリをrb_preloadでRuby側に登録して、 > 登録済みかどうかをrb_preloadedで判断していました。 rb_provide()とrb_provided()ですよね? rb_provide("extension.so") のあとに、rb_provided("extension.so") と拡張ライブラリであることを明示してもfalseが返るということであ れば、バグだと思います。 Index: eval.c =================================================================== --- eval.c (revision 12122) +++ eval.c (working copy) @@ -7018,5 +7018,6 @@ rb_provided(feature) } else if (IS_SOEXT(ext) || IS_DLEXT(ext)) { - return Qfalse; /* may be overriden by .rb file */ + if (rb_feature_p(feature, ext, Qfalse)) return Qtrue; + return Qfalse; } } -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦