r53548 - in sandbox/branches/setuptools-0.6: launcher.c setuptools.txt setuptools/cli.exe setuptools/gui.exe setuptools/tests/win_script_wrapper.txt

Author: phillip.eby Date: Wed Jan 24 22:00:55 2007 New Revision: 53548 Modified: sandbox/branches/setuptools-0.6/launcher.c sandbox/branches/setuptools-0.6/setuptools.txt sandbox/branches/setuptools-0.6/setuptools/cli.exe sandbox/branches/setuptools-0.6/setuptools/gui.exe sandbox/branches/setuptools-0.6/setuptools/tests/win_script_wrapper.txt Log: Fix ``#!`` parsing problems in Windows ``.exe`` script wrappers, when there was whitespace inside a quoted argument or at the end of the ``#!`` line (backport from trunk) Modified: sandbox/branches/setuptools-0.6/launcher.c ============================================================================== --- sandbox/branches/setuptools-0.6/launcher.c (original) +++ sandbox/branches/setuptools-0.6/launcher.c Wed Jan 24 22:00:55 2007 @@ -129,6 +129,7 @@ char *output = cmdline; char c; int nb = 0; + int iq = 0; *argc = 0; result[0] = output; @@ -136,19 +137,20 @@ do { c = *cmdline++; - if (!c || isspace(c)) { + if (!c || (isspace(c) && !iq)) { while (nb) {*output++ = '\\'; nb--; } *output++ = 0; result[++*argc] = output; if (!c) return result; while (isspace(*cmdline)) cmdline++; /* skip leading spaces */ + if (!*cmdline) return result; /* avoid empty arg if trailing ws */ continue; } if (c == '\\') ++nb; /* count \'s */ else { if (c == '"') { - if (!(nb & 1)) c = 0; /* skip " unless odd # of \ */ + if (!(nb & 1)) { iq = !iq; c = 0; } /* skip " unless odd # of \ */ nb = nb >> 1; /* cut \'s in half */ } while (nb) {*output++ = '\\'; nb--; } @@ -160,8 +162,6 @@ - - int run(int argc, char **argv, int is_gui) { char python[256]; /* python executable's filename*/ Modified: sandbox/branches/setuptools-0.6/setuptools.txt ============================================================================== --- sandbox/branches/setuptools-0.6/setuptools.txt (original) +++ sandbox/branches/setuptools-0.6/setuptools.txt Wed Jan 24 22:00:55 2007 @@ -2606,6 +2606,10 @@ * Fix "eggsecutables" (such as setuptools' own egg) only being runnable with bash-compatible shells. + * Fix ``#!`` parsing problems in Windows ``.exe`` script wrappers, when there + was whitespace inside a quoted argument or at the end of the ``#!`` line + (a regression introduced in 0.6c4). + 0.6c5 * Fix uploaded ``bdist_rpm`` packages being described as ``bdist_egg`` packages under Python versions less than 2.5. Modified: sandbox/branches/setuptools-0.6/setuptools/cli.exe ============================================================================== Binary files. No diff available. Modified: sandbox/branches/setuptools-0.6/setuptools/gui.exe ============================================================================== Binary files. No diff available. Modified: sandbox/branches/setuptools-0.6/setuptools/tests/win_script_wrapper.txt ============================================================================== --- sandbox/branches/setuptools-0.6/setuptools/tests/win_script_wrapper.txt (original) +++ sandbox/branches/setuptools-0.6/setuptools/tests/win_script_wrapper.txt Wed Jan 24 22:00:55 2007 @@ -15,6 +15,7 @@ Let's create a simple script, foo-script.py: >>> import os, sys, tempfile + >>> from setuptools.command.easy_install import nt_quote_arg >>> sample_directory = tempfile.mkdtemp() >>> open(os.path.join(sample_directory, 'foo-script.py'), 'w').write( ... """#!%(python_exe)s @@ -25,7 +26,7 @@ ... print input ... if __debug__: ... print 'non-optimized' - ... """ % dict(python_exe=sys.executable)) + ... """ % dict(python_exe=nt_quote_arg(sys.executable))) Note that the script starts with a Unix-style '#!' line saying which Python executable to run. The wrapper will use this to find the @@ -46,8 +47,8 @@ the wrapper: >>> import os - >>> input, output = os.popen4(os.path.join(sample_directory, 'foo.exe') - ... + r' arg1 "arg 2" "arg \"2\\\"" "arg 4\\" "arg5 a\\b') + >>> input, output = os.popen4('"'+nt_quote_arg(os.path.join(sample_directory, 'foo.exe')) + ... + r' arg1 "arg 2" "arg \"2\\\"" "arg 4\\" "arg5 a\\b"') >>> input.write('hello\nworld\n') >>> input.close() >>> print output.read(), @@ -86,9 +87,9 @@ ... if __debug__: ... print 'non-optimized' ... sys.ps1 = '---' - ... """ % dict(python_exe=sys.executable)) + ... """ % dict(python_exe=nt_quote_arg(sys.executable))) - >>> input, output = os.popen4(os.path.join(sample_directory, 'foo.exe')) + >>> input, output = os.popen4(nt_quote_arg(os.path.join(sample_directory, 'foo.exe'))) >>> input.close() >>> print output.read(), \foo-script.py
participants (1)
-
phillip.eby