ruby-trunk-changes r45666 - r45692

今日は昨日追加された File#statfs や File::Statfs の修正や StringIO#write が書き込む文字列の taint フラグを内部の string に伝播させていなかった不具合修正などがありました。

naruse: r45666 2014-04-22 21:55:16 +0900

r45662 や r45664 のメッセージ埋め込みで SEEK_DATA の使えないファイルシステム(というか使えるファイルシステム)が判明したようで利用できるファイルシステムかチェックしてから File#seek のテストをするようにしています。

naruse: r45667 2014-04-22 21:57:38 +0900

r45661 で導入した File::Statfs の定義部分を #ifdef HAVE_STRUCT_STATFS ... #endif で括って struct statfs がない環境ではビルドしないようにしています。

usa: r45668 2014-04-22 22:19:15 +0900

同じく r45661 で導入した IO#statfs も fstatfs(2) がない環境では NotImplementedError を発生させるようにしています。またテストもスキップするようにしています。

nobu: r45669 2014-04-22 23:01:51 +0900

r45661 で追加の File::Statfs の実装 statfs_fsid() で aliasing の警告除去のため型の変換を共用体を使った実装に変更しています。

nobu: r45670 2014-04-22 23:14:30 +0900

拡張ライブラリ stringio で taint された文字列を書き込んだ時に内部のバッファ用 String オブジェクトに汚染フラグが伝播しない不具合を修正しています。 rb_str_append() を使って文字列連結するようにしています。 が、後で(r45674)これは revert されています。 [ruby-dev:48118] [Bug #9769]

usa: r45671 2014-04-22 23:57:18 +0900

r45661 で追加の IO#statfs の実装で fstatfs(2) が利用できない場合は statfs(2) で開いているファイルのファイルパスで呼ぶようにしています。うーんしかし fptr->pathv が Qnil の時もあるんじゃないでしょうか。

usa: r45672 2014-04-23 00:45:00 +0900

r45661 で追加の IO#statfs の Windows 対応の実装を追加しています。 GetVolumePathNameW()/GetVolumeInformationW()/GetDiskFreeSpaceW() などの API を利用してエミュレーションしています。filesystem type は 0 固定になっています。

svn: r45673 2014-04-23 00:45:07 +0900

version.h の日付更新。

naruse: r45674 2014-04-23 03:44:48 +0900

r45670 の stringio の taint フラグ伝播の修正を revert しています。 test-all が失敗していたため。

nobu: r45675 2014-04-23 11:03:24 +0900

misc/ruby-additional.el に C-c C-u で選択範囲の非 ASCII 文字を \u{} の Unicode記法に変換する機能を追加しています。

nobu: r45676 2014-04-23 11:03:35 +0900

拡張ライブラリ stringio の r45670 とそれを revert した r45674 の続きで、書き込む(追加する)文字列の GC マーク漏れを防ぐためのコンパイラ最適化避けの RB_GC_GUARD() が前のほうにあるのを利用した後に移動しています。

nobu: r45677 2014-04-23 11:03:43 +0900

これも r45670 とそれを revert した r45674 の続きで拡張ライブラリ stringio で、追記する文字列のエンコーディングが ASCII_8BIT の時はこれまで通り rb_enc_str_buf_cat() で追加してから OBJ_INJECT() で書き込む文字列の汚染フラグを伝播させるようにして、それ以外は rb_str_buf_append() を利用するようにしています。 [ruby-dev:48118] [Bug #9769]

nobu: r45678 2014-04-23 11:32:17 +0900

r45661 で追加の File::Statfs で fsid_t という型が定義されていない環境を考慮するようにしています。

naruse: r45679 2014-04-23 11:41:54 +0900

r45666 で File#seek の SEEK_DATA を使えるファイルシステムかどうかチェックするところで ext3ext4 は File::Statfs#type では区別がつかないそうで、 mtime/atime/ctime の精度で ext4 以上を検出するようにしています(ext3 までは精度が秒までなので nsec が 0 のはず。たまたま ext4 でも 0 にならないとも限らないですが)。

usa: r45680 2014-04-23 11:47:07 +0900

r45678 の fsid_t の型の有無をチェックするようにしたのに Windows 環境の win32/Makefile.sub での configh.h 生成も追随しています。

nobu: r45681 2014-04-23 11:51:34 +0900

拡張ライブラリ win32ole の LCID や EXCEPINFO.scode の文字列化する時のフォーマットの指定を修正しています。

naruse: r45682 2014-04-23 12:26:42 +0900

r45679 のファイルシステム検出の ext4 対応の修正の変数名 typo 修正。

naruse: r45683 2014-04-23 12:53:53 +0900

r45679 の SEEK_DATA が使えるファイルシステム検出の条件をさらに詳細にして、`uname -r` で Linux のバージョンを取得して SEEK_DATA が利用可能になっているバージョン(ファイルシステムごとに違うようです)までみて判定するようにしています。

nobu: r45684 2014-04-23 13:14:42 +0900

r45681 の win32ole のフォーマット文字列のサイズ指定修正に対応して渡す変数の型も環境によって揺らぎがあるそうなので明示的にキャストして渡すようにしています。

nobu: r45685 2014-04-23 13:31:09 +0900

struct statfs の fsid メンバの扱いを rb_integer_unpack() を使って整数化するように変更しています。

naruse: r45686 2014-04-23 13:31:56 +0900

Travis-CI での make test-all で lib/test/unit.rb の minitest.gem のバージョン指定がエラーになるのを回避するために gem "minitest", "< 5.0.0" で発生した Gem::LoadError を rescue して無視するようにしています。

naruse: r45687 2014-04-23 13:48:52 +0900

.travis.yml で実行前に `uname -a` と `cat /proc/version_signature` を実行して実行環境の情報を表示するようにしています。

naruse: r45688 2014-04-23 14:01:05 +0900

Travis-CI の環境には /proc/version_signature が存在しなかったようで r45687 を部分的に revert しています。

naruse: r45689 2014-04-23 14:25:12 +0900

struct statfs の f_fsid の値は File::Statfs には見せないように変更(削除)しています。 f_fsid が環境によって型が違っていて値が取れても利用しにくいのでとりあえずこのままでは意味がなさそう、ということのようです。 参考URL: http://togetter.com/li/658517

naruse: r45690 2014-04-23 14:31:08 +0900

.travis.yml に実行する環境の表示に uname -r を追加しています。 uname -a でバージョンも表示されると思うのですがなぜだろう…

naruse: r45691 2014-04-23 15:05:30 +0900

ファイルシステムによって File#seek の SEEK_DATA が使えるかの判定を利用して SEEK_HOLE のテストでも skip するようにしています。

akr: r45692 2014-04-23 20:53:07 +0900

拡張ライブラリ etc の extconf.rb が getlogin()、getpwent()、getgrent() のいずれかが存在するか RbConfig::CONFIG["sysconfdir"] が nil でない時だけ Makefile を生成するようになっていたのを常にビルドはするようにしています。