ruby-trunk-changes r31262 - r31267

今日はひさしぶりに修正多めでした。mingw-w64 でのビルドの修正、readline, uri の修正がありました。

luislavena:r31262 2011-04-12 01:38:10 +0900

mingw-w64 では truncate(), ftruncate(), ftello() といったライブラリ関数がサポートされているけど、ruby は独自に実装した関数を持っているため衝突するので、configure で関数の存在チェックして、あれば定義を省くようにしています。また truncate -> rb_w32_truncate のように別名で関数定義して、必要に応じて #define するようにしています。 [ruby-core:35678] [Bug #4564]

svn:r31263 2011-04-12 01:38:14 +0900

version.h の日付更新。

usa:r31264 2011-04-12 10:39:39 +0900

r31262 の変更で HAVE_FTRUNCATE などのマクロが定義されたら ftruncate() などの関数は自前で定義しないようにしていますが、 VC では ftruncate() は存在しないけど HAVE_FTRUNCATE は定義しているらしい(win32/Makefile.sub の config.h を生成しているところがそれらしい)ので defined(_MSC_VER) の時はやっぱり自前の関数を定義するようにしています。

kouji:r31265 2011-04-12 18:08:08 +0900

ext/readline/extconf.rb に --disable-libedit を指定した時の動作が --(enable|disable)-libedit を指定しなかった時(libreadline でも libedit でもみつかったほうを使う)になっていたので、 libedit は利用しないようにしています。 [ruby-dev:41492] [Feature #3375]
なおコミットログと ChangeLog には fix #4550 とありますが #3375 ですよね。

naruse:r31266 2011-04-12 19:20:50 +0900

URI.encode_www_form_component, URI.decode_www_form_component で利用されている定数 TBLENCWWWCOMP_ と TBLDECWWWCOMP_ は空の Hash で初期化されて初回の呼び出し時に内容を設定するようになっていますが、これが定数の Hash を直接書き換えていたので複数の Thread から同時に呼び出すと競合状態をひきおこします。そのため別途 Hash を生成して replace するようにしています。これでもまだ同時に if の中に入って Hash#replace が freeze のためにこけることはあるような気がしますが、そこは例外を rescue しています。[ruby-core:35717] [Bug #4572]

akr:r31267 2011-04-12 20:54:28 +0900

include/ruby/st.h の関数マクロの引数にかっこをつける修正です。