ruby-changes:18981
From: usa <ko1@a...>
Date: Fri, 4 Mar 2011 00:30:40 +0900 (JST)
Subject: [ruby-changes:18981] Ruby:r31017 (trunk): * process.c (check_exec_redirect_fd, check_exec_redirect): raise
usa 2011-03-03 22:13:10 +0900 (Thu, 03 Mar 2011) New Revision: 31017 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=31017 Log: * process.c (check_exec_redirect_fd, check_exec_redirect): raise ArgumentError if fd >= 3 on Windows because the feature is not supported. * test/ruby/test_process.rb (test_execopts_redirect): remove meaningless argument. Modified files: trunk/ChangeLog trunk/process.c trunk/test/ruby/test_process.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 31016) +++ ChangeLog (revision 31017) @@ -1,3 +1,12 @@ +Thu Mar 3 22:10:26 2011 NAKAMURA Usaku <usa@r...> + + * process.c (check_exec_redirect_fd, check_exec_redirect): raise + ArgumentError if fd >= 3 on Windows because the feature is not + supported. + + * test/ruby/test_process.rb (test_execopts_redirect): remove meaningless + argument. + Thu Mar 3 21:21:42 2011 NAKAMURA Usaku <usa@r...> * test/ruby/test_process.rb (test_execopts_redirect): redirecting fd Index: process.c =================================================================== --- process.c (revision 31016) +++ process.c (revision 31017) @@ -1294,7 +1294,7 @@ }; static VALUE -check_exec_redirect_fd(VALUE v) +check_exec_redirect_fd(VALUE v, int iskey) { VALUE tmp; int fd; @@ -1326,6 +1326,11 @@ wrong: rb_raise(rb_eArgError, "negative file descriptor"); } +#ifdef _WIN32 + else if (fd >= 3 && iskey) { + rb_raise(rb_eArgError, "wrong file descriptor (%d)", fd); + } +#endif return INT2FIX(fd); } @@ -1363,7 +1368,7 @@ break; case T_FILE: - val = check_exec_redirect_fd(val); + val = check_exec_redirect_fd(val, 0); /* fall through */ case T_FIXNUM: index = EXEC_OPTION_DUP2; @@ -1375,7 +1380,7 @@ if (RARRAY_LEN(val) == 2 && SYMBOL_P(path) && SYM2ID(path) == rb_intern("child")) { index = EXEC_OPTION_DUP2_CHILD; - param = check_exec_redirect_fd(rb_ary_entry(val, 1)); + param = check_exec_redirect_fd(rb_ary_entry(val, 1), 0); } else { index = EXEC_OPTION_OPEN; @@ -1399,7 +1404,7 @@ path = val; FilePathValue(path); if (TYPE(key) == T_FILE) - key = check_exec_redirect_fd(key); + key = check_exec_redirect_fd(key, 1); if (FIXNUM_P(key) && (FIX2INT(key) == 1 || FIX2INT(key) == 2)) flags = INT2NUM(O_WRONLY|O_CREAT|O_TRUNC); else @@ -1419,14 +1424,14 @@ rb_ary_store(options, index, ary); } if (TYPE(key) != T_ARRAY) { - VALUE fd = check_exec_redirect_fd(key); + VALUE fd = check_exec_redirect_fd(key, !NIL_P(param)); rb_ary_push(ary, hide_obj(rb_assoc_new(fd, param))); } else { int i, n=0; for (i = 0 ; i < RARRAY_LEN(key); i++) { VALUE v = RARRAY_PTR(key)[i]; - VALUE fd = check_exec_redirect_fd(v); + VALUE fd = check_exec_redirect_fd(v, !NIL_P(param)); rb_ary_push(ary, hide_obj(rb_assoc_new(fd, param))); n++; } Index: test/ruby/test_process.rb =================================================================== --- test/ruby/test_process.rb (revision 31016) +++ test/ruby/test_process.rb (revision 31017) @@ -384,7 +384,7 @@ Process.wait Process.spawn(*ECHO["c"], STDERR=>STDOUT, STDOUT=>["out", File::WRONLY|File::CREAT|File::TRUNC, 0644]) assert_equal("c", File.read("out").chomp) File.open("out", "w") {|f| - Process.wait Process.spawn(*ECHO["d"], f=>STDOUT, STDOUT=>f) + Process.wait Process.spawn(*ECHO["d"], STDOUT=>f) assert_equal("d", File.read("out").chomp) } opts = {STDOUT=>["out", File::WRONLY|File::CREAT|File::TRUNC, 0644]} -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/