ruby-trunk-changes r51678 - r51698

今日は主に昨日追加された Windows 版の symlink の追加によるテストの失敗の修正がありました。Windows 版のファイル操作の各所で symbolic link 対応が行なわれました。

nobu: r51678 2015-08-26 09:26:02 +0900

r51541 で導入した id をキーとした st_table の実装 id_table.c で "//" による行コメントが使われていたので if(0) による分岐に書き換え(コメントアウトにしなかったのはなぜだろう)、構造体の初期化子に変数を使っていたところがあったのでそれも後から代入するように修正しています。 C89 準拠のコンパイラで動くようにとのことです。 [ruby-dev:49239] [Bug #11487]

svn: r51679 2015-08-26 09:26:13 +0900

version.h の日付更新。

nobu: r51680 2015-08-26 09:46:34 +0900

id_table.c で定数を格納する変数に const 修飾子を追加しています。

nobu: r51681 2015-08-26 09:46:58 +0900

id_table.c のインデントの修正のみ。

nobu: r51682 2015-08-26 09:47:10 +0900

id_table.c の rb_id_table_foreach() と rb_id_table_foreach_values() のコールバック関数の型を id_table.h で typedef で rb_id_table_foreach_func_t/rb_id_table_foreach_values_func_t と型名を宣言して、各関数の定義でもこの型を利用するようにしています。

nobu: r51683 2015-08-26 10:20:31 +0900

id_table.c で選択したアルゴリズムに対応する型と関数を選択するのを RUBY_ALIAS_FUNCTION_VOID() や RUBY_ALIAS_FUNCTION_TYPE() を使ったマクロを利用するように書きかえています。

nobu: r51684 2015-08-26 10:21:15 +0900

symbol.c で rb_id_serial_to_id() が table_id.c の ID_TABLE_IMPLE の選択によっては未使用なので、警告が出るのを抑制するため gcc の場合は __attribute__( (unused) ) を利用するようにしています。

nobu: r51685 2015-08-26 10:52:04 +0900

String#include? などで wide character のマッチを探す時に文字列終端が除外されてしまっていたのを修正しています。 [ruby-core:70592] [Bug #11488]

nobu: r51686 2015-08-26 13:47:37 +0900

win32/win32.c の Win32API のエラーと errno のマッピングを指定してるテーブルに ERROR_CANT_RESOLVE_FILENAME と ELOOP を対応付けるエントリを追加しています。 ELOOP って symbolic link のネストが深すぎるってやつでしたね。

nobu: r51687 2015-08-26 14:21:41 +0900

win32/win32.c に lchown() のダミー実装を追加しています。

nobu: r51688 2015-08-26 15:53:32 +0900

Windows 版の _wopen() で errrno=EINVAL がかえってきた時に ELOOP が返せるように errno のマッピングを行うようにしています。

nobu: r51689 2015-08-26 17:11:33 +0900

Windows 版の opendir の symbolic link 対応を GetFinalPathNameByHandleW() を使って行うようにしています。 winnt_stat() で行っていた処理を get_final_path() という関数に切り出して open_dir_handle() でも利用するようにしています。

nobu: r51690 2015-08-26 17:11:58 +0900

FileUtils のテストで定義しているユーティリティ my_rm_rf の Windows 版の実装として rmdir /q/s コマンドを利用するようにしています。

nobu: r51691 2015-08-26 23:12:43 +0900

r51689 の追加修正で open_dir_handle で古い Windows で GetFinalPathNameByHandleW() が使えない時の対応を追加しています。

nobu: r51692 2015-08-26 23:46:29 +0900

Windows 版の unlink() の実装で symbolic link の対応を追加しています。 RemoveDirectoryW() で削除するようにしていますが、Windows における symbolic link (REPARSE POINT や dedup?) は directory 扱いなのか…。

nobu: r51693 2015-08-26 23:49:07 +0900

pathname のテストで File.chmod が実際に権限を変更していない時に Pathname#realpath が Errno::EACCES を発生させるテストをスキップするようにしています。 Windows 版は chmod 0000 には対応していないからでしょうか。

nobu: r51694 2015-08-27 01:01:48 +0900

Windows 版の reparse_symlink() で r51676 から Win32API の返したエラーをそのまま返すようにしたのに map_errno() でマッピングする処理が残っていた所があったので修正しています。

svn: r51695 2015-08-27 01:02:11 +0900

version.h の日付更新。

nobu: r51696 2015-08-27 01:05:39 +0900

標準添付ライブラリ fileutils で Windows では File.rename がファイルを上書きできないものとして FileUtils.rename_cannot_overwrite_file が定義されていたのですが、上書き可能に変更しています。

nobu: r51697 2015-08-27 01:22:56 +0900

Windows 版の rename() で CreateFileW() がエラーをかえした時の errno マッピングで errno=ELOOP をかえせるようにしています。

nobu: r51698 2015-08-27 02:24:32 +0900

r51674 で追加した Windows 版の symlink の実装でパスの区切りの "/" をバックスラッシュ("\")におきかえるようにしています。