From: arton Date: 2006-02-26T23:45:53+09:00 Subject: [ruby-dev:28396] ruby-1.8 cvs head and 64bit time_t artonです。 ruby-1.8のcvs headをVC++8でmakeするとtime_tが64ビットになった関係でTime クラスを利用するテスト(たとえばyaml)の幾つかがフェイラーになります。 原因は、VC++の場合についてはtime_tは64ビットになったものの、Win32が提供 するstruct timevalのメンバーが32ビットのままなので、struct timevalにMSB が立っている値が設定されると取り出し時に符号拡張されて負値になるからです。 たとえばTime.atの引数がFixnumの場合は負値チェックに引っかかりますが、 Rationalを引数にした場合などでこの状態になります。 とりあえずtime_tが64ビットかつWin32の場合に符号拡張を抑制するパッチを http://arton.no-ip.info/data/time.patch に作ってみましたが、struct timevalを利用しないようにするといった将来的に時刻表現が64ビット化される ことを見越したもっとうまいやり方があると思いますので、検討していただけな いでしょうか。 -- arton -------------------------------------- GANBARE! NIPPON! Yahoo! JAPAN JOC OFFICIAL INTERNET PORTAL SITE PARTNER http://pr.mail.yahoo.co.jp/ganbare-nippon/