From 877e77e3ee5da0926b7528d602addeec51709da0 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 23 Aug 2015 18:01:35 +0300 Subject: [PATCH] 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. --- src/w32proc.c | 14 +++++++++++--- 1 file 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) cmdname = alloca (MAX_PATH); if (egetenv ("CMDPROXY")) - strcpy (cmdname, egetenv ("CMDPROXY")); + { + /* Implementation note: since process-environment, where + 'egetenv' looks, is encoded in the system codepage, we + don't need to encode the cmdproxy file name if we get it + from the environment. */ + strcpy (cmdname, egetenv ("CMDPROXY")); + } else { - char *q = lispstpcpy (cmdname, Vexec_directory); + char *q = lispstpcpy (cmdname, + /* exec-directory needs to be encoded. */ + ansi_encode_filename (Vexec_directory)); /* If we are run from the source tree, use cmdproxy.exe from the same source tree. */ - for (p = q - 2; p > cmdname; p--) + for (p = q - 2; p > cmdname; p = CharPrevA (cmdname, p)) if (*p == '/') break; if (*p == '/' && xstrcasecmp (p, "/lib-src/") == 0) -- 2.39.5