diff options
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); |