]> git.eshelyaron.com Git - emacs.git/commitdiff
(child_setup) [MSDOS]: malloc pwd_var instead of
authorEli Zaretskii <eliz@gnu.org>
Mon, 31 Jul 2000 06:33:58 +0000 (06:33 +0000)
committerEli Zaretskii <eliz@gnu.org>
Mon, 31 Jul 2000 06:33:58 +0000 (06:33 +0000)
using alloca; free it after run_msdos_command returns

src/ChangeLog
src/callproc.c

index 7b9bcbbb4f63a9e4557c80c5ca8827ca58993e13..228e5045b347bd621f3282a4159e255cab06383a 100644 (file)
@@ -1,3 +1,13 @@
+2000-07-31  Eli Zaretskii  <eliz@is.elta.co.il>
+
+       * msdos.c (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 when
+       argv[2] has embedded blanks.
+
+       * callproc.c (child_setup) [MSDOS]: malloc pwd_var instead of
+       using alloca; free it after run_msdos_command returns.
+
 2000-07-27  Dave Love  <fx@gnu.org>
 
        * s/irix6-5.h (IRIX_FORCE_32_BITS, LD_SWITCH_SYSTEM): Don't
index 16ae6ada73c8c052b56a2e8536957f27ef0f960f..a79816b2f38cdf6fae444973397f5aa2f3b7a608 100644 (file)
@@ -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);