pkgsrc/devel/glib2/patches/patch-ab

77 lines
2.2 KiB
Text
Raw Normal View History

$NetBSD: patch-ab,v 1.12 2007/11/08 19:52:21 drochner Exp $
http://bugzilla.gnome.org/show_bug.cgi?id=140329
--- gmodule/gmodule.c.orig 2007-10-16 07:44:43.000000000 +0200
+++ gmodule/gmodule.c
@@ -599,6 +599,31 @@ g_module_error (void)
return g_static_private_get (&module_error_private);
}
+static void
+g_module_symbol_aux (GModule *module,
+ const gchar *symbol_name,
+ gpointer *symbol)
+{
+ gpointer hdl = module->handle;
+#if defined (G_MODULE_BROKEN_DLOPEN_NULL) && defined(__NetBSD__) && defined(RTLD_DEFAULT)
+ /* use some special handle to access global namespace */
+ if (module == main_module)
+ hdl = RTLD_DEFAULT;
+#endif
+
+#ifdef G_MODULE_NEED_USCORE
+ {
+ gchar *name;
+
+ name = g_strconcat ("_", symbol_name, NULL);
+ *symbol = _g_module_symbol (hdl, name);
+ g_free (name);
+ }
+#else /* !G_MODULE_NEED_USCORE */
+ *symbol = _g_module_symbol (hdl, symbol_name);
+#endif /* !G_MODULE_NEED_USCORE */
+}
+
gboolean
g_module_symbol (GModule *module,
const gchar *symbol_name,
@@ -616,17 +641,28 @@ g_module_symbol (GModule *module,
g_static_rec_mutex_lock (&g_module_global_lock);
-#ifdef G_MODULE_NEED_USCORE
+#ifdef G_MODULE_BROKEN_DLOPEN_NULL
+ if (module == main_module)
{
- gchar *name;
-
- name = g_strconcat ("_", symbol_name, NULL);
- *symbol = _g_module_symbol (module->handle, name);
- g_free (name);
+ g_module_symbol_aux(module, symbol_name, symbol);
+ if (*symbol == NULL)
+ {
+ for (module = modules; module; module = module->next)
+ {
+ g_module_symbol_aux(module, symbol_name, symbol);
+ if (*symbol != NULL)
+ {
+ g_module_set_error (NULL);
+ break;
}
-#else /* !G_MODULE_NEED_USCORE */
- *symbol = _g_module_symbol (module->handle, symbol_name);
-#endif /* !G_MODULE_NEED_USCORE */
+ }
+ }
+ }
+ else
+ g_module_symbol_aux(module, symbol_name, symbol);
+#else /* !G_MODULE_BROKEN_DLOPEN_NULL */
+ g_module_symbol_aux(module, symbol_name, symbol);
+#endif /* G_MODULE_BROKEN_DLOPEN_NULL */
module_error = g_module_error ();
if (module_error)