diff options
author | Po Lu <luangruo@yahoo.com> | 2021-12-16 17:57:56 +0800 |
---|---|---|
committer | Po Lu <luangruo@yahoo.com> | 2021-12-16 17:57:56 +0800 |
commit | 32b9b22f66b1afcc614d5f76860d56d5630c5bc4 (patch) | |
tree | 5ce3d153e5b772c00855a0798c212462d4ae2ff2 /src | |
parent | 81d2e846a801a45befe911146469a983af8438c6 (diff) | |
parent | 0b43e7a49327ce32c67648eb898551002f135ef5 (diff) | |
download | emacs-32b9b22f66b1afcc614d5f76860d56d5630c5bc4.tar.gz |
Merge remote-tracking branch 'origin/master' into feature/pgtk
Diffstat (limited to 'src')
-rw-r--r-- | src/comp.c | 6 | ||||
-rw-r--r-- | src/dynlib.c | 12 | ||||
-rw-r--r-- | src/dynlib.h | 1 | ||||
-rw-r--r-- | src/pdumper.c | 2 | ||||
-rw-r--r-- | src/xwidget.c | 2 |
5 files changed, 19 insertions, 4 deletions
diff --git a/src/comp.c b/src/comp.c index fb9b1a5a2d8..1fb384840cf 100644 --- a/src/comp.c +++ b/src/comp.c @@ -5278,16 +5278,16 @@ LATE_LOAD has to be non-nil when loading for deferred compilation. */) Fmake_temp_file_internal (filename, Qnil, build_string (".eln.tmp"), Qnil); if (NILP (Ffile_writable_p (tmp_filename))) - comp_u->handle = dynlib_open (SSDATA (encoded_filename)); + comp_u->handle = dynlib_open_for_eln (SSDATA (encoded_filename)); else { Frename_file (filename, tmp_filename, Qt); - comp_u->handle = dynlib_open (SSDATA (ENCODE_FILE (tmp_filename))); + comp_u->handle = dynlib_open_for_eln (SSDATA (ENCODE_FILE (tmp_filename))); Frename_file (tmp_filename, filename, Qnil); } } else - comp_u->handle = dynlib_open (SSDATA (encoded_filename)); + comp_u->handle = dynlib_open_for_eln (SSDATA (encoded_filename)); if (!comp_u->handle) xsignal2 (Qnative_lisp_load_failed, filename, diff --git a/src/dynlib.c b/src/dynlib.c index a8c88439615..e9a775f2d3c 100644 --- a/src/dynlib.c +++ b/src/dynlib.c @@ -104,6 +104,12 @@ dynlib_open (const char *dll_fname) return (dynlib_handle_ptr) hdll; } +dynlib_handle_ptr +dynlib_open_for_eln (const char *dll_fname) +{ + return dynlib_open (dll_fname); +} + void * dynlib_sym (dynlib_handle_ptr h, const char *sym) { @@ -270,6 +276,12 @@ dynlib_close (dynlib_handle_ptr h) dynlib_handle_ptr dynlib_open (const char *path) { + return dlopen (path, RTLD_LAZY | RTLD_GLOBAL); +} + +dynlib_handle_ptr +dynlib_open_for_eln (const char *path) +{ return dlopen (path, RTLD_LAZY); } diff --git a/src/dynlib.h b/src/dynlib.h index e20d8891a23..05ba7981226 100644 --- a/src/dynlib.h +++ b/src/dynlib.h @@ -24,6 +24,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ typedef void *dynlib_handle_ptr; dynlib_handle_ptr dynlib_open (const char *path); +dynlib_handle_ptr dynlib_open_for_eln (const char *path); int dynlib_close (dynlib_handle_ptr h); const char *dynlib_error (void); diff --git a/src/pdumper.c b/src/pdumper.c index 8f03684df5a..554b53020e0 100644 --- a/src/pdumper.c +++ b/src/pdumper.c @@ -5353,7 +5353,7 @@ dump_do_dump_relocation (const uintptr_t dump_base, their file names through expand-file-name and decode-coding-string. */ comp_u->file = eln_fname; - comp_u->handle = dynlib_open (SSDATA (eln_fname)); + comp_u->handle = dynlib_open_for_eln (SSDATA (eln_fname)); if (!comp_u->handle) { fprintf (stderr, "Error using execdir %s:\n", diff --git a/src/xwidget.c b/src/xwidget.c index bd64f483377..63ac0555dbb 100644 --- a/src/xwidget.c +++ b/src/xwidget.c @@ -149,6 +149,8 @@ fails. */) if (!EQ (type, Qwebkit)) error ("Bad xwidget type"); + Frequire (Qxwidget, Qnil, Qnil); + struct xwidget *xw = allocate_xwidget (); Lisp_Object val; xw->type = type; |