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

ruby-changes:23841

From: akr <ko1@a...>
Date: Mon, 4 Jun 2012 00:45:57 +0900 (JST)
Subject: [ruby-changes:23841] akr:r35892 (trunk): * process.c (rb_spawn_process): fix for Windows. not tested.

akr	2012-06-04 00:45:46 +0900 (Mon, 04 Jun 2012)

  New Revision: 35892

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=35892

  Log:
    * process.c (rb_spawn_process): fix for Windows.  not tested.

  Modified files:
    trunk/ChangeLog
    trunk/process.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 35891)
+++ ChangeLog	(revision 35892)
@@ -1,3 +1,7 @@
+Mon Jun  4 00:45:18 2012  Tanaka Akira  <akr@f...>
+
+	* process.c (rb_spawn_process): fix for Windows.  not tested.
+
 Mon Jun  4 00:11:51 2012  Tanaka Akira  <akr@f...>
 
 	* process.c (rb_proc_exec_e): don't use ISSPACE().  \f, \r and \v
Index: process.c
===================================================================
--- process.c	(revision 35891)
+++ process.c	(revision 35892)
@@ -3094,14 +3094,17 @@
         return -1;
     }
 
-    argc = earg->argc;
-    argv = earg->argv;
-    if (prog && !earg->use_shell) argv[0] = prog;
+    if (prog && !earg->use_shell) {
+        char **argv = (char **)RSTRING_PTR(earg->argv_str);
+        argv[0] = prog;
+    }
 # if defined HAVE_SPAWNV
     if (earg->use_shell) {
 	pid = proc_spawn(RSTRING_PTR(prog));
     }
     else {
+        char **argv = (char **)RSTRING_PTR(earg->argv_str);
+        int argc = RSTRING_LEN(earg->argv_str) / sizeof(char *) - 1;
 	pid = proc_spawn_n(argc, argv, prog, earg->options);
     }
 #  if defined(_WIN32)
@@ -3109,7 +3112,11 @@
 	rb_last_status_set(0x7f << 8, 0);
 #  endif
 # else
-    if (!earg->use_shell) prog = rb_ary_join(rb_ary_new4(argc, argv), rb_str_new2(" "));
+    if (!earg->use_shell) {
+        char **argv = (char **)RSTRING_PTR(earg->argv_str);
+        int argc = RSTRING_LEN(earg->argv_str) / sizeof(char *) - 1;
+        prog = rb_ary_join(rb_ary_new4(argc, argv), rb_str_new2(" "));
+    }
     status = system(StringValuePtr(prog));
     rb_last_status_set((status & 0xff) << 8, 0);
 # endif

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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