SF.net SVN: geany: [2028] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Tue Nov 6 17:07:26 UTC 2007


Revision: 2028
          http://geany.svn.sourceforge.net/geany/?rev=2028&view=rev
Author:   eht16
Date:     2007-11-06 09:07:26 -0800 (Tue, 06 Nov 2007)

Log Message:
-----------
Quote first element of command line when using Compile, Build and Make commands on Windows to avoid problems if the tools are specified with full path.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/build.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2007-11-06 16:59:01 UTC (rev 2027)
+++ trunk/ChangeLog	2007-11-06 17:07:26 UTC (rev 2028)
@@ -1,6 +1,9 @@
 2007-11-06  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
 
  * src/build.c: Enable stopping of Run command on Windows.
+ * src/build.c: Quote first element of command line when using Compile,
+                Build and Make commands on Windows to avoid problems
+                if the tools are specified with full path.
 
 
 2007-11-06  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>

Modified: trunk/src/build.c
===================================================================
--- trunk/src/build.c	2007-11-06 16:59:01 UTC (rev 2027)
+++ trunk/src/build.c	2007-11-06 17:07:26 UTC (rev 2028)
@@ -468,6 +468,29 @@
 }
 
 
+#ifdef G_OS_WIN32
+/* cmd is a command line separated with spaces, first element will be escaped with double quotes
+ * and a newly allocated string will be returned */
+static gchar *quote_executable(const gchar *cmd)
+{
+	gchar **fields;
+	gchar *result;
+
+	if (! NZV(cmd))
+		return NULL;
+
+	fields = g_strsplit(cmd, " ", 2);
+	if (fields == NULL || g_strv_length(fields) != 2)
+		return g_strdup(cmd);
+
+	result = g_strconcat("\"", fields[0], "\" ", fields[1], NULL);
+
+	g_strfreev(fields);
+	return result;
+}
+#endif
+
+
 /* dir is the UTF-8 working directory to run cmd in. It can be NULL to use the
  * idx document directory */
 static GPid build_spawn_cmd(gint idx, const gchar *cmd, const gchar *dir)
@@ -503,6 +526,10 @@
 	g_free(executable);
 
 #ifdef G_OS_WIN32
+	// due to g_shell_parse_argv() we need to enclose the command(first element) of cmd_string with
+	// "" if the command contains a full path(i.e. backslashes) otherwise the backslashes will be
+	// eaten by g_shell_parse_argv().
+	setptr(cmd_string, quote_executable(cmd_string));
 	if (! g_shell_parse_argv(cmd_string, NULL, &argv, NULL))
 		// if automatic parsing failed, fall back to simple, unsafe argv creation
 		argv = g_strsplit(cmd_string, " ", 0);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list