From 45a2dbd93bf48a36e056cc06b28e6204650d848d Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Thu, 8 Mar 2018 18:32:28 +0100 Subject: [PATCH] + fix: memory leak --- src/Styles.c | 56 ++++++++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/src/Styles.c b/src/Styles.c index c7624e725..0078bbe18 100644 --- a/src/Styles.c +++ b/src/Styles.c @@ -63,8 +63,6 @@ extern BOOL bUseOldStyleBraceMatching; #define INITIAL_BASE_FONT_SIZE (10) -static WCHAR* Style_StylesBackup[NUMLEXERS * AVG_NUM_OF_STYLES_PER_LEXER]; - KEYWORDLIST KeyWords_NULL = { "", "", "", "", "", "", "", "", "" }; @@ -5689,7 +5687,7 @@ void Style_AddLexerToListView(HWND hwnd,PEDITLEXER plex) // // Style_ConfigDlgProc() // -INT_PTR CALLBACK Style_ConfigDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam) +INT_PTR CALLBACK Style_CustomizeSchemesDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam) { static HWND hwndTV; @@ -5701,9 +5699,10 @@ INT_PTR CALLBACK Style_ConfigDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lP static HBRUSH hbrBack; static BOOL bIsStyleSelected = FALSE; + static WCHAR* Style_StylesBackup[NUMLEXERS * AVG_NUM_OF_STYLES_PER_LEXER]; + switch(umsg) { - case WM_INITDIALOG: { SHFILEINFO shfi; @@ -5715,7 +5714,8 @@ INT_PTR CALLBACK Style_ConfigDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lP Style_StylesBackup[cnt++] = StrDup(g_pLexArray[iLexer]->szExtensions); int i = 0; while (g_pLexArray[iLexer]->Styles[i].iStyle != -1) { - Style_StylesBackup[cnt++] = StrDup(g_pLexArray[iLexer]->Styles[i++].szValue); + Style_StylesBackup[cnt++] = StrDup(g_pLexArray[iLexer]->Styles[i].szValue); + ++i; } } @@ -5778,21 +5778,31 @@ INT_PTR CALLBACK Style_ConfigDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lP } return TRUE; - case WM_DESTROY: { - // Apply new (or previous) Styles - Style_SetLexer(g_hwndEdit, g_pLexCurrent); - + DeleteBitmapButton(hwnd, IDC_STYLEFORE); + DeleteBitmapButton(hwnd, IDC_STYLEBACK); + DeleteBitmapButton(hwnd, IDC_PREVSTYLE); + DeleteBitmapButton(hwnd, IDC_NEXTSTYLE); // free old backup - for (int i = 0; i < COUNTOF(Style_StylesBackup); ++i) { - if (Style_StylesBackup[i]) - LocalFree(Style_StylesBackup[i]); + int cnt = 0; + for (int iLexer = 0; iLexer < COUNTOF(g_pLexArray); ++iLexer) { + if (Style_StylesBackup[cnt]) { + LocalFree(Style_StylesBackup[cnt]); + Style_StylesBackup[cnt++] = NULL; + } + int i = 0; + while (g_pLexArray[iLexer]->Styles[i].iStyle != -1) { + if (Style_StylesBackup[cnt]) { + LocalFree(Style_StylesBackup[cnt]); + Style_StylesBackup[cnt++] = NULL; + } + ++i; + } } } return FALSE; - #define APPLY_DIALOG_ITEM_TEXT { \ BOOL bChgNfy = FALSE; \ WCHAR szBuf[max(BUFSIZE_STYLE_VALUE, BUFZIZE_STYLE_EXTENTIONS)]; \ @@ -6169,17 +6179,14 @@ INT_PTR CALLBACK Style_ConfigDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lP MsgBox(MBWARN, IDS_SETTINGSNOTSAVED); g_fWarnedNoIniFile = TRUE; } - DeleteBitmapButton(hwnd, IDC_STYLEFORE); - DeleteBitmapButton(hwnd, IDC_STYLEBACK); - DeleteBitmapButton(hwnd, IDC_PREVSTYLE); - DeleteBitmapButton(hwnd, IDC_NEXTSTYLE); //EndDialog(hwnd,IDOK); DestroyWindow(hwnd); break; case IDCANCEL: - if (fDragging) + if (fDragging) { SendMessage(hwnd, WM_CANCELMODE, 0, 0); + } else { // Restore Styles int cnt = 0; @@ -6191,13 +6198,10 @@ INT_PTR CALLBACK Style_ConfigDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lP ++i; } } + Style_SetLexer(g_hwndEdit, g_pLexCurrent); + //EndDialog(hwnd,IDCANCEL); + DestroyWindow(hwnd); } - DeleteBitmapButton(hwnd, IDC_STYLEFORE); - DeleteBitmapButton(hwnd, IDC_STYLEBACK); - DeleteBitmapButton(hwnd, IDC_PREVSTYLE); - DeleteBitmapButton(hwnd, IDC_NEXTSTYLE); - //EndDialog(hwnd,IDCANCEL); - DestroyWindow(hwnd); break; } // switch() } // WM_COMMAND @@ -6216,8 +6220,8 @@ HWND Style_CustomizeSchemesDlg(HWND hwnd) HWND hDlg = CreateThemedDialogParam(g_hInstance, MAKEINTRESOURCE(IDD_STYLECONFIG), GetParent(hwnd), - Style_ConfigDlgProc, - (LPARAM)&Style_StylesBackup); + Style_CustomizeSchemesDlgProc, + (LPARAM)NULL); ShowWindow(hDlg, SW_SHOW); return hDlg; }