aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii1998-04-21 11:10:56 +0000
committerEli Zaretskii1998-04-21 11:10:56 +0000
commite52f2f255e132396179cbe0de499df764b39d88f (patch)
treecd7b4fd8f05668a23580198c0b5cd4abb463a8e0 /src
parent793faff195b21d0cefc2d9e89b609d195add7af0 (diff)
downloademacs-e52f2f255e132396179cbe0de499df764b39d88f.tar.gz
emacs-e52f2f255e132396179cbe0de499df764b39d88f.zip
(run_msdos_command): Don't construct process
environment, it's already done in child_setup. (run_msdos_command): Add ENVV to argument list.
Diffstat (limited to 'src')
-rw-r--r--src/msdos.c62
1 files changed, 33 insertions, 29 deletions
diff --git a/src/msdos.c b/src/msdos.c
index fcbb4128b81..09bcba54639 100644
--- a/src/msdos.c
+++ b/src/msdos.c
@@ -3041,12 +3041,13 @@ dos_ttcooked ()
3041 file TEMPOUT and stderr to TEMPERR. */ 3041 file TEMPOUT and stderr to TEMPERR. */
3042 3042
3043int 3043int
3044run_msdos_command (argv, dir, tempin, tempout, temperr) 3044run_msdos_command (argv, working_dir, tempin, tempout, temperr, envv)
3045 unsigned char **argv; 3045 unsigned char **argv;
3046 Lisp_Object dir; 3046 const char *working_dir;
3047 int tempin, tempout, temperr; 3047 int tempin, tempout, temperr;
3048 char **envv;
3048{ 3049{
3049 char *saveargv1, *saveargv2, **envv, *lowcase_argv0, *pa, *pl; 3050 char *saveargv1, *saveargv2, *lowcase_argv0, *pa, *pl;
3050 char oldwd[MAXPATHLEN + 1]; /* Fixed size is safe on MSDOS. */ 3051 char oldwd[MAXPATHLEN + 1]; /* Fixed size is safe on MSDOS. */
3051 int msshell, result = -1; 3052 int msshell, result = -1;
3052 int inbak, outbak, errbak; 3053 int inbak, outbak, errbak;
@@ -3091,29 +3092,7 @@ run_msdos_command (argv, dir, tempin, tempout, temperr)
3091 } 3092 }
3092 } 3093 }
3093 3094
3094 /* Build the environment array. */ 3095 chdir (working_dir);
3095 {
3096 extern Lisp_Object Vprocess_environment;
3097 Lisp_Object tmp, lst;
3098 int i, len;
3099
3100 lst = Vprocess_environment;
3101 len = XFASTINT (Flength (lst));
3102
3103 envv = alloca ((len + 1) * sizeof (char *));
3104 for (i = 0; i < len; i++)
3105 {
3106 tmp = Fcar (lst);
3107 lst = Fcdr (lst);
3108 CHECK_STRING (tmp, 0);
3109 envv[i] = alloca (XSTRING (tmp)->size + 1);
3110 strcpy (envv[i], XSTRING (tmp)->data);
3111 }
3112 envv[len] = (char *) 0;
3113 }
3114
3115 if (STRINGP (dir))
3116 chdir (XSTRING (dir)->data);
3117 inbak = dup (0); 3096 inbak = dup (0);
3118 outbak = dup (1); 3097 outbak = dup (1);
3119 errbak = dup (2); 3098 errbak = dup (2);
@@ -3137,12 +3116,36 @@ run_msdos_command (argv, dir, tempin, tempout, temperr)
3137 cannot grok commands longer than 126 characters. In DJGPP v2 3116 cannot grok commands longer than 126 characters. In DJGPP v2
3138 and later, `system' is much smarter, so we'll call it instead. */ 3117 and later, `system' is much smarter, so we'll call it instead. */
3139 3118
3140 extern char **environ; 3119 const char *cmnd;
3141 environ = envv;
3142 3120
3143 /* A shell gets a single argument--its full command 3121 /* A shell gets a single argument--its full command
3144 line--whose original was saved in `saveargv2'. */ 3122 line--whose original was saved in `saveargv2'. */
3145 result = system (saveargv2); 3123
3124 /* Don't let them pass empty command lines to `system', since
3125 with some shells it will try to invoke an interactive shell,
3126 which will hang Emacs. */
3127 for (cmnd = saveargv2; *cmnd && isspace (*cmnd); cmnd++)
3128 ;
3129 if (*cmnd)
3130 {
3131 extern char **environ;
3132 int save_system_flags = __system_flags;
3133
3134 /* Request the most powerful version of `system'. We need
3135 all the help we can get to avoid calling stock DOS shells. */
3136 __system_flags = (__system_redirect
3137 | __system_use_shell
3138 | __system_allow_multiple_cmds
3139 | __system_allow_long_cmds
3140 | __system_handle_null_commands
3141 | __system_emulate_chdir);
3142
3143 environ = envv;
3144 result = system (cmnd);
3145 __system_flags = save_system_flags;
3146 }
3147 else
3148 result = 0; /* emulate Unixy shell behavior with empty cmd line */
3146 } 3149 }
3147 else 3150 else
3148 3151
@@ -3596,3 +3599,4 @@ nil means don't delete them until `list-processes' is run.");
3596} 3599}
3597 3600
3598#endif /* MSDOS */ 3601#endif /* MSDOS */
3602