summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2021-12-16 17:57:56 +0800
committerPo Lu <luangruo@yahoo.com>2021-12-16 17:57:56 +0800
commit32b9b22f66b1afcc614d5f76860d56d5630c5bc4 (patch)
tree5ce3d153e5b772c00855a0798c212462d4ae2ff2 /src
parent81d2e846a801a45befe911146469a983af8438c6 (diff)
parent0b43e7a49327ce32c67648eb898551002f135ef5 (diff)
downloademacs-32b9b22f66b1afcc614d5f76860d56d5630c5bc4.tar.gz
Merge remote-tracking branch 'origin/master' into feature/pgtk
Diffstat (limited to 'src')
-rw-r--r--src/comp.c6
-rw-r--r--src/dynlib.c12
-rw-r--r--src/dynlib.h1
-rw-r--r--src/pdumper.c2
-rw-r--r--src/xwidget.c2
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;