gobject-introspection r221 - in trunk: . girepository
- From: hp svn gnome org
- To: svn-commits-list gnome org
- Subject: gobject-introspection r221 - in trunk: . girepository
- Date: Wed, 23 Apr 2008 02:24:58 +0100 (BST)
Author: hp
Date: Wed Apr 23 01:24:57 2008
New Revision: 221
URL: http://svn.gnome.org/viewvc/gobject-introspection?rev=221&view=rev
Log:
2008-04-22 Havoc Pennington <hp pobox com>
* girepository/ginvoke.c (g_function_info_invoke): If a symbol is
not in metadata->module, look for it in the global module, in case
some other object or the app itself provides the symbol.
Modified:
trunk/ChangeLog
trunk/girepository/ginvoke.c
Modified: trunk/girepository/ginvoke.c
==============================================================================
--- trunk/girepository/ginvoke.c (original)
+++ trunk/girepository/ginvoke.c Wed Apr 23 01:24:57 2008
@@ -166,12 +166,36 @@
if (!g_module_symbol (g_base_info_get_metadata((GIBaseInfo *) info)->module,
symbol, &func))
{
- g_set_error (error,
- G_INVOKE_ERROR,
- G_INVOKE_ERROR_SYMBOL_NOT_FOUND,
- "Could not locate %s: %s", symbol, g_module_error ());
-
- return FALSE;
+ GModule *entire_app;
+
+ /*
+ * We want to be able to add symbols to an app or an auxiliary
+ * library to fill in gaps in an introspected library. However,
+ * normally we would only look for symbols in the main library
+ * (metadata->module).
+ *
+ * A more elaborate solution is probably possible, but as a
+ * simple approach for now, if we fail to find a symbol we look
+ * for it in the global module.
+ *
+ * This would not be very efficient if it happened often, since
+ * we always do the failed lookup above first, but very few
+ * symbols should be outside of metadata->module so it doesn't
+ * matter.
+ */
+ entire_app = g_module_open (NULL, 0);
+ if (!g_module_symbol (entire_app, symbol, &func))
+ {
+ g_set_error (error,
+ G_INVOKE_ERROR,
+ G_INVOKE_ERROR_SYMBOL_NOT_FOUND,
+ "Could not locate %s: %s", symbol, g_module_error ());
+
+ g_module_close (entire_app);
+
+ return FALSE;
+ }
+ g_module_close (entire_app);
}
tinfo = g_callable_info_get_return_type ((GICallableInfo *)info);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]