今日も主に 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 な関数のみ利用しているかどうかの状況が改善されたので、コメントを修正しています。まだ何箇所か残っています。