summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2001-08-27 06:37:48 (GMT)
committerTim Peters <tim.peters@gmail.com>2001-08-27 06:37:48 (GMT)
commit402d5985d8e4d1644943c63d507842649b472f1d (patch)
tree8b49524549fd9c41125c95e18fc68a489539d115 /Modules
parent7c47beb860fcea2029850f1036fe1be216aab78e (diff)
downloadcpython-402d5985d8e4d1644943c63d507842649b472f1d.zip
cpython-402d5985d8e4d1644943c63d507842649b472f1d.tar.gz
cpython-402d5985d8e4d1644943c63d507842649b472f1d.tar.bz2
SF patch [ #455137 ] Makes popen work with COMMAND.COM on WNT, from
Brian Quinlan.
Diffstat (limited to 'Modules')
-rw-r--r--Modules/posixmodule.c31
1 files changed, 22 insertions, 9 deletions
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 403bae1..c1ec84a 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -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;
}