{
char * p;
int extra_arg_space = 0;
+ int run_command_dot_com;
progname = getenv ("COMSPEC");
if (!progname)
if (progname == NULL || strchr (progname, '\\') == NULL)
fail ("error: the program %s could not be found.\n", getenv ("COMSPEC"));
+ /* Need to set environment size when running command.com. */
+ run_command_dot_com =
+ (stricmp (strrchr (progname, '\\'), "command.com") == 0);
+
/* Work out how much extra space is required for
pass_through_args. */
for (argv = pass_through_args; *argv != NULL; ++argv)
for (argv = pass_through_args; *argv != NULL; ++argv)
p += wsprintf (p, " %s", *argv);
- if (GetVersion () & 0x80000000)
- /* Set environment size to something reasonable on Windows 95. */
+ if (run_command_dot_com)
wsprintf(p, " /e:%d /c %s", envsize, cmdline);
else
wsprintf(p, " /c %s", cmdline);
}
else
{
- if (GetVersion () & 0x80000000)
+ if (run_command_dot_com)
{
/* Provide dir arg expected by command.com when first
- started interactively (the "command search path").
- cmd.exe does not require it, but accepts it silently -
- presumably other DOS compatible shells do the same. To
+ started interactively (the "command search path"). To
avoid potential problems with spaces in command dir
(which cannot be quoted - command.com doesn't like it),
we always use the 8.3 form. */
*(++p) = '\0';
}
else
- /* Dir arg not needed on NT. */
path[0] = '\0';
cmdline = p = alloca (strlen (progname) + extra_arg_space +
for (argv = pass_through_args; *argv != NULL; ++argv)
p += wsprintf (p, " %s", *argv);
- if (GetVersion () & 0x80000000)
- /* Set environment size to something reasonable on Windows 95. */
+ if (run_command_dot_com)
wsprintf (p, " /e:%d", envsize);
}
}