2007-11-08 20:52:21 +01:00
|
|
|
$NetBSD: patch-ab,v 1.12 2007/11/08 19:52:21 drochner Exp $
|
2004-04-17 12:37:12 +02:00
|
|
|
|
|
|
|
http://bugzilla.gnome.org/show_bug.cgi?id=140329
|
|
|
|
|
2007-11-08 20:52:21 +01:00
|
|
|
--- gmodule/gmodule.c.orig 2007-10-16 07:44:43.000000000 +0200
|
Update to 2.6.3:
Overview of Changes from GLib 2.6.2 to GLib 2.6.3
=================================================
* GOption
- Fix formatting of --help output [Matthias Clasen]
- Accept -? [Matthias]
* Win32 bug fixes [Bill Skaggs, Tor Lillqvist,
J. Ali Harlow, Daniel Atallah]
* Other bug fixes [Ed Avis, Manish Singh, Matthias,
Nicolas Laurent, Kjartan Maraas, Bastian Nocera,
Suren A. Chilingaryan, Michael Banck]
* Documentation improvements [Matthias]
* New and updated translations (ar,el,et,fi,fr,gu,nb,no,uk,xh)
2005-03-02 16:38:08 +01:00
|
|
|
+++ gmodule/gmodule.c
|
2007-11-08 20:52:21 +01:00
|
|
|
@@ -599,6 +599,31 @@ g_module_error (void)
|
2004-04-17 12:37:12 +02:00
|
|
|
return g_static_private_get (&module_error_private);
|
|
|
|
}
|
|
|
|
|
|
|
|
+static void
|
|
|
|
+g_module_symbol_aux (GModule *module,
|
|
|
|
+ const gchar *symbol_name,
|
|
|
|
+ gpointer *symbol)
|
|
|
|
+{
|
2007-11-08 20:52:21 +01:00
|
|
|
+ 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
|
|
|
|
+
|
2004-04-17 12:37:12 +02:00
|
|
|
+#ifdef G_MODULE_NEED_USCORE
|
|
|
|
+ {
|
|
|
|
+ gchar *name;
|
|
|
|
+
|
|
|
|
+ name = g_strconcat ("_", symbol_name, NULL);
|
2007-11-08 20:52:21 +01:00
|
|
|
+ *symbol = _g_module_symbol (hdl, name);
|
2004-04-17 12:37:12 +02:00
|
|
|
+ g_free (name);
|
|
|
|
+ }
|
|
|
|
+#else /* !G_MODULE_NEED_USCORE */
|
2007-11-08 20:52:21 +01:00
|
|
|
+ *symbol = _g_module_symbol (hdl, symbol_name);
|
2004-04-17 12:37:12 +02:00
|
|
|
+#endif /* !G_MODULE_NEED_USCORE */
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
gboolean
|
|
|
|
g_module_symbol (GModule *module,
|
|
|
|
const gchar *symbol_name,
|
2007-11-08 20:52:21 +01:00
|
|
|
@@ -616,17 +641,28 @@ g_module_symbol (GModule *module,
|
2004-04-17 12:37:12 +02:00
|
|
|
|
|
|
|
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)
|