aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii <[email protected]>2000-07-31 06:24:21 +0000
committerEli Zaretskii <[email protected]>2000-07-31 06:24:21 +0000
commit74c07fafcf70857973e6ea82f249e3e7bc2827e4 (patch)
tree0ce85e66a5d5c316cd0caf5957d5781674cec6d5 /src
parent261196242e151ff82c9473d1543f3bb1e931338d (diff)
(run_msdos_command): Save and restore the master
environment, for the case that child_setup signals an error. When mirroring slashes in DOS shell commands, don't fail if argv[2] has embedded blanks.
Diffstat (limited to 'src')
-rw-r--r--src/msdos.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/msdos.c b/src/msdos.c
index 8ec5a21faf..64e6c3cd2b 100644
--- a/src/msdos.c
+++ b/src/msdos.c
@@ -4651,18 +4651,23 @@ run_msdos_command (argv, working_dir, tempin, tempout, temperr, envv)
saveargv1 = argv[1];
saveargv2 = argv[2];
argv[1] = "/c";
- if (argv[2])
+ /* We only need to mirror slashes if a DOS shell will be invoked
+ not via `system' (which does the mirroring itself). Yes, that
+ means DJGPP v1.x will lose here. */
+ if (argv[2] && argv[3])
{
char *p = alloca (strlen (argv[2]) + 1);
strcpy (argv[2] = p, saveargv2);
while (*p && isspace (*p))
p++;
- while (*p && !isspace (*p))
- if (*p == '/')
- *p++ = '\\';
- else
- p++;
+ while (*p)
+ {
+ if (*p == '/')
+ *p++ = '\\';
+ else
+ p++;
+ }
}
}
@@ -4703,6 +4708,7 @@ run_msdos_command (argv, working_dir, tempin, tempout, temperr, envv)
if (*cmnd)
{
extern char **environ;
+ char **save_env = environ;
int save_system_flags = __system_flags;
/* Request the most powerful version of `system'. We need
@@ -4717,6 +4723,7 @@ run_msdos_command (argv, working_dir, tempin, tempout, temperr, envv)
environ = envv;
result = system (cmnd);
__system_flags = save_system_flags;
+ environ = save_env;
}
else
result = 0; /* emulate Unixy shell behavior with empty cmd line */