@@ -219,24 +219,41 @@ static void hook_function_calls_in_executable(enum open_mode open_mode)
219219 void * handle ;
220220
221221 switch (open_mode ) {
222- case OPEN_MODE_DEFAULT :
223- CHK_PH (plthook_open (& plthook , NULL ));
224- break ;
225- case OPEN_MODE_BY_HANDLE :
222+ case OPEN_MODE_DEFAULT :
223+ {
224+ CHK_PH (plthook_open (& plthook , NULL ));
225+ break ;
226+ }
227+ case OPEN_MODE_BY_HANDLE :
228+ {
226229#ifdef WIN32
227- handle = GetModuleHandle (NULL );
230+ handle = GetModuleHandle (NULL );
228231#else
229- handle = dlopen (NULL , RTLD_LAZY );
232+ handle = dlopen (NULL , RTLD_LAZY );
230233#endif
231- assert (handle != NULL );
232- CHK_PH (plthook_open_by_handle (& plthook , handle ));
233- break ;
234- case OPEN_MODE_BY_ADDRESS :
235- CHK_PH (plthook_open_by_address (& plthook , & show_usage ));
236- break ;
234+ assert (handle != NULL );
235+ CHK_PH (plthook_open_by_handle (& plthook , handle ));
236+ break ;
237+ }
238+ case OPEN_MODE_BY_ADDRESS :
239+ {
240+ union {
241+ void (* fp )(const char * );
242+ void * ptr ;
243+ } cast = { & show_usage };
244+ CHK_PH (plthook_open_by_address (& plthook , cast .ptr ));
245+ break ;
246+ }
237247 }
238248 test_plthook_enum (plthook , funcs_called_by_main );
239- CHK_PH (plthook_replace (plthook , "strtod_cdecl" , (void * )strtod_cdecl_hook_func , (void * * )& strtod_cdecl_old_func ));
249+
250+ {
251+ union {
252+ double (* fp )(const char * , char * * );
253+ void * ptr ;
254+ } cast = { & strtod_cdecl_hook_func };
255+ CHK_PH (plthook_replace (plthook , "strtod_cdecl" , cast .ptr , (void * * )& strtod_cdecl_old_func ));
256+ }
240257#if defined _WIN32 || defined __CYGWIN__
241258 CHK_PH (plthook_replace (plthook , "strtod_stdcall" , (void * )strtod_stdcall_hook_func , (void * * )& strtod_stdcall_old_func ));
242259 CHK_PH (plthook_replace (plthook , "strtod_fastcall" , (void * )strtod_fastcall_hook_func , (void * * )& strtod_fastcall_old_func ));
@@ -287,7 +304,13 @@ static void hook_function_calls_in_library(enum open_mode open_mode)
287304 break ;
288305 }
289306 test_plthook_enum (plthook , funcs_called_by_libtest );
290- CHK_PH (plthook_replace (plthook , "strtod" , (void * )strtod_hook_func , NULL ));
307+ {
308+ union {
309+ double (* fp )(const char * , char * * );
310+ void * ptr ;
311+ } cast = { & strtod_hook_func };
312+ CHK_PH (plthook_replace (plthook , "strtod" , cast .ptr , NULL ));
313+ }
291314 plthook_close (plthook );
292315}
293316
0 commit comments