From: Ralf Wildenhues Date: Thu, 15 Nov 2007 19:36:41 +0000 (+0000) Subject: Avoid mixing functions and data pointers in callback functions. X-Git-Tag: release-1-5-26~19 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=482aaae1a50a71adaae77455f83c66dba2da2df2;p=thirdparty%2Flibtool.git 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 . --- diff --git a/ChangeLog b/ChangeLog index af726ef09..fb1a4cc11 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2007-11-15 Ralf Wildenhues + + 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 . + 2007-11-12 Ralf Wildenhues Avoid warnings about conftest.dSYM directories on Mac OS X Leopard. diff --git a/libltdl/ltdl.c b/libltdl/ltdl.c index 7519a4fdc..b747b70be 100644 --- a/libltdl/ltdl.c +++ b/libltdl/ltdl.c @@ -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 }