From 611b2214fdc807ee6bae14dcdc5130cfe2c25907 Mon Sep 17 00:00:00 2001 From: sje Date: Sat, 21 Jul 2007 03:01:08 +0000 Subject: fix mem leaks git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@299 4f64403b-2f21-0410-a795-97e2b3489a10 --- yapp/popwin.cpp | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) (limited to 'yapp/popwin.cpp') diff --git a/yapp/popwin.cpp b/yapp/popwin.cpp index 8ff4619..9d1ba45 100644 --- a/yapp/popwin.cpp +++ b/yapp/popwin.cpp @@ -139,7 +139,7 @@ void BroadcastMessage(UINT msg, WPARAM wParam, LPARAM lParam) { } struct PopupWindowData { - PopupData pd; + PopupData *pd; int new_x, new_y; bool is_round, av_is_round, mouse_in, close_on_leave; bool custom_col; @@ -155,7 +155,7 @@ struct PopupWindowData { LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { PopupWindowData *pwd = (PopupWindowData *)GetWindowLong(hwnd, GWL_USERDATA); PopupData *pd = 0; - if(pwd) pd = &pwd->pd; + if(pwd) pd = pwd->pd; switch(uMsg) { case WM_CREATE: @@ -163,13 +163,11 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa CREATESTRUCT *cs = (CREATESTRUCT *)lParam; pwd = (PopupWindowData *)malloc(sizeof(PopupWindowData)); pd = (PopupData *)cs->lpCreateParams; - pwd->pd = *pd; - if(pd->pwzTitle) pwd->pd.pwzTitle = wcsdup(pd->pwzTitle); - if(pd->pwzText) pwd->pd.pwzText = wcsdup(pd->pwzText); + pwd->pd = pd; pwd->hNotify = 0; - trimW(pwd->pd.pwzTitle); - trimW(pwd->pd.pwzText); + trimW(pwd->pd->pwzTitle); + trimW(pwd->pd->pwzText); pwd->is_round = options.round; pwd->av_is_round = options.av_round; @@ -525,8 +523,9 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa SendMessage(hwnd, PM_DIENOTIFY, 0, 0); - if(pd->pwzTitle) free(pd->pwzTitle); - if(pd->pwzText) free(pd->pwzText); + if(pd && pd->pwzTitle) free(pd->pwzTitle); + if(pd && pd->pwzText) free(pd->pwzText); + if(pd) free(pd); free(pwd); pwd = 0; pd = 0; SetWindowLong(hwnd, GWL_USERDATA, 0); @@ -670,19 +669,10 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa case PUM_CHANGE: { KillTimer(hwnd, ID_CLOSETIMER); - PopupData *pdn = (PopupData *)lParam; - if(pd->pwzTitle) { free(pd->pwzTitle); pd->pwzTitle = 0; } - if(pd->pwzText) { free(pd->pwzText); pd->pwzText = 0; } - - pwd->pd = *pdn; - if(pdn->flags & PDF_UNICODE) { - if(pdn->pwzTitle) pwd->pd.pwzTitle = wcsdup(pdn->pwzTitle); - if(pdn->pwzText) pwd->pd.pwzText = wcsdup(pdn->pwzText); - } else { - pwd->pd.flags |= PDF_UNICODE; - if(pd->pszTitle) pwd->pd.pwzTitle = a2w(pd->pszTitle); - if(pd->pszText) pwd->pd.pwzText = a2w(pd->pszText); - } + if(pd && pd->pwzTitle) free(pd->pwzTitle); + if(pd && pd->pwzText) free(pd->pwzText); + if(pd) free(pd); + pwd->pd = pd = (PopupData *)lParam; if(pd->timeout != -1) { if(pd->timeout == 0) { -- cgit v1.2.3