From 894d3e89bfeaa628e4d4a8a7f6707cc9582f4535 Mon Sep 17 00:00:00 2001 From: Christophe CURIS Date: Sat, 15 Nov 2014 19:40:35 +0100 Subject: [PATCH] wmaker: replaced dangerous function type conversion by argument conversion A type conversion applied to a function when used as a pointer is dangerous because the compiler may not be able to make sure arguments will be compatible across architectures, so it can crash the application. This is replaced by a function prototype matching exactly what is expected for the callback, and have the type conversion on the argument done inside the function so the compiler have complete liberty to generate any code needed to handle it safely. Signed-off-by: Christophe CURIS Signed-off-by: Carlos R. Mafra --- src/menu.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/menu.c b/src/menu.c index d23f3b3c..e573b395 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1543,8 +1543,10 @@ typedef struct _delay { int ox, oy; } _delay; -static void leaving(_delay * dl) +static void callback_leaving(void *user_param) { + _delay *dl = (_delay *) user_param; + wMenuMove(dl->menu, dl->ox, dl->oy, True); dl->menu->jump_back = NULL; dl->menu->menu->screen_ptr->flags.jump_back_pending = 0; @@ -1652,6 +1654,7 @@ void wMenuScroll(WMenu *menu) if (jump_back) { _delay *delayer; + if (!omenu->jump_back) { delayer = wmalloc(sizeof(_delay)); delayer->menu = omenu; @@ -1661,7 +1664,7 @@ void wMenuScroll(WMenu *menu) scr->flags.jump_back_pending = 1; } else delayer = omenu->jump_back; - WMAddTimerHandler(MENU_JUMP_BACK_DELAY, (WMCallback *) leaving, delayer); + WMAddTimerHandler(MENU_JUMP_BACK_DELAY, callback_leaving, delayer); } }