diff options
author | Eli Zaretskii <eliz@gnu.org> | 2000-07-31 06:29:29 +0000 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2000-07-31 06:29:29 +0000 |
commit | 31bab38661b4ae956cbe0a5881e541fc1cc16181 (patch) | |
tree | 1d574a1ab54b67e151293eed11449d9a0bfb21b3 /src/callproc.c | |
parent | 1b1748151e9574a29303a2ceea764ce7ed66c710 (diff) | |
download | emacs-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.c | 8 |
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); |