aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Zaretskii2015-08-23 18:01:35 +0300
committerEli Zaretskii2015-08-23 18:01:35 +0300
commit877e77e3ee5da0926b7528d602addeec51709da0 (patch)
tree83d52b917d14cda4995fea5318b0c8b32ebde522
parent6b1765e05db432007ede6f1af3744e71063a728b (diff)
downloademacs-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.c14
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)