From: KUBO T. <ku...@ji...> - 2002-08-26 16:37:36
|
久保@茅ヶ崎市です。 Masao Mutoh <mu...@hi...> writes: >> 掟破りの ruby-gnome-users-ja 飛ばし。 >> # 英語で書くの面倒だったので.....。m(__)m > > 私もそうしたくなるときが多々あります(^^;)。 手抜きしました。m(__)m (snip) > それから、久保さんの最終的なパッチって > > http://www.jiubao.org/tmp/0821-2.dif > > ですよね。 あっ、 http://www.jiubao.org/tmp/0820.dif http://www.jiubao.org/tmp/0821-2.dif の2つです。 0820.dif が '(1) undefined symbol' のエラー修正、 0821-2.dif が '(2) integer too big' のエラー修正です。 (1) は Linux でも ruby にパッチを当てれば再現できるのでこれで解決でしょう。 (2) は 32 bit の Linux では再現できないのでおそらくこれで直るだろうと いうパッチです。 (2) の問題は、VALUE 型のデータを INT2NUM で ruby の数字にして、NUM2INT で元に戻そうとしていたことです。 おそらく Tru64 では、 long の幅 == void * の幅 == VALUE の幅 == 8バイト int の幅 == 4バイト となっているのだと思います。 INT2NUM は名前に反して引数として long を取るので、 INT2NUM(VALUEの値) は問題なく Ruby のオブジェクトに変換されますが、逆変換をしようとして NUM2INT() を使うと、int の幅を越えるデータが出てきて、エラーが起こる可能性があり ます。 あと、8021-2.dif のパッチを出してから気付いたのですが、VALUE は unsinged long に typedef されているので、本当は、UINT2NUM, NUM2ULONG の組を用いたのが良いかもしれません。 まあ、UINT2NUM/NUM2ULONG の組でも、INT2NUM/NUM2LONG の組でも、ちゃんと 対応がとれていれば実用上は問題ないとは思うけど。 では、再見 -- 神奈川県茅ヶ崎市在住 久保 健洋 email: ku...@ji... web: http://www.jiubao.org GnuPG fingerprint = 5F7B C8EF CA16 57D0 FDE1 9F47 C001 1F93 AC08 2262 |