mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-09 12:25:48 +01:00
Merge branch 'darwin-rtld_local-fix' into 'main'
gmodule-dl: fix G_MODULE_BIND_LOCAL on Darwin See merge request GNOME/glib!4154
This commit is contained in:
commit
1b7336583c
@ -136,7 +136,7 @@ _g_module_open (const gchar *file_name,
|
|||||||
|
|
||||||
lock_dlerror ();
|
lock_dlerror ();
|
||||||
handle = dlopen (file_name,
|
handle = dlopen (file_name,
|
||||||
(bind_local ? 0 : RTLD_GLOBAL) | (bind_lazy ? RTLD_LAZY : RTLD_NOW));
|
(bind_local ? RTLD_LOCAL : RTLD_GLOBAL) | (bind_lazy ? RTLD_LAZY : RTLD_NOW));
|
||||||
if (!handle)
|
if (!handle)
|
||||||
{
|
{
|
||||||
const gchar *message = fetch_dlerror (TRUE);
|
const gchar *message = fetch_dlerror (TRUE);
|
||||||
|
@ -233,6 +233,42 @@ test_module_invalid_libtool_archive (void)
|
|||||||
g_free (la_filename);
|
g_free (la_filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_local_binding (void)
|
||||||
|
{
|
||||||
|
gchar *plugin = NULL;
|
||||||
|
GModule *module_plugin = NULL, *module_self = NULL;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
gboolean found_symbol = FALSE;
|
||||||
|
gpointer symbol = NULL;
|
||||||
|
|
||||||
|
g_test_summary ("Test that binding a library's symbols locally does not add them globally");
|
||||||
|
|
||||||
|
#if defined(G_PLATFORM_WIN32)
|
||||||
|
g_test_skip ("G_MODULE_BIND_LOCAL is not supported on Windows.");
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
plugin = g_test_build_filename (G_TEST_BUILT, MODULE_FILENAME_PREFIX "moduletestplugin_a_" MODULE_TYPE, NULL);
|
||||||
|
|
||||||
|
module_plugin = g_module_open_full (plugin, G_MODULE_BIND_LOCAL, &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_assert_nonnull (module_plugin);
|
||||||
|
|
||||||
|
module_self = g_module_open_full (NULL, 0, &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_assert_nonnull (module_self);
|
||||||
|
|
||||||
|
found_symbol = g_module_symbol (module_self, "gplugin_say_boo_func", &symbol);
|
||||||
|
g_assert_false (found_symbol);
|
||||||
|
g_assert_null (symbol);
|
||||||
|
|
||||||
|
g_module_close (module_self);
|
||||||
|
g_module_close (module_plugin);
|
||||||
|
g_free (plugin);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc, char *argv[])
|
main (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@ -240,6 +276,7 @@ main (int argc, char *argv[])
|
|||||||
|
|
||||||
g_test_add_func ("/module/basics", test_module_basics);
|
g_test_add_func ("/module/basics", test_module_basics);
|
||||||
g_test_add_func ("/module/invalid-libtool-archive", test_module_invalid_libtool_archive);
|
g_test_add_func ("/module/invalid-libtool-archive", test_module_invalid_libtool_archive);
|
||||||
|
g_test_add_func ("/module/local-binding", test_local_binding);
|
||||||
|
|
||||||
return g_test_run ();
|
return g_test_run ();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user