From bf78f5c61903c55626ba3817155327cacdf3dcc8 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sat, 17 Sep 2016 17:51:01 +0000 Subject: crash fix git-svn-id: http://svn.miranda-ng.org/main/trunk@17311 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/StatusPlugins/StartupStatus/options.cpp | 39 +++++++------------------ 1 file changed, 11 insertions(+), 28 deletions(-) (limited to 'plugins/StatusPlugins') diff --git a/plugins/StatusPlugins/StartupStatus/options.cpp b/plugins/StatusPlugins/StartupStatus/options.cpp index d5a68121a0..87a969726b 100644 --- a/plugins/StatusPlugins/StartupStatus/options.cpp +++ b/plugins/StatusPlugins/StartupStatus/options.cpp @@ -488,45 +488,28 @@ static INT_PTR CALLBACK StartupStatusOptDlgProc(HWND hwndDlg,UINT msg,WPARAM wPa } /////////////////////////////////////////////////////////////////////////////// - -static int CountSettings(const char *, LPARAM lParam) -{ - *(int *)lParam++; - - return 0; -} - // for db cleanup -static int settingIndex; static int DeleteSetting(const char *szSetting, LPARAM lParam) { - char** settings = *(char ***)lParam; - settings[settingIndex] = (char*)malloc(mir_strlen(szSetting) + 1); - mir_strcpy(settings[settingIndex], szSetting); - settingIndex++; - + LIST *p = (LIST *)lParam; + p->insert(mir_strdup(szSetting)); return 0; } static int ClearDatabase(char* filter) { - settingIndex = 0; - - int settingCount = 0; - db_enum_settings(NULL, CountSettings, MODULENAME, &settingCount); - - char **settings = (char**)malloc(settingCount * sizeof(char*)); - db_enum_settings(NULL, DeleteSetting, MODULENAME, &settings); + LIST arSettings(10); + db_enum_settings(NULL, DeleteSetting, MODULENAME, &arSettings); - for (int i = 0; i < settingCount; i++) { - if ((filter == NULL) || (!strncmp(filter, settings[i], mir_strlen(filter)))) - db_unset(NULL, MODULENAME, settings[i]); - free(settings[i]); + for (int i = 0; i < arSettings.getCount(); i++) { + if ((filter == NULL) || (!strncmp(filter, arSettings[i], mir_strlen(filter)))) + db_unset(NULL, MODULENAME, arSettings[i]); + mir_free(arSettings[i]); } - free(settings); - // < v0.0.0.9 - if (filter == NULL) db_unset(NULL, "AutoAway", "Confirm"); + + if (filter == NULL) + db_unset(NULL, "AutoAway", "Confirm"); return 0; } -- cgit v1.2.3