ruby-trunk-changes r30371 - r30385

本日の内容は Socket::Option#inspect の表示できるオプションの拡張に関する修正や、IO#advise の引数チェックの変更、Win32::Registry.create の不具合修正、Ripper の不具合修正などなどです。

akr:r30371 2010-12-25 23:35:28 +0900

socket 拡張ライブラリの Socket::Option#inspect でオプションが IP_MULTICAST_IF, IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP の時に struct ip_mreq/struct ip_mreqn 構造体の情報をきれいに表示するように処理を追加しています。

usa:r30372 2010-12-26 01:41:13 +0900

Socket::Option#inspect の修正で Windows でビルド失敗していたので if_indextoname のチェック追加と inet_ntoa の有無で処理を分けるように再修正。

svn:r30373 2010-12-26 01:41:15 +0900

version.h の日付更新。

kosaki:r30374 2010-12-26 02:21:08 +0900

r30372 で inet_ntoa の存在チェックが常に実行されていないのでビルドエラーになっていたので(多分) extconf.rb を修正。

kosaki:r30375 2010-12-26 02:25:02 +0900

IO#advise で引数に :normal, :sequential, :random, :willneed, :dontneed, :noreuse 以外のシンボルが渡された時に NotImplementedError が raise されるようになりました。ありがとうございます。 [Feature #4204]

naruse:r30376 2010-12-26 02:37:36 +0900

r30374 で 不要になった #define HAVE_INET_NTOP を削除しています。 __HAIKU__ ってなんだろう、と思ったら、Haiku というオペレーティングシステムがあるんですね。 Haiku (オペレーティングシステム)

luislavena:r30377 2010-12-26 04:33:46 +0900

dl/win32/registry.rb の RegCreateKeyExA() のシグネチャを修正しています。[Bug #4203]

akr:r30378 2010-12-26 09:25:14 +0900

Socket::Option#inspect のために if_indextoname() の有無を遮蔽する rb_if_indextoname() 関数を定義して利用するようにしています。
また Socket::Options#inspect で IPV6_MULTICAST_IF の時のインタフェース名を表示できるように関数を追加しています。

akr:r30379 2010-12-26 09:36:08 +0900

rational.c の関数マクロの引数にかっこをつける修正です。

nobu:r30380 2010-12-26 11:15:55 +0900

テストで DifferentOFS を include するとそのクラス自体も $, をすりかえて実行するようになっちゃってたので、自動的に生成されるクラスのみ setup, teardown を追加するようにしています。おーい何がメタプログラミングRuby読んでて良かっただよ>昨日の自分。気が付かなかったのはひとえにわたしの注意の欠如によるものです。

nobu:r30381 2010-12-26 11:39:14 +0900

parse.y にて

a::B ||= c 1

のようなルールのときのアクション部(って言うんですよね確か)に Ripper 用の記述が抜けていたために Ripper でのみエラーにならなかったので記述(C 言語にとってはコメント)を追加。

nobu:r30382 2010-12-26 12:16:34 +0900

ri は環境変数 HOME がセットされていないと例外を発生させていたので rescue しています。また File.expand_path を使って "~" を展開させていますが、これでは USERPROFILE や HOMEPATH という環境変数が効かなくなってしまうのでこれでいいんでしょうか。 コメントで教えていただきましたが Windows 環境だと HOME が存在しない時は初期化時に HOMEDRIVE, HOMEPATH か USERPROFILE から、さらにそれもないと SHGetSpecialFolderLocation() という関数を使ってプロファイルフォルダ、パーソナルフォルダというのを探してきて、それを環境変数 HOME にセットしているので、File.expand_path で HOME だけを参照しているけど大丈夫だそうです。USERPROFILE とか HOMEPATH というのは Windows 環境での環境変数だったんですね。

akr:r30383 2010-12-26 13:26:10 +0900

ext/socket/option.c の IPv4 multicast についてのコメントの参考リンクを追加しています。

akr:r30384 2010-12-26 19:38:44 +0900

ext/socket/option.c で if_indextoname() が利用できない条件でのコンパイル時に IFNAMSIZ という定数マクロが存在しないと mingw32 でコンパイルエラーになるらしく #define を追加しています。#else 部分では IFNAMSIZ は利用していないようなのでちょっと不思議ですが、VC だとエラーになるみたいです。 [追記]ここではなくて、rb_if_indextoname() を呼び出しているほうの関数でバッファを用意しているところで IFNAMSIZ は使われているので、そこのために必要なのでした。利用している近辺か、上のほうで #ifndef IFNAMSIZ のところだけ書くほうがわかりよいですね。[/追記]

akr:r30385 2010-12-26 19:43:53 +0900

r30383 のコメント追記部分の typo 修正。