From fd21ab7f9ab4b462d6ffb81b77b699c5eef6d28c Mon Sep 17 00:00:00 2001 From: PJ Eby Date: Thu, 17 Nov 2005 03:01:33 +0000 Subject: Quote arguments to python.exe (including python's path) to avoid problems when Python (or a script) is installed in a directory whose name contains spaces. :( --HG-- branch : setuptools extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/trunk/setuptools%4041460 --- launcher.c | 20 ++++++++++---------- setuptools/cli.exe | Bin 5632 -> 6144 bytes setuptools/gui.exe | Bin 5632 -> 6144 bytes 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/launcher.c b/launcher.c index b5405911..1bb1097f 100755 --- a/launcher.c +++ b/launcher.c @@ -1,5 +1,4 @@ -/* - Setuptools Script Launcher for Windows +/* Setuptools Script Launcher for Windows This is a stub executable for Windows that functions somewhat like Effbot's "exemaker", in that it runs a script with the same name but @@ -23,7 +22,6 @@ starting. So, we have to use spawnv() and wait for Python to exit before continuing. :( */ - #include #include #include @@ -35,9 +33,11 @@ int fail(char *format, char *data) { fprintf(stderr, format, data); return 2; } - - - +char *quoted(char *data) { + char *result = calloc(strlen(data)+3,sizeof(char)); + strcat(result,"\""); strcat(result,data); strcat(result,"\""); + return result; +} int run(int argc, char **argv, int is_gui) { @@ -96,19 +96,19 @@ int run(int argc, char **argv, int is_gui) { /* Argument array needs to be argc+1 for args, plus 1 for null sentinel */ newargs = (char **)calloc(argc+2, sizeof(char *)); - newargs[0] = python; - newargs[1] = script; + newargs[0] = quoted(python); + newargs[1] = quoted(script); memcpy(newargs+2, argv+1, (argc-1)*sizeof(char *)); newargs[argc+1] = NULL; /* printf("args 0: %s\nargs 1: %s\n", newargs[0], newargs[1]); */ if (is_gui) { /* Use exec, we don't need to wait for the GUI to finish */ - execv(newargs[0], (const char * const *)(newargs)); + execv(python, (const char * const *)(newargs)); return fail("Could not exec %s", python); /* shouldn't get here! */ } /* We *do* need to wait for a CLI to finish, so use spawn */ - return spawnv(P_WAIT, newargs[0], (const char * const *)(newargs)); + return spawnv(P_WAIT, python, (const char * const *)(newargs)); } diff --git a/setuptools/cli.exe b/setuptools/cli.exe index 4da0b584..fc833396 100755 Binary files a/setuptools/cli.exe and b/setuptools/cli.exe differ diff --git a/setuptools/gui.exe b/setuptools/gui.exe index 056f554f..63ff35f4 100755 Binary files a/setuptools/gui.exe and b/setuptools/gui.exe differ -- cgit v1.2.3