]> git.ipfire.org Git - thirdparty/libtool.git/commitdiff
Avoid mixing functions and data pointers in callback functions.
authorRalf Wildenhues <Ralf.Wildenhues@gmx.de>
Thu, 15 Nov 2007 19:36:41 +0000 (19:36 +0000)
committerRalf Wildenhues <Ralf.Wildenhues@gmx.de>
Thu, 15 Nov 2007 19:36:41 +0000 (19:36 +0000)
* libltdl/ltdl.c (file_worker_func): New type.
(lt_dlforeachfile): Instead of passing a function pointer as a
data pointer, pass a pointer to a file_worker_func pointer.
(foreach_callback_func): Adjust.
Backport from 2006-08-31 fix in HEAD.
Report by Maciej Bliziński <maciej.blizinski@gmail.com>.

ChangeLog
libltdl/ltdl.c

index af726ef0966431ea7a49d31673ff5d9421f24709..fb1a4cc11dcd6c4a7ff749603ef585fb3c1ec616 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2007-11-15  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
+
+       Avoid mixing functions and data pointers in callback functions.
+       * libltdl/ltdl.c (file_worker_func): New type.
+       (lt_dlforeachfile): Instead of passing a function pointer as a
+       data pointer, pass a pointer to a file_worker_func pointer.
+       (foreach_callback_func): Adjust.
+       Backport from 2006-08-31 fix in HEAD.
+       Report by Maciej Bliziński <maciej.blizinski@gmail.com>.
+
 2007-11-12  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
        Avoid warnings about conftest.dSYM directories on Mac OS X Leopard.
index 7519a4fdcd13663231372ddaf64f5ed6076d7506..b747b70be6257cbb5121ec0a13e3999fbff4d4a7 100644 (file)
@@ -2150,6 +2150,8 @@ static struct lt_user_dlloader presym = {
 /* The type of a function used at each iteration of  foreach_dirinpath().  */
 typedef int    foreach_callback_func LT_PARAMS((char *filename, lt_ptr data1,
                                                 lt_ptr data2));
+/* foreachfile_callback itself calls a function of this type: */
+typedef int    file_worker_func      LT_PARAMS((const char *filename, void *data));
 
 static int     foreach_dirinpath     LT_PARAMS((const char *search_path,
                                                 const char *base_name,
@@ -3734,8 +3736,7 @@ foreachfile_callback (dirname, data1, data2)
      lt_ptr data1;
      lt_ptr data2;
 {
-  int (*func) LT_PARAMS((const char *filename, lt_ptr data))
-       = (int (*) LT_PARAMS((const char *filename, lt_ptr data))) data1;
+  file_worker_func *func = *(file_worker_func **) data1;
 
   int    is_done  = 0;
   char   *argz     = 0;
@@ -3773,37 +3774,38 @@ lt_dlforeachfile (search_path, func, data)
      lt_ptr data;
 {
   int is_done = 0;
+  file_worker_func **fpptr = &func;
 
   if (search_path)
     {
       /* If a specific path was passed, search only the directories
         listed in it.  */
       is_done = foreach_dirinpath (search_path, 0,
-                                  foreachfile_callback, func, data);
+                                  foreachfile_callback, fpptr, data);
     }
   else
     {
       /* Otherwise search the default paths.  */
       is_done = foreach_dirinpath (user_search_path, 0,
-                                  foreachfile_callback, func, data);
+                                  foreachfile_callback, fpptr, data);
       if (!is_done)
        {
          is_done = foreach_dirinpath (getenv("LTDL_LIBRARY_PATH"), 0,
-                                      foreachfile_callback, func, data);
+                                      foreachfile_callback, fpptr, data);
        }
 
 #ifdef LTDL_SHLIBPATH_VAR
       if (!is_done)
        {
          is_done = foreach_dirinpath (getenv(LTDL_SHLIBPATH_VAR), 0,
-                                      foreachfile_callback, func, data);
+                                      foreachfile_callback, fpptr, data);
        }
 #endif
 #ifdef LTDL_SYSSEARCHPATH
       if (!is_done)
        {
          is_done = foreach_dirinpath (getenv(LTDL_SYSSEARCHPATH), 0,
-                                      foreachfile_callback, func, data);
+                                      foreachfile_callback, fpptr, data);
        }
 #endif
     }