+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.
/* 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,
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;
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
}