mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-28 13:12:10 +01:00
If a symbol is not in metadata->module, look for it in the global module,
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. svn path=/trunk/; revision=221
This commit is contained in:
parent
81f5d90cd5
commit
624ac67933
24
ginvoke.c
24
ginvoke.c
@ -165,14 +165,38 @@ g_function_info_invoke (GIFunctionInfo *info,
|
||||
|
||||
if (!g_module_symbol (g_base_info_get_metadata((GIBaseInfo *) info)->module,
|
||||
symbol, &func))
|
||||
{
|
||||
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);
|
||||
rtype = get_ffi_type (tinfo);
|
||||
|
Loading…
x
Reference in New Issue
Block a user