Bug 570501 - g_win32_get_system_data_dirs uses invalid conversion of
authorTor Lillqvist <tml@novell.com>
Mon, 23 Feb 2009 09:52:48 +0000 (09:52 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Mon, 23 Feb 2009 09:52:48 +0000 (09:52 +0000)
2009-02-23  Tor Lillqvist  <tml@novell.com>

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
glib/gutils.c
glib/gutils.h

index 45d8847..f72d954 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2009-02-23  Tor Lillqvist  <tml@novell.com>
+
+       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  <mclasen@redhat.com>
 
        Bug 572151 – “it's” and “its” confused in docs and comments
index 4ce9654..858603b 100644 (file)
@@ -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);
index 1cd12c0..68a27ed 100644 (file)
@@ -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);