diff options
| author | Karl Heuer <kwzh@gnu.org> | 1994-06-03 04:50:17 +0000 |
|---|---|---|
| committer | Karl Heuer <kwzh@gnu.org> | 1994-06-03 04:50:17 +0000 |
| commit | 647c32eb3e9ee80bae70661113f51e030c58626c (patch) | |
| tree | 518656b8055b32217e8b7dd9355d47e090ea8969 | |
| parent | 6873cfa3939381670ee08dd890131bbe593db3c4 (diff) | |
| download | emacs-647c32eb3e9ee80bae70661113f51e030c58626c.tar.gz | |
(run_msdos_command): Make local copy of argv[2] on stack, not on heap.
(run_msdos_command): When changing argv[2] from using slashes to
using backslashes, only do so on the first white-space delimited part.
| -rw-r--r-- | src/msdos.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/msdos.c b/src/msdos.c index 154ee1501c5..fd9ae23efee 100644 --- a/src/msdos.c +++ b/src/msdos.c @@ -527,11 +527,20 @@ run_msdos_command (argv, dir, tempin, tempout) if (msshell) { saveargv1 = argv[1]; + saveargv2 = argv[2]; argv[1] = "/c"; if (argv[2]) { - saveargv2 = argv[2]; - unixtodos_filename (argv[2] = strdup (argv[2])); + 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++; } } @@ -578,11 +587,7 @@ run_msdos_command (argv, dir, tempin, tempout) if (msshell) { argv[1] = saveargv1; - if (argv[2]) - { - free (argv[2]); - argv[2] = saveargv2; - } + argv[2] = saveargv2; } return result; } |
