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

ruby-changes:13588

From: usa <ko1@a...>
Date: Fri, 16 Oct 2009 16:43:44 +0900 (JST)
Subject: [ruby-changes:13588] Ruby:r25369 (ruby_1_8): * win32/win32.c (CreateChild): recognize escape characters.

usa	2009-10-16 16:43:33 +0900 (Fri, 16 Oct 2009)

  New Revision: 25369

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

  Log:
    * win32/win32.c (CreateChild): recognize escape characters.

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

Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 25368)
+++ ruby_1_8/ChangeLog	(revision 25369)
@@ -1,3 +1,7 @@
+Fri Oct 16 16:42:57 2009  NAKAMURA Usaku  <usa@r...>
+
+	* win32/win32.c (CreateChild): recognize escape characters.
+
 Fri Oct 16 16:41:56 2009  NAKAMURA Usaku  <usa@r...>
 
 	* dln.c (dln_find_1): backport from trunkn. [ruby-core:25802]
Index: ruby_1_8/win32/win32.c
===================================================================
--- ruby_1_8/win32/win32.c	(revision 25368)
+++ ruby_1_8/win32/win32.c	(revision 25369)
@@ -1054,13 +1054,22 @@
 	    cmd = tmp;
 	}
 	else {
+	    char quote = (*cmd == '"') ? '"' : (*cmd == '\'') ? '\'' : 0;
 	    shell = NULL;
-	    prog = cmd;
-	    for (;;) {
+	    for (prog = cmd + !!quote;; prog = CharNext(prog)) {
 		if (!*prog) {
 		    p = dln_find_exe(cmd, NULL);
 		    break;
 		}
+		if (*prog == quote) {
+		    len = prog++ - cmd - 1;
+		    p = ALLOCA_N(char, len + 1);
+		    memcpy(p, cmd + 1, len);
+		    p[len] = 0;
+		    p = dln_find_exe(p, NULL);
+		    break;
+		}
+		if (quote) continue;
 		if (strchr(".:*?\"/\\", *prog)) {
 		    if (cmd[len]) {
 			char *tmp = ALLOCA_N(char, len + 1);
@@ -1078,7 +1087,6 @@
 		    p = dln_find_exe(p, NULL);
 		    break;
 		}
-		prog++;
 	    }
 	}
     }

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

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