changeset 30529:788ce16426e3

(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.
author Eli Zaretskii <eliz@gnu.org>
date Mon, 31 Jul 2000 06:24:21 +0000
parents 01b106cfeb80
children 861a1460eba6
files src/msdos.c
diffstat 1 files changed, 13 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/msdos.c	Sun Jul 30 14:03:38 2000 +0000
+++ b/src/msdos.c	Mon Jul 31 06:24:21 2000 +0000
@@ -4651,18 +4651,23 @@
       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 @@
       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 @@
 	  environ = envv;
 	  result = system (cmnd);
 	  __system_flags = save_system_flags;
+	  environ = save_env;
 	}
       else
 	result = 0;	/* emulate Unixy shell behavior with empty cmd line */