diff options
| author | Eli Zaretskii <eliz@gnu.org> | 2019-06-24 20:06:34 +0300 |
|---|---|---|
| committer | Eli Zaretskii <eliz@gnu.org> | 2019-06-24 20:06:34 +0300 |
| commit | 9f5f5ae6386fe1ea9f31bd760d7ffd293d274502 (patch) | |
| tree | ca27cef4db5fd9e02be339e8a8765b5c8dfe9342 /src/emacs.c | |
| parent | 38502cd44d58a92f378b0e6915a5360f32f6f1ab (diff) | |
| download | emacs-9f5f5ae6386fe1ea9f31bd760d7ffd293d274502.tar.gz | |
Fix MS-Windows build as followup to pdumper executable lookup
* src/w32.c (w32_my_exename): New function.
* src/w32.h (w32_my_exename): Add prototype.
* src/emacs.c (load_pdump_find_executable) [WINDOWSNT]: Find
the actual file name of the program without looking along
PATH, by calling w32_my_exename.
* nt/mingw-cfg.site (ac_cv_func_canonicalize_file_name)
(ac_cv_func_realpath, gl_cv_func_realpath_works): Disable
testing.
* nt/gnulib-cfg.mk (OMIT_GNULIB_MODULE_canonicalize-lgpl): Set
to true.
Diffstat (limited to 'src/emacs.c')
| -rw-r--r-- | src/emacs.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/emacs.c b/src/emacs.c index a26eacbe786..1ddd10b8051 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -715,6 +715,24 @@ static enum pdumper_load_result load_pdump_find_executable (const char* argv0, char **exename) { enum pdumper_load_result result; +#ifdef WINDOWSNT + result = PDUMPER_LOAD_ERROR; + *exename = NULL; + char *prog_fname = w32_my_exename (); + if (prog_fname) + { + result = PDUMPER_LOAD_OOM; + /* Use xstrdup, so as to call our private implementation of + malloc, since the caller calls our free. */ + char *ret = xstrdup (prog_fname); + if (ret) + { + *exename = ret; + result = PDUMPER_LOAD_SUCCESS; + } + } + return result; +#else /* !WINDOWSNT */ char *candidate = NULL; /* If the executable name contains a slash, we have some kind of @@ -784,6 +802,7 @@ load_pdump_find_executable (const char* argv0, char **exename) out: free (candidate); return result; +#endif /* !WINDOWSNT */ } static enum pdumper_load_result @@ -848,10 +867,15 @@ load_pdump (int argc, char **argv) the dump in the hardcoded location. */ if (exename) { +#ifdef WINDOWSNT + real_exename = exename; + exename = NULL; +#else real_exename = realpath (exename, NULL); if (!real_exename) fatal ("could not resolve realpath of \"%s\": %s", exename, strerror (errno)); +#endif size_t real_exename_length = strlen (real_exename); if (strip_suffix) { @@ -920,7 +944,7 @@ load_pdump (int argc, char **argv) + strlen (suffix) + 1); #ifdef DOS_NT - argv0_len = strlen (argv0_base); + size_t argv0_len = strlen (argv0_base); if (argv0_len >= 4 && c_strcasecmp (argv0_base + argv0_len - 4, ".exe") == 0) sprintf (dump_file, "%s%c%.*s%s", path_exec, DIRECTORY_SEP, |
