mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-10 03:16:17 +01:00
Handle valid symbols that are NULL correctly. (#385388, Felix Kater)
2006-12-13 Matthias Clasen <mclasen@redhat.com> * gmodule.c (g_module_open): * gmodule-dl.c (_g_module_symbol): Handle valid symbols that are NULL correctly. (#385388, Felix Kater)
This commit is contained in:
parent
caecf2dda0
commit
ea1512221b
@ -1,3 +1,7 @@
|
|||||||
|
2006-12-13 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* glib/tmpl/modules.sgml: Point out that valid symbols may be NULL.
|
||||||
|
|
||||||
2006-10-08 Matthias Clasen <mclasen@redhat.com>
|
2006-10-08 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
* glib/tmpl/unicode.sgml: Document GUnicodeType.
|
* glib/tmpl/unicode.sgml: Document GUnicodeType.
|
||||||
|
@ -71,6 +71,22 @@ just_say_hello (const char *filename, GError **error)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (say_hello == NULL)
|
||||||
|
{
|
||||||
|
g_set_error (error, SAY_ERROR, SAY_ERROR_OPEN, "symbol say_hello is NULL");
|
||||||
|
if (!g_module_close (module))
|
||||||
|
g_warning ("%s: %s", filename, g_module_error (<!-- -->));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (say_hello == NULL)
|
||||||
|
{
|
||||||
|
g_set_error (error, SAY_ERROR, SAY_ERROR_OPEN, "symbol say_hello is NULL");
|
||||||
|
if (!g_module_close (module))
|
||||||
|
g_warning ("%s: %s", filename, g_module_error (<!-- -->));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* call our function in the module */
|
/* call our function in the module */
|
||||||
say_hello ("Hello world!");
|
say_hello ("Hello world!");
|
||||||
|
|
||||||
@ -177,6 +193,12 @@ not supported on all platforms.
|
|||||||
<para>
|
<para>
|
||||||
Gets a symbol pointer from a module.
|
Gets a symbol pointer from a module.
|
||||||
</para>
|
</para>
|
||||||
|
<para>
|
||||||
|
Note that a valid symbol can be %NULL.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Note that a valid symbol can be %NULL.
|
||||||
|
</para>
|
||||||
|
|
||||||
@module: a #GModule.
|
@module: a #GModule.
|
||||||
@symbol_name: the name of the symbol to find.
|
@symbol_name: the name of the symbol to find.
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
2006-12-13 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* gmodule.c (g_module_open):
|
||||||
|
* gmodule-dl.c (_g_module_symbol): Handle valid symbols
|
||||||
|
that are NULL correctly. (#385388, Felix Kater)
|
||||||
|
|
||||||
Mon Sep 11 14:58:56 2006 Tim Janik <timj@imendio.com>
|
Mon Sep 11 14:58:56 2006 Tim Janik <timj@imendio.com>
|
||||||
|
|
||||||
* gmodule.c: applied patch from Christian Persch to support
|
* gmodule.c: applied patch from Christian Persch to support
|
||||||
|
@ -96,7 +96,7 @@ _g_module_open (const gchar *file_name,
|
|||||||
gpointer handle;
|
gpointer handle;
|
||||||
|
|
||||||
handle = dlopen (file_name,
|
handle = dlopen (file_name,
|
||||||
(bind_local ? 0 : RTLD_GLOBAL) | (bind_lazy ? RTLD_LAZY : RTLD_NOW));
|
(bind_local ? 0 : RTLD_GLOBAL) | (bind_lazy ? RTLD_LAZY : RTLD_NOW));
|
||||||
if (!handle)
|
if (!handle)
|
||||||
g_module_set_error (fetch_dlerror (TRUE));
|
g_module_set_error (fetch_dlerror (TRUE));
|
||||||
|
|
||||||
@ -140,10 +140,13 @@ _g_module_symbol (gpointer handle,
|
|||||||
const gchar *symbol_name)
|
const gchar *symbol_name)
|
||||||
{
|
{
|
||||||
gpointer p;
|
gpointer p;
|
||||||
|
gchar *msg;
|
||||||
|
|
||||||
|
fetch_dlerror (FALSE);
|
||||||
p = dlsym (handle, symbol_name);
|
p = dlsym (handle, symbol_name);
|
||||||
if (!p)
|
msg = fetch_dlerror (FALSE);
|
||||||
g_module_set_error (fetch_dlerror (FALSE));
|
if (msg)
|
||||||
|
g_module_set_error (msg);
|
||||||
|
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
@ -477,7 +477,7 @@ g_module_open (const gchar *file_name,
|
|||||||
modules = module;
|
modules = module;
|
||||||
|
|
||||||
/* check initialization */
|
/* check initialization */
|
||||||
if (g_module_symbol (module, "g_module_check_init", (gpointer) &check_init))
|
if (g_module_symbol (module, "g_module_check_init", (gpointer) &check_init) && check_init != NULL)
|
||||||
check_failed = check_init (module);
|
check_failed = check_init (module);
|
||||||
|
|
||||||
/* we don't call unload() if the initialization check failed. */
|
/* we don't call unload() if the initialization check failed. */
|
||||||
|
Loading…
Reference in New Issue
Block a user