diff options
| author | Eli Zaretskii | 2015-08-23 18:01:35 +0300 |
|---|---|---|
| committer | Eli Zaretskii | 2015-08-23 18:01:35 +0300 |
| commit | 877e77e3ee5da0926b7528d602addeec51709da0 (patch) | |
| tree | 83d52b917d14cda4995fea5318b0c8b32ebde522 | |
| parent | 6b1765e05db432007ede6f1af3744e71063a728b (diff) | |
| download | emacs-877e77e3ee5da0926b7528d602addeec51709da0.tar.gz emacs-877e77e3ee5da0926b7528d602addeec51709da0.zip | |
Support exec-directory with non-ASCII characters on Windows
* src/w32proc.c (sys_spawnve): Make sure exec-directory is encoded
in the system's ANSI codepage, when it is used for invoking
cmdproxy.
| -rw-r--r-- | src/w32proc.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/w32proc.c b/src/w32proc.c index d861edeb78b..3aa80302b95 100644 --- a/src/w32proc.c +++ b/src/w32proc.c | |||
| @@ -1813,13 +1813,21 @@ sys_spawnve (int mode, char *cmdname, char **argv, char **envp) | |||
| 1813 | 1813 | ||
| 1814 | cmdname = alloca (MAX_PATH); | 1814 | cmdname = alloca (MAX_PATH); |
| 1815 | if (egetenv ("CMDPROXY")) | 1815 | if (egetenv ("CMDPROXY")) |
| 1816 | strcpy (cmdname, egetenv ("CMDPROXY")); | 1816 | { |
| 1817 | /* Implementation note: since process-environment, where | ||
| 1818 | 'egetenv' looks, is encoded in the system codepage, we | ||
| 1819 | don't need to encode the cmdproxy file name if we get it | ||
| 1820 | from the environment. */ | ||
| 1821 | strcpy (cmdname, egetenv ("CMDPROXY")); | ||
| 1822 | } | ||
| 1817 | else | 1823 | else |
| 1818 | { | 1824 | { |
| 1819 | char *q = lispstpcpy (cmdname, Vexec_directory); | 1825 | char *q = lispstpcpy (cmdname, |
| 1826 | /* exec-directory needs to be encoded. */ | ||
| 1827 | ansi_encode_filename (Vexec_directory)); | ||
| 1820 | /* If we are run from the source tree, use cmdproxy.exe from | 1828 | /* If we are run from the source tree, use cmdproxy.exe from |
| 1821 | the same source tree. */ | 1829 | the same source tree. */ |
| 1822 | for (p = q - 2; p > cmdname; p--) | 1830 | for (p = q - 2; p > cmdname; p = CharPrevA (cmdname, p)) |
| 1823 | if (*p == '/') | 1831 | if (*p == '/') |
| 1824 | break; | 1832 | break; |
| 1825 | if (*p == '/' && xstrcasecmp (p, "/lib-src/") == 0) | 1833 | if (*p == '/' && xstrcasecmp (p, "/lib-src/") == 0) |