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

ruby-changes:9475

From: yugui <ko1@a...>
Date: Thu, 25 Dec 2008 18:54:05 +0900 (JST)
Subject: [ruby-changes:9475] Ruby:r21013 (ruby_1_9_1): merges r20942 from trunk into ruby_1_9_1.

yugui	2008-12-25 18:53:40 +0900 (Thu, 25 Dec 2008)

  New Revision: 21013

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

  Log:
    merges r20942 from trunk into ruby_1_9_1.
    * win32/win32.c (rb_w32_spawn): support normal commands with arguments.

  Modified files:
    branches/ruby_1_9_1/ChangeLog
    branches/ruby_1_9_1/win32/win32.c

Index: ruby_1_9_1/ChangeLog
===================================================================
--- ruby_1_9_1/ChangeLog	(revision 21012)
+++ ruby_1_9_1/ChangeLog	(revision 21013)
@@ -1,3 +1,7 @@
+Tue Dec 23 16:49:48 2008  NAKAMURA Usaku  <usa@r...>
+
+	* win32/win32.c (rb_w32_spawn): support normal commands with arguments.
+
 Tue Dec 23 15:46:43 2008  Yuki Sonoda (Yugui)  <yugui@y...>
 
 	* lib/mathn.rb: Math.sqrt(NaN) should be NaN. [ruby-dev:37537]
Index: ruby_1_9_1/win32/win32.c
===================================================================
--- ruby_1_9_1/win32/win32.c	(revision 21012)
+++ ruby_1_9_1/win32/win32.c	(revision 21013)
@@ -900,35 +900,36 @@
     }
     else {
 	int redir = -1;
-	int len = 0;
 	int nt;
 	while (ISSPACE(*cmd)) cmd++;
-	for (prog = cmd; *prog; prog = CharNext(prog)) {
-	    if (ISSPACE(*prog)) {
-		len = prog - cmd;
-		do ++prog; while (ISSPACE(*prog));
-		if (!*prog--) break;
-	    }
-	    else {
-		len = 0;
-	    }
-	}
-	if (!len) len = strlen(cmd);
 	if ((shell = getenv("RUBYSHELL")) && (redir = has_redirection(cmd))) {
-	    char *tmp = ALLOCA_N(char, strlen(shell) + len + sizeof(" -c ") + 2);
-	    sprintf(tmp, "%s -c \"%.*s\"", shell, len, cmd);
+	    char *tmp = ALLOCA_N(char, strlen(shell) + strlen(cmd) + sizeof(" -c ") + 2);
+	    sprintf(tmp, "%s -c \"%s\"", shell, cmd);
 	    cmd = tmp;
 	}
 	else if ((shell = getenv("COMSPEC")) &&
 		 (nt = !is_command_com(shell),
 		  (redir < 0 ? has_redirection(cmd) : redir) ||
 		  is_internal_cmd(cmd, nt))) {
-	    char *tmp = ALLOCA_N(char, strlen(shell) + len + sizeof(" /c ")
+	    char *tmp = ALLOCA_N(char, strlen(shell) + strlen(cmd) + sizeof(" /c ")
 				 + (nt ? 2 : 0));
-	    sprintf(tmp, nt ? "%s /c \"%.*s\"" : "%s /c %.*s", shell, len, cmd);
+	    sprintf(tmp, nt ? "%s /c \"%s\"" : "%s /c %s", shell, cmd);
 	    cmd = tmp;
 	}
 	else {
+	    int len = 0;
+	    for (prog = cmd; *prog; prog = CharNext(prog)) {
+		if (ISSPACE(*prog)) {
+		    len = prog - cmd;
+		    do ++prog; while (ISSPACE(*prog));
+		    break;
+		}
+		else {
+		    len = 0;
+		}
+	    }
+	    if (!len) len = strlen(cmd);
+
 	    shell = NULL;
 	    prog = cmd;
 	    for (;;) {
@@ -941,7 +942,6 @@
 			STRNDUPA(p, cmd, len);
 		    }
 		    p = dln_find_exe_r(p ? p : cmd, NULL, fbuf, sizeof(fbuf));
-		    cmd += len;
 		    break;
 		}
 		if (ISSPACE(*prog) || strchr("<>|", *prog)) {

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

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