diff options
author | Eli Zaretskii <eliz@gnu.org> | 2019-02-07 17:23:57 +0200 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2019-02-07 17:23:57 +0200 |
commit | 005d8346b8cc9ca7675890f085ce34c56ab2723a (patch) | |
tree | 05766cc0b2dcb5d4fd0ac13ad129f97af188d80f /src/emacs.c | |
parent | 3d6d8d795b593df3fa2132e23811ad1e94a58c05 (diff) | |
download | emacs-005d8346b8cc9ca7675890f085ce34c56ab2723a.tar.gz |
Avoid segfaults on MS-Windows in enexec'ed Emacs
* src/emacs.c (main) [WINDOWSNT]: Fix logic of using dynamic
heap in unexec case. (Bug#34277)
Diffstat (limited to 'src/emacs.c')
-rw-r--r-- | src/emacs.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/emacs.c b/src/emacs.c index 92773996184..c5163db95a7 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -914,17 +914,23 @@ main (int argc, char **argv) happens. This relies on the static heap being needed only in temacs and only if we are going to dump with unexec. */ bool use_dynamic_heap = false; - char *temacs_str = strstr (argv[0], "temacs"); - if (temacs - && temacs_str != NULL - && (temacs_str == argv[0] || IS_DIRECTORY_SEP (temacs_str[-1]))) + if (temacs) { - /* Note that gflags are set at this point only if we have been - called with the --temacs=METHOD option. We assume here that - temacs is always called that way, otherwise the functions - that rely on gflags, like will_dump_with_pdumper_p below, - will not do their job. */ - use_dynamic_heap = will_dump_with_pdumper_p (); + char *temacs_str = NULL, *p; + for (p = argv[0]; (p = strstr (p, "temacs")) != NULL; p++) + temacs_str = p; + if (temacs_str != NULL + && (temacs_str == argv[0] || IS_DIRECTORY_SEP (temacs_str[-1]))) + { + /* Note that gflags are set at this point only if we have been + called with the --temacs=METHOD option. We assume here that + temacs is always called that way, otherwise the functions + that rely on gflags, like will_dump_with_pdumper_p below, + will not do their job. */ + use_dynamic_heap = will_dump_with_pdumper_p (); + } + else + use_dynamic_heap = true; } else use_dynamic_heap = true; |