[#48190] [ruby-trunk - Feature #9816] 文字列内の数字を数値として比較するメソッド — zn@...
Issue #9816 has been updated by Kazuhiro NISHIYAMA.
3 messages
2014/05/08
[ruby-dev:48174] [ruby-trunk - Feature #3348] [Closed] rubyspec: Kernel.spawn redirects both STDERR and STDOUT to the given name ERROR
From:
akr@...
Date:
2014-05-05 13:37:19 UTC
List:
ruby-dev #48174
Issue #3348 has been updated by Akira Tanaka.
Status changed from Assigned to Closed
% Done changed from 0 to 100
Applied in changeset r45828.
----------
* process.c (check_exec_redirect): Open the file in write mode for
redirect from [:out, :err].
Proposed and implemented by Yusuke Endoh.
[ruby-dev:41430] [Feature #3348]
----------------------------------------
Feature #3348: rubyspec: Kernel.spawn redirects both STDERR and STDOUT to the given name ERROR
https://bugs.ruby-lang.org/issues/3348#change-46542
* Author: Yusuke Endoh
* Status: Closed
* Priority: Low
* Assignee: Yusuke Endoh
* Category:
* Target version: current: 2.2.0
----------------------------------------
=begin
遠藤です。
spawn のリダイレクトの引数で :out => "foo" としたとき、ファイル foo が存在
しなければ作ってくれますが、[:out, :err] => "foo" だと作ってくれません。
ruby -e 'pid = spawn("echo", "foo", [:out, :err] => "foo"); Proces.wait pid'
これは意図的でしょうか。
うっとうしいことに、rubyspec がこの挙動に依存して失敗するようになりました。
配列の中がすべて :out か :err だったら O_CREAT|O_TRUNC にするパッチです。
反対がなければコミットします。
diff --git a/process.c b/process.c
index 9e52392..4ca6ed3 100644
--- a/process.c
+++ b/process.c
@@ -1342,7 +1342,19 @@ check_exec_redirect(VALUE key, VALUE val, VALUE options)
key = check_exec_redirect_fd(key);
if (FIXNUM_P(key) && (FIX2INT(key) == 1 || FIX2INT(key) == 2))
flags = INT2NUM(O_WRONLY|O_CREAT|O_TRUNC);
- else
+ else if (TYPE(key) == T_ARRAY) {
+ int i;
+ for (i = 0; i < RARRAY_LEN(key); i++) {
+ VALUE v = RARRAY_PTR(key)[i];
+ VALUE fd = check_exec_redirect_fd(v);
+ if (FIX2INT(fd) != 1 && FIX2INT(fd) != 2) break;
+ }
+ if (i == RARRAY_LEN(key))
+ flags = INT2NUM(O_WRONLY|O_CREAT|O_TRUNC);
+ else
+ flags = INT2NUM(O_RDONLY);
+ }
+ else
flags = INT2NUM(O_RDONLY);
perm = INT2FIX(0644);
param = hide_obj(rb_ary_new3(3, hide_obj(rb_str_dup(path)),
--
Yusuke Endoh <mame@tsg.ne.jp>
=end
--
https://bugs.ruby-lang.org/