summaryrefslogtreecommitdiff
path: root/src/emacs.c
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2019-06-24 20:06:34 +0300
committerEli Zaretskii <eliz@gnu.org>2019-06-24 20:06:34 +0300
commit9f5f5ae6386fe1ea9f31bd760d7ffd293d274502 (patch)
treeca27cef4db5fd9e02be339e8a8765b5c8dfe9342 /src/emacs.c
parent38502cd44d58a92f378b0e6915a5360f32f6f1ab (diff)
downloademacs-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.c26
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,