summaryrefslogtreecommitdiff
path: root/src/callproc.c
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2000-07-31 06:29:29 +0000
committerEli Zaretskii <eliz@gnu.org>2000-07-31 06:29:29 +0000
commit31bab38661b4ae956cbe0a5881e541fc1cc16181 (patch)
tree1d574a1ab54b67e151293eed11449d9a0bfb21b3 /src/callproc.c
parent1b1748151e9574a29303a2ceea764ce7ed66c710 (diff)
downloademacs-31bab38661b4ae956cbe0a5881e541fc1cc16181.tar.gz
(child_setup) [MSDOS]: malloc pwd_var instead of
using alloca; free it after run_msdos_command returns
Diffstat (limited to 'src/callproc.c')
-rw-r--r--src/callproc.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/callproc.c b/src/callproc.c
index 16ae6ada73c..a79816b2f38 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -1072,7 +1072,14 @@ child_setup (in, out, err, new_argv, set_pgrp, current_dir)
register int i;
i = STRING_BYTES (XSTRING (current_dir));
+#ifdef MSDOS
+ /* MSDOS must have all environment variables malloc'ed, because
+ low-level libc functions that launch subsidiary processes rely
+ on that. */
+ pwd_var = (char *) xmalloc (i + 6);
+#else
pwd_var = (char *) alloca (i + 6);
+#endif
temp = pwd_var + 4;
bcopy ("PWD=", pwd_var, 4);
bcopy (XSTRING (current_dir)->data, temp, i);
@@ -1212,6 +1219,7 @@ child_setup (in, out, err, new_argv, set_pgrp, current_dir)
#ifdef MSDOS
pid = run_msdos_command (new_argv, pwd_var + 4, in, out, err, env);
+ free (pwd_var);
if (pid == -1)
/* An error occurred while trying to run the subprocess. */
report_file_error ("Spawning child process", Qnil);