Fix setup of coding-systems on MS-Windows

* src/emacs.c (main) [HAVE_PDUMPER] [WINDOWSNT]: Call
'w32_init_file_name_codepage' again after loading the pdumper
file.
* src/w32.c (w32_init_file_name_codepage) [HAVE_PDUMPER]:
Reinitialize additional variables.  (Bug#75207)
This commit is contained in:
Eli Zaretskii 2025-01-05 07:56:27 +02:00
parent 441788e06d
commit cc5cd4de93
2 changed files with 25 additions and 1 deletions

View file

@ -1419,7 +1419,18 @@ android_emacs_init (int argc, char **argv, char *dump_file)
#ifdef HAVE_PDUMPER
if (attempt_load_pdump)
initial_emacs_executable = load_pdump (argc, argv, dump_file);
{
initial_emacs_executable = load_pdump (argc, argv, dump_file);
#ifdef WINDOWSNT
/* Reinitialize the codepage for file names, needed to decode
non-ASCII file names during startup. This is needed because
loading the pdumper file above assigns to those variables values
from the dump stage, which might be incorrect, if dumping was done
on a different system. */
if (dumped_with_pdumper_p ())
w32_init_file_name_codepage ();
#endif
}
#else
ptrdiff_t bufsize;
initial_emacs_executable = find_emacs_executable (argv[0], &bufsize);

View file

@ -1685,6 +1685,19 @@ w32_init_file_name_codepage (void)
{
file_name_codepage = CP_ACP;
w32_ansi_code_page = CP_ACP;
#ifdef HAVE_PDUMPER
/* If we were dumped with pdumper, this function will be called after
loading the pdumper file, and needs to reset the following
variables that come from the dump stage, which could be on a
different system with different default codepages. Then, the
correct value of w32-ansi-code-page will be assigned by
globals_of_w32fns, which is called from 'main'. Until that call
happens, w32-ansi-code-page will have the value of CP_ACP, which
stands for the default ANSI codepage. The other variables will be
computed by codepage_for_filenames below. */
Vdefault_file_name_coding_system = Qnil;
Vfile_name_coding_system = Qnil;
#endif
}
/* Produce a Windows ANSI codepage suitable for encoding file names.