ruby-trunk-changes r33701 - r33709

今日は mkmf.rb の機能追加などがありました。

drbrain:r33701 2011-11-11 08:35:35 +0900

net/http.rb で定義されている Net::HTTP::SSL_ATTRIBUTES を文字列の配列じゃなく Symbol の配列として定義するようにしています。利用されているところをみると "@#{name}" みたいに文字列に埋め込んで使っているみたいなので、どうせなら @ までつけてシンボルとして持ってしまえばいいような気もしますけど。

svn:r33702 2011-11-11 08:35:39 +0900

version.h の日付更新。

akr:r33703 2011-11-11 12:35:49 +0900

ext/dbm/extconf.rb の gdbm_compat というライブラリを検出する用のデータのコメントに libgdbm_compat の出自を追記しています。

kosaki:r33704 2011-11-11 12:41:13 +0900

popen などで子プロセスを fork する時に fflush(stdin) を呼んでいたのですが、stdin に fflush(3) を呼ぶ必要あるの? ということで削除されています。
関係ないけど stdin に書き込みできてしまうことがあるっていうネタをどこかで読んだことがあったような……。 FILE じゃなくて fd としてだったかな。

nobu:r33705 2011-11-11 17:09:48 +0900

rb_bug() を呼ぶとバックトレースなどの表示のうちメモリマップの表示のヘッダは出力できる時(/proc/self/maps が利用できる時)だけ表示するように。また GET_VM() で vm が取得できていない時にもチェックなしに利用しようとしていたところがあったのでチェックするようにしています。

nobu:r33706 2011-11-11 17:21:17 +0900

mkmf.rb の機能追加。 どういう効果が得られるのか理解しきれていないのですが、have_library, find_library, have_func などでチェックに使う関数名は名前だけ指定して引数は省略して ("func()" のような宣言で)コンパイルしてみてチェックしていたのを、関数呼び出しのかっこまで含めて書くと、それがそのままテストのための一時的に生成されるソースコードに埋め込まれるようにしているようです。
つまり

have_func("func(0)")

って書くと "func(0);" という宣言でチェックしてくれるはず。r33708 をみると、これは関数マクロをうまく検出するための対応のようです。

nobu:r33707 2011-11-11 18:42:02 +0900

Process.seteuid の実装のリファクタリング。実際の処理する内部関数 proc_seteuid() の責務から VALUE -> uid_t への変換と check_uid_switch() の呼び出しを消しています。で Process.euid= を実装する proc_seteuid_m() は単に proc_seteuid() の別名マクロになっていたので改めて関数として実装しています。そこで check_uid_switch() は呼んでいます。
ただ他の proc_seteuid() を呼んでいたところとして Process.switch というメソッド(始めて知りました……)で euid を切り替えるところでも呼んでます。check_uid_switch() はこの switch での euid の交換がネストしないようにチェックしているみたいなので、ここから check_uid_switch() を呼ばなくなるのは OK でしょうか。 if (uid != euid) などの分岐で実質チェック済みのような気もしますが。 p_uid_switch() で check_uid_switch() は呼び出し済みでした。

akr:r33708 2011-11-11 21:03:51 +0900

dbm で dbm_pagfno() と dbm_dirfno() の 検出方法に dbm_pagfno((DBM*)0) のように引数をつけて指定するようにしています。これらは関数ではなく関数マクロとして定義されている場合があり、関数マクロだと検出するために引数も指定しないといけないためだそうです。 r33706 の修正はこのためだったんですね。 また SIZEOF_DSIZE の定義のために -DDB_DBM_HSWARCH というコンパイルオプションを渡すようにしています。

akr:r33709 2011-11-11 21:14:23 +0900

gdbm_open() には gdbm 1.9.90 から GDBM_CLOEXEC というフラグが指定できるので、存在したらセットしておくようにしています。