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

ruby-changes:23845

From: usa <ko1@a...>
Date: Mon, 4 Jun 2012 10:44:46 +0900 (JST)
Subject: [ruby-changes:23845] usa:r35896 (trunk): * io.c (pipe_open): follow up changes in r35889.

usa	2012-06-04 10:44:27 +0900 (Mon, 04 Jun 2012)

  New Revision: 35896

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

  Log:
    * io.c (pipe_open): follow up changes in r35889.
    
    * process.c (proc_spawn_n): now uses char ** instead of VALUE *.
    
    * process.c (rb_spawn_process): prog is now VALUE of String, not char *.

  Modified files:
    trunk/ChangeLog
    trunk/io.c
    trunk/process.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 35895)
+++ ChangeLog	(revision 35896)
@@ -1,3 +1,11 @@
+Mon Jun  4 10:42:04 2012  NAKAMURA Usaku  <usa@r...>
+
+	* io.c (pipe_open): follow up changes in r35889.
+
+	* process.c (proc_spawn_n): now uses char ** instead of VALUE *.
+
+	* process.c (rb_spawn_process): prog is now VALUE of String, not char *.
+
 Mon Jun  4 06:12:43 2012  Nobuyoshi Nakada  <nobu@r...>
 
 	* marshal.c (r_object0): remove old warning for _alloc.
Index: io.c
===================================================================
--- io.c	(revision 35895)
+++ io.c	(revision 35896)
@@ -5501,24 +5501,6 @@
         cmd = StringValueCStr(prog);
 #endif
 
-#if !defined(HAVE_FORK)
-    if (!eargp) {
-        /* fork : IO.popen("-") */
-        argc = 0;
-        argv = 0;
-    }
-    else if (eargp->argc) {
-        /* no shell : IO.popen([prog, arg0], arg1, ...) */
-        argc = eargp->argc;
-        argv = eargp->argv;
-    }
-    else {
-        /* with shell : IO.popen(prog) */
-        argc = 0;
-        argv = 0;
-    }
-#endif
-
 #if defined(HAVE_FORK)
     arg.execp = eargp;
     arg.modef = fmode;
@@ -5599,18 +5581,8 @@
         fd = arg.pair[1];
     }
 #elif defined(_WIN32)
-    if (argc) {
-	int i;
-
-	if (argc >= (int)(FIXNUM_MAX / sizeof(char *))) {
-	    rb_raise(rb_eArgError, "too many arguments");
-	}
-	argbuf = rb_str_tmp_new((argc+1) * sizeof(char *));
-	args = (void *)RSTRING_PTR(argbuf);
-	for (i = 0; i < argc; ++i) {
-	    args[i] = StringValueCStr(argv[i]);
-	}
-	args[i] = NULL;
+    if (eargp && eargp->argv_str) {
+	args = (char **)RSTRING_PTR(eargp->argv_str);
     }
     switch (fmode & (FMODE_READABLE|FMODE_WRITABLE)) {
       case FMODE_READABLE|FMODE_WRITABLE:
Index: process.c
===================================================================
--- process.c	(revision 35895)
+++ process.c	(revision 35896)
@@ -1253,30 +1253,21 @@
 #endif
 
 static rb_pid_t
-proc_spawn_n(int argc, VALUE *argv, VALUE prog, VALUE options)
+proc_spawn_n(int argc, char **argv, VALUE prog, VALUE options)
 {
-    char **args;
-    int i;
-    VALUE v;
     rb_pid_t pid = -1;
 
-    args = ALLOC_ARGV(argc + 1, v);
-    for (i = 0; i < argc; i++) {
-	args[i] = RSTRING_PTR(argv[i]);
-    }
-    args[i] = (char*) 0;
-    if (args[0]) {
+    if (argv[0]) {
 #if defined(_WIN32)
 	DWORD flags = 0;
 	if (RTEST(rb_ary_entry(options, EXEC_OPTION_NEW_PGROUP))) {
 	    flags = CREATE_NEW_PROCESS_GROUP;
 	}
-	pid = rb_w32_aspawn_flags(P_NOWAIT, prog ? RSTRING_PTR(prog) : 0, args, flags);
+	pid = rb_w32_aspawn_flags(P_NOWAIT, prog ? RSTRING_PTR(prog) : 0, argv, flags);
 #else
-	pid = proc_spawn_v(args, prog ? RSTRING_PTR(prog) : 0);
+	pid = proc_spawn_v(argv, prog ? RSTRING_PTR(prog) : 0);
 #endif
     }
-    ALLOCV_END(v);
     return pid;
 }
 
@@ -3096,7 +3087,7 @@
 
     if (prog && !earg->use_shell) {
         char **argv = (char **)RSTRING_PTR(earg->argv_str);
-        argv[0] = prog;
+        argv[0] = RSTRING_PTR(prog);
     }
 # if defined HAVE_SPAWNV
     if (earg->use_shell) {

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

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