[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]