From 739a81e08a3b71eaee1119622c06a418b1477a8e Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Mon, 23 Feb 2009 09:52:48 +0000 Subject: [PATCH] Bug 570501 - g_win32_get_system_data_dirs uses invalid conversion of 2009-02-23 Tor Lillqvist Bug 570501 - g_win32_get_system_data_dirs uses invalid conversion of function pointer to object pointer * glib/gutils.c (g_win32_get_system_data_dirs_for_module): Change the type of the function's parameter to be explicitly a function pointer. * glib/gutils.h (_g_win32_get_system_data_dirs): Modify declaration and the only caller, the inline _g_win32_get_system_data_dirs(), accordingly. Add comments pointing out these are internal GLib functions. svn path=/trunk/; revision=7899 --- ChangeLog | 14 ++++++++++++++ glib/gutils.c | 16 ++++++++-------- glib/gutils.h | 13 +++++++++---- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 45d88474..f72d9546 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2009-02-23 Tor Lillqvist + + Bug 570501 - g_win32_get_system_data_dirs uses invalid conversion + of function pointer to object pointer + + * glib/gutils.c (g_win32_get_system_data_dirs_for_module): Change + the type of the function's parameter to be explicitly a function + pointer. + + * glib/gutils.h (_g_win32_get_system_data_dirs): Modify + declaration and the only caller, the inline + _g_win32_get_system_data_dirs(), accordingly. Add comments + pointing out these are internal GLib functions. + 2009-02-22 Matthias Clasen Bug 572151 – “it's” and “its” confused in docs and comments diff --git a/glib/gutils.c b/glib/gutils.c index 4ce96549..858603b8 100644 --- a/glib/gutils.c +++ b/glib/gutils.c @@ -2578,7 +2578,7 @@ get_module_share_dir (gconstpointer address) } G_CONST_RETURN gchar * G_CONST_RETURN * -g_win32_get_system_data_dirs_for_module (gconstpointer address) +g_win32_get_system_data_dirs_for_module (void (*address_of_function)()) { GArray *data_dirs; HMODULE hmodule; @@ -2587,10 +2587,10 @@ g_win32_get_system_data_dirs_for_module (gconstpointer address) gchar *p; gchar *exe_root; - if (address) + if (address_of_function) { G_LOCK (g_utils_global); - hmodule = get_module_for_address (address); + hmodule = get_module_for_address (address_of_function); if (hmodule != NULL) { if (per_module_data_dirs == NULL) @@ -2628,9 +2628,9 @@ g_win32_get_system_data_dirs_for_module (gconstpointer address) * subdirectory of the installation directory for the package * our caller is a part of. * - * The address parameter, if non-NULL, points to a function in the - * calling module. Use that to determine that module's installation - * folder, and use its "share" subfolder. + * The address_of_function parameter, if non-NULL, points to a + * function in the calling module. Use that to determine that + * module's installation folder, and use its "share" subfolder. * * Additionally, also use the "share" subfolder of the installation * locations of GLib and the .exe file being run. @@ -2642,7 +2642,7 @@ g_win32_get_system_data_dirs_for_module (gconstpointer address) * function. */ - p = get_module_share_dir (address); + p = get_module_share_dir (address_of_function); if (p) g_array_append_val (data_dirs, p); @@ -2663,7 +2663,7 @@ g_win32_get_system_data_dirs_for_module (gconstpointer address) retval = (gchar **) g_array_free (data_dirs, FALSE); - if (address) + if (address_of_function) { if (hmodule != NULL) g_hash_table_insert (per_module_data_dirs, hmodule, retval); diff --git a/glib/gutils.h b/glib/gutils.h index 1cd12c01..68a27ed8 100644 --- a/glib/gutils.h +++ b/glib/gutils.h @@ -133,16 +133,21 @@ G_CONST_RETURN gchar* g_get_user_cache_dir (void); G_CONST_RETURN gchar* G_CONST_RETURN * g_get_system_data_dirs (void); #ifdef G_OS_WIN32 -G_CONST_RETURN gchar* G_CONST_RETURN * g_win32_get_system_data_dirs_for_module (gconstpointer address); +/* This functions is not part of the public GLib API */ +G_CONST_RETURN gchar* G_CONST_RETURN * g_win32_get_system_data_dirs_for_module (void (*address_of_function)()); #endif #if defined (G_OS_WIN32) && defined (G_CAN_INLINE) && !defined (__cplusplus) +/* This function is not part of the public GLib API either. Just call + * g_get_system_data_dirs() in your code, never mind that that is + * actually a macro and you will in fact call this inline function. + */ static inline G_CONST_RETURN gchar * G_CONST_RETURN * -g_win32_get_system_data_dirs (void) +_g_win32_get_system_data_dirs (void) { - return g_win32_get_system_data_dirs_for_module ((gconstpointer) &g_win32_get_system_data_dirs); + return g_win32_get_system_data_dirs_for_module ((void (*)()) &_g_win32_get_system_data_dirs); } -#define g_get_system_data_dirs g_win32_get_system_data_dirs +#define g_get_system_data_dirs _g_win32_get_system_data_dirs #endif G_CONST_RETURN gchar* G_CONST_RETURN * g_get_system_config_dirs (void); -- 2.34.1