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
34
ginvoke.c
34
ginvoke.c
@ -166,12 +166,36 @@ g_function_info_invoke (GIFunctionInfo *info,
|
|||||||
if (!g_module_symbol (g_base_info_get_metadata((GIBaseInfo *) info)->module,
|
if (!g_module_symbol (g_base_info_get_metadata((GIBaseInfo *) info)->module,
|
||||||
symbol, &func))
|
symbol, &func))
|
||||||
{
|
{
|
||||||
g_set_error (error,
|
GModule *entire_app;
|
||||||
G_INVOKE_ERROR,
|
|
||||||
G_INVOKE_ERROR_SYMBOL_NOT_FOUND,
|
|
||||||
"Could not locate %s: %s", symbol, g_module_error ());
|
|
||||||
|
|
||||||
return FALSE;
|
/*
|
||||||
|
* 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);
|
tinfo = g_callable_info_get_return_type ((GICallableInfo *)info);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user