From ca209c80e9ab2911793a8d348514698c3124214b Mon Sep 17 00:00:00 2001 From: akr Date: Wed, 3 Dec 2008 12:33:37 +0000 Subject: [PATCH] * process.c (check_exec_redirect): accept :in, :out, :err as redirect target. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20467 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ process.c | 12 ++++++++++++ test/ruby/test_process.rb | 5 +++++ 3 files changed, 22 insertions(+) diff --git a/ChangeLog b/ChangeLog index 4397740080..ad39501d2c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Dec 3 21:30:06 2008 Tanaka Akira + + * process.c (check_exec_redirect): accept :in, :out, :err as redirect + target. + Wed Dec 3 21:18:27 2008 Tadayoshi Funaba * test/ruby/test_rational.rb: revert. diff --git a/process.c b/process.c index 517b4867b1..35829da5cc 100644 --- a/process.c +++ b/process.c @@ -1259,6 +1259,18 @@ check_exec_redirect(VALUE key, VALUE val, VALUE options) index = EXEC_OPTION_CLOSE; param = Qnil; } + else if (id == rb_intern("in")) { + index = EXEC_OPTION_DUP2; + param = INT2FIX(0); + } + else if (id == rb_intern("out")) { + index = EXEC_OPTION_DUP2; + param = INT2FIX(1); + } + else if (id == rb_intern("err")) { + index = EXEC_OPTION_DUP2; + param = INT2FIX(2); + } else { rb_raise(rb_eArgError, "wrong exec redirect symbol: %s", rb_id2name(id)); diff --git a/test/ruby/test_process.rb b/test/ruby/test_process.rb index ba933b2d56..a77773db20 100644 --- a/test/ruby/test_process.rb +++ b/test/ruby/test_process.rb @@ -306,6 +306,11 @@ class TestProcess < Test::Unit::TestCase Process.wait Process.spawn(*ECHO["e"], STDOUT=>["out", File::WRONLY|File::CREAT|File::TRUNC, 0644], 3=>STDOUT, 4=>STDOUT, 5=>STDOUT, 6=>STDOUT, 7=>STDOUT) assert_equal("e", File.read("out").chomp) + Process.wait Process.spawn(*ECHO["ee"], STDOUT=>["out", File::WRONLY|File::CREAT|File::TRUNC, 0644], + 3=>0, 4=>:in, 5=>STDIN, + 6=>1, 7=>:out, 8=>STDOUT, + 9=>2, 10=>:err, 11=>STDERR) + assert_equal("ee", File.read("out").chomp) File.open("out", "w") {|f| h = {STDOUT=>f, f=>STDOUT} 3.upto(30) {|i| h[i] = STDOUT if f.fileno != i }