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:
Matthias Clasen 2006-12-13 15:41:22 +00:00 committed by Matthias Clasen
parent caecf2dda0
commit ea1512221b
5 changed files with 40 additions and 5 deletions

View File

@ -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.

View File

@ -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 ("&percnt;s: &percnt;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 ("&percnt;s: &percnt;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.

View File

@ -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

View File

@ -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;
} }

View File

@ -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. */