mirror of https://github.com/python/cpython
SF patch [ #455137 ] Makes popen work with COMMAND.COM on WNT, from
Brian Quinlan.
This commit is contained in:
parent
7c47beb860
commit
402d5985d8
|
@ -317,6 +317,7 @@ Fran
|
||||||
John Popplewell
|
John Popplewell
|
||||||
Amrit Prem
|
Amrit Prem
|
||||||
Paul Prescod
|
Paul Prescod
|
||||||
|
Brian Quinlan
|
||||||
Eric Raymond
|
Eric Raymond
|
||||||
John Redford
|
John Redford
|
||||||
Terry Reedy
|
Terry Reedy
|
||||||
|
|
|
@ -15,6 +15,9 @@ Tests
|
||||||
|
|
||||||
Windows
|
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?
|
What's New in Python 2.2a2?
|
||||||
===========================
|
===========================
|
||||||
|
|
|
@ -2403,13 +2403,23 @@ _PyPopenCreateProcess(char *cmdstring,
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
if (i = GetEnvironmentVariable("COMSPEC",NULL,0)) {
|
if (i = GetEnvironmentVariable("COMSPEC",NULL,0)) {
|
||||||
|
char *comshell;
|
||||||
|
|
||||||
s1 = (char *)_alloca(i);
|
s1 = (char *)_alloca(i);
|
||||||
if (!(x = GetEnvironmentVariable("COMSPEC", s1, i)))
|
if (!(x = GetEnvironmentVariable("COMSPEC", s1, i)))
|
||||||
return x;
|
return x;
|
||||||
if (GetVersion() < 0x80000000) {
|
|
||||||
/*
|
/* Explicitly check if we are using COMMAND.COM. If we are
|
||||||
* NT/2000
|
* 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;
|
x = i + strlen(s3) + strlen(cmdstring) + 1;
|
||||||
s2 = (char *)_alloca(x);
|
s2 = (char *)_alloca(x);
|
||||||
ZeroMemory(s2, x);
|
ZeroMemory(s2, x);
|
||||||
|
@ -2417,8 +2427,8 @@ _PyPopenCreateProcess(char *cmdstring,
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/*
|
/*
|
||||||
* Oh gag, we're on Win9x. Use the workaround listed in
|
* Oh gag, we're on Win9x or using COMMAND.COM. Use
|
||||||
* KB: Q150956
|
* the workaround listed in KB: Q150956
|
||||||
*/
|
*/
|
||||||
char modulepath[_MAX_PATH];
|
char modulepath[_MAX_PATH];
|
||||||
struct stat statinfo;
|
struct stat statinfo;
|
||||||
|
@ -2454,7 +2464,8 @@ _PyPopenCreateProcess(char *cmdstring,
|
||||||
if (stat(modulepath, &statinfo) != 0) {
|
if (stat(modulepath, &statinfo) != 0) {
|
||||||
PyErr_Format(PyExc_RuntimeError,
|
PyErr_Format(PyExc_RuntimeError,
|
||||||
"Can not locate '%s' which is needed "
|
"Can not locate '%s' which is needed "
|
||||||
"for popen to work on this platform.",
|
"for popen to work with your shell "
|
||||||
|
"or platform.",
|
||||||
szConsoleSpawn);
|
szConsoleSpawn);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -2478,7 +2489,9 @@ _PyPopenCreateProcess(char *cmdstring,
|
||||||
/* Could be an else here to try cmd.exe / command.com in the path
|
/* Could be an else here to try cmd.exe / command.com in the path
|
||||||
Now we'll just error out.. */
|
Now we'll just error out.. */
|
||||||
else {
|
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;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2507,7 +2520,7 @@ _PyPopenCreateProcess(char *cmdstring,
|
||||||
*hProcess = piProcInfo.hProcess;
|
*hProcess = piProcInfo.hProcess;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
win32_error("CreateProcess", NULL);
|
win32_error("CreateProcess", s2);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue