[#41278] [BUG:1.9] BINARY should not be ASCII-compatible — Yugui <yugui@...>

Yuguiです。

15 messages 2010/05/11

[#41407] [Bug #3339] win32ole test failure — Usaku NAKAMURA <redmine@...>

Bug #3339: win32ole test failure

20 messages 2010/05/25
[#41411] Re: [Bug #3339] win32ole test failure — Masaki Suketa <masaki.suketa@...> 2010/05/25

助田です。

[#41412] Re: [Bug #3339] win32ole test failure — "U.Nakamura" <usa@...> 2010/05/25

こんにちは、なかむら(う)です。

[ruby-dev:41430] [bug:trunk] rubyspec: Kernel.spawn redirects both STDERR and STDOUT to the given name ERROR

From: Yusuke ENDOH <mame@...>
Date: 2010-05-26 20:14:37 UTC
List: ruby-dev #41430
遠藤です。

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>

In This Thread

Prev Next