ruby-trunk-changes r35914 - r35926

今日も主に Process の exec や spawn のリファクタリングが行われていました。

drbrain:r35914 2012-06-05 09:37:08 +0900

IO.open, File.open, Kernel#open の rdoc を編集しています。 mode の詳しい説明などは Kernel#open の項に移動しています。

svn:r35915 2012-06-05 09:37:11 +0900

version.h の日付更新。

nobu:r35916 2012-06-05 10:29:43 +0900

新規追加になったファイルや REXML のテスト用の XML ファイルのプロパティ変更。また一部改行コードを \r\n から \n に変更しています。

akr:r35918 2012-06-05 19:16:11 +0900

process.c と io.c に fork してから exec するまでの間に async-signal-safe な関数しか呼べないので、呼んでいる関数について async-signal-safe であることや、async-signal-safe でない関数を呼んでいる部分があるところについてコメントでメモしています。

akr:r35919 2012-06-05 19:21:22 +0900

Process.exec などのコマンドラインを分解する処理で空白文字やメタキャラクタの存在をチェックするループは検出したらすぐ抜けるように最適化しています。

akr:r35920 2012-06-05 19:35:47 +0900

process.c の proc_spawn() でコマンドラインに空白やメタキャラクタが含まれていないかチェックする処理は、既に rb_exec_fillarg() でチェック済みなので省略しています。 proc_spawn() はメタキャラクタなどが含まれていて shell 経由で実行する場合しか呼ばれません。

akr:r35921 2012-06-05 19:59:51 +0900

process.c で strtok() は利用しなくなったので、宣言を削除しています。

nobu:r35922 2012-06-05 20:13:18 +0900

各クラスのインスタンスメソッド inititalize_copy の実装で OBJ_INIT_COPY() という関数マクロのラッパを定義して rb_obj_init_copy() を呼び出すよう処理を共通化するようにして、さらに rb_obj_init_copy() でコピー先のオブジェクトが untrust がセットされていないことをチェックするようにしています。

akr:r35923 2012-06-05 21:59:40 +0900

fork(2) 後に malloc()/free() (async-signal-safe でないので呼んではいけない関数)を呼ばなくていいように、file descriptor の dup 情報を格納するための事前にバッファを内部的な String オブジェクトとして確保しておくようにしています。

nobu:r35924 2012-06-05 22:08:47 +0900

common.mk で make install 系の依存関係に拡張ライブラリのビルドもするようにしています。

akr:r35925 2012-06-05 22:29:54 +0900

構造体 rb_exec_arg の宣言と関連する関数の宣言を intern.h から internal.h に移動して外に公開しないようにしています。

akr:r35926 2012-06-05 23:33:32 +0900

r35923 の修正で fork 後の async-signal-safe な関数のみ利用しているかどうかの状況が改善されたので、コメントを修正しています。まだ何箇所か残っています。