ruby-trunk-changes r33734 - r33749

今日も dbm のビルドスクリプトの修正および、C の API で整数のオブジェクトと C の整数型との変換をする NUM2???()/???2NUM() といったマクロの修正、追加がありました。

akr:r33734 2011-11-13 19:58:18 +0900

dbm の extconf.rb の変更。よくかってないのですが、dbm の実装ライブラリはたくさん種類があるので、それぞれきちんと対応するヘッダを指定してチェックするようにチェック方法を厳密にしているのではないかと思います。すごく自信ない……。

akr:r33735 2011-11-13 21:32:15 +0900

dbm, gdbm の O_CLOEXEC および GDBM_CLOEXEC フラグの対応バージョンについてのコメントを更新しています。 libgdbm の 1.10 から正式に対応されるようになったらしいです。

akr:r33736 2011-11-13 23:22:17 +0900

拡張ライブラリ gdbm で gdbm_reorganize() という関数を呼ぶと内部で fd を再 open するようなので再度 rb_fd_fix_cloexec() を呼んで close-on-exec フラグをセットするようにしています。

nobu:r33737 2011-11-13 23:46:01 +0900

まず mkmf.rb の最近の機能追加、変更を README.EXT に追記しています。
また have_struct_member というメソッドもコンパイラへのオプションを受けとれるように省略可能引数を追加しています。そして convertible_int (整数型が short, int, long, LONG_LONG のどれと同じかというのを判定してくれる便利メソッド)で構造体のメンバを指定してその型をチェックする機能が追加されているようです。

nobu:r33738 2011-11-13 23:47:31 +0900

ext/dbm/extconf.rb で dsize の型を検出するのに convertible_int を利用するようにしています。

kosaki:r33739 2011-11-14 12:45:47 +0900

NUM2ULONG で Bignum や Fixnum を unsigned long に変換する API でアンダーフローチェックのミスを修正。また C の API の修正なのでテスト用の拡張ライブラリを追加しています。
check_uint() のほうの修正はいいとして rb_big2ulong() の修正が難しいですね。 sizeof(VALUE) が sizeof(long) と違う(VALUE の方が大きい場合がある)から、ということだと思います。

svn:r33740 2011-11-14 12:45:54 +0900

version.h の日付更新。

kosaki:r33741 2011-11-14 12:47:21 +0900

r33739 で追加したテストに更に Fixnum の境界テストケースを追加。

kosaki:r33742 2011-11-14 12:51:56 +0900

NUM2ULL() の Bignum から unsigned LONG_LONG への変換のアンダーフローチェックはそもそもチェックされていなかったので追加しています。

kosaki:r33743 2011-11-14 12:54:34 +0900

さらに NUM2SHORT() と NUM2USHORT() というその名の通り short/unsigned short へ変換するマクロを追加しています。なんと、これまで存在していなかったのかー。これも README.EXT および NEWS に追記ですね。

kosaki:r33744 2011-11-14 12:55:40 +0900

include/ruby/ruby.h の NUM2???() や ???2NUM() のマクロの条件コンパイルの #else のところにコメント追加。

kosaki:r33745 2011-11-14 14:53:59 +0900

rb_fix2ushort() で rb_num2ushort() を num2uint() に typo していてコンパイル失敗していたのを修正。

kosaki:r33746 2011-11-14 14:56:09 +0900

rb_big2ull() でアンダーフローチェックが間違っていたのを修正。sizeof(VALUE) は sizeof(LONG_LONG) より小さい可能性があるので(32bit 環境では普通小さい。sizeof(long) と一緒)、LONG_LONG のビット幅のまま判定するようにしています。

nobu:r33747 2011-11-14 17:17:49 +0900

NUM2???() のテストの為に書かれた拡張ライブラリで VALUE 型の返り値を持つ関数なのに値を return していなかったのを修正。

akr:r33748 2011-11-14 20:22:15 +0900

dbm の extconf.rb のライブラリとヘッダの情報のところにコメントを追加しています。これによると 4.4BSD では libc が Berkeley DB 1 を含んでいるとのこと。

akr:r33749 2011-11-14 22:06:51 +0900

openssl で鍵や証明書をファイルから開く処理があるところで rb_fd_fix_cloexec() を呼び出すようにしています。