SF patch [ #455137 ] Makes popen work with COMMAND.COM on WNT, from

Brian Quinlan.
This commit is contained in:
Tim Peters 2001-08-27 06:37:48 +00:00
parent 7c47beb860
commit 402d5985d8
3 changed files with 26 additions and 9 deletions

View File

@ -317,6 +317,7 @@ Fran
John Popplewell
Amrit Prem
Paul Prescod
Brian Quinlan
Eric Raymond
John Redford
Terry Reedy

View File

@ -15,6 +15,9 @@ Tests
Windows
+ The w9xpopen hack is now used on Windows NT and 2000 too when COMPSPEC
points to command.com (patch from Brian Quinlan).
What's New in Python 2.2a2?
===========================

View File

@ -2403,13 +2403,23 @@ _PyPopenCreateProcess(char *cmdstring,
int x;
if (i = GetEnvironmentVariable("COMSPEC",NULL,0)) {
char *comshell;
s1 = (char *)_alloca(i);
if (!(x = GetEnvironmentVariable("COMSPEC", s1, i)))
return x;
if (GetVersion() < 0x80000000) {
/*
* NT/2000
*/
/* Explicitly check if we are using COMMAND.COM. If we are
* then use the w9xpopen hack.
*/
comshell = s1 + x;
while (comshell >= s1 && *comshell != '\\')
--comshell;
++comshell;
if (GetVersion() < 0x80000000 &&
_stricmp(comshell, "command.com") != 0) {
/* NT/2000 and not using command.com. */
x = i + strlen(s3) + strlen(cmdstring) + 1;
s2 = (char *)_alloca(x);
ZeroMemory(s2, x);
@ -2417,8 +2427,8 @@ _PyPopenCreateProcess(char *cmdstring,
}
else {
/*
* Oh gag, we're on Win9x. Use the workaround listed in
* KB: Q150956
* Oh gag, we're on Win9x or using COMMAND.COM. Use
* the workaround listed in KB: Q150956
*/
char modulepath[_MAX_PATH];
struct stat statinfo;
@ -2454,7 +2464,8 @@ _PyPopenCreateProcess(char *cmdstring,
if (stat(modulepath, &statinfo) != 0) {
PyErr_Format(PyExc_RuntimeError,
"Can not locate '%s' which is needed "
"for popen to work on this platform.",
"for popen to work with your shell "
"or platform.",
szConsoleSpawn);
return FALSE;
}
@ -2478,7 +2489,9 @@ _PyPopenCreateProcess(char *cmdstring,
/* Could be an else here to try cmd.exe / command.com in the path
Now we'll just error out.. */
else {
PyErr_SetString(PyExc_RuntimeError, "Can not locate a COMSPEC environment variable to use as the shell");
PyErr_SetString(PyExc_RuntimeError,
"Cannot locate a COMSPEC environment variable to "
"use as the shell");
return FALSE;
}
@ -2507,7 +2520,7 @@ _PyPopenCreateProcess(char *cmdstring,
*hProcess = piProcInfo.hProcess;
return TRUE;
}
win32_error("CreateProcess", NULL);
win32_error("CreateProcess", s2);
return FALSE;
}