summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--process.c12
-rw-r--r--test/ruby/test_process.rb5
3 files changed, 22 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 439774008..ad39501d2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Dec 3 21:30:06 2008 Tanaka Akira <akr@fsij.org>
+
+ * process.c (check_exec_redirect): accept :in, :out, :err as redirect
+ target.
+
Wed Dec 3 21:18:27 2008 Tadayoshi Funaba <tadf@dotrb.org>
* test/ruby/test_rational.rb: revert.
diff --git a/process.c b/process.c
index 517b4867b..35829da5c 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 ba933b2d5..a77773db2 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 }