Fixed crash in Configs panel, when loading a config

This commit is contained in:
Dimitris Panokostas 2017-09-28 21:54:11 +02:00
parent 994cdba374
commit b1428fd5bc

View file

@ -14,7 +14,7 @@
#include "gui.h" #include "gui.h"
#include "gui_handling.h" #include "gui_handling.h"
static char last_active_config[MAX_DPATH] = {'\0'}; static char last_active_config[MAX_PATH] = {'\0'};
static int ensureVisible = -1; static int ensureVisible = -1;
static gcn::Button* cmdLoad; static gcn::Button* cmdLoad;
@ -33,7 +33,7 @@ static gcn::ScrollArea* scrAreaConfigs;
bool LoadConfigByName(const char *name) bool LoadConfigByName(const char *name)
{ {
ConfigFileInfo* config = SearchConfigInList(name); ConfigFileInfo* config = SearchConfigInList(name);
if (config != nullptr) if (config != NULL)
{ {
if (emulating) { if (emulating) {
uae_restart(-1, config->FullPath); uae_restart(-1, config->FullPath);
@ -42,7 +42,7 @@ bool LoadConfigByName(const char* name)
txtName->setText(config->Name); txtName->setText(config->Name);
txtDesc->setText(config->Description); txtDesc->setText(config->Description);
target_cfgfile_load(&changed_prefs, config->FullPath, 0, 0); target_cfgfile_load(&changed_prefs, config->FullPath, 0, 0);
strcpy(last_active_config, config->Name); strncpy(last_active_config, config->Name, MAX_PATH);
DisableResume(); DisableResume();
RefreshAllPanels(); RefreshAllPanels();
} }
@ -79,18 +79,18 @@ public:
return configs[i]; return configs[i];
} }
void InitConfigsList() void InitConfigsList(void)
{ {
configs.clear(); configs.clear();
for (int i = 0; i<ConfigFilesList.size(); ++i) for (int i = 0; i<ConfigFilesList.size(); ++i)
{ {
char tmp[MAX_DPATH]; char tmp[MAX_DPATH];
strcpy(tmp, ConfigFilesList[i]->Name); strncpy(tmp, ConfigFilesList[i]->Name, MAX_DPATH);
if (strlen(ConfigFilesList[i]->Description) > 0) if (strlen(ConfigFilesList[i]->Description) > 0)
{ {
strncat(tmp, " (", sizeof tmp); strncat(tmp, " (", MAX_DPATH - 1);
strncat(tmp, ConfigFilesList[i]->Description, 255); strncat(tmp, ConfigFilesList[i]->Description, MAX_DPATH - 1);
strncat(tmp, ")", sizeof tmp); strncat(tmp, ")", MAX_DPATH - 1);
} }
configs.push_back(tmp); configs.push_back(tmp);
} }
@ -112,15 +112,15 @@ public:
// Load selected configuration // Load selected configuration
//----------------------------------------------- //-----------------------------------------------
i = lstConfigs->getSelected(); i = lstConfigs->getSelected();
//if (emulating) { if (emulating) {
// uae_restart(-1, ConfigFilesList[i]->FullPath); uae_restart(-1, ConfigFilesList[i]->FullPath);
//} }
//else { else {
target_cfgfile_load(&changed_prefs, ConfigFilesList[i]->FullPath, 0, 0); target_cfgfile_load(&changed_prefs, ConfigFilesList[i]->FullPath, 0, 0);
strncpy(last_active_config, ConfigFilesList[i]->Name, MAX_PATH); strncpy(last_active_config, ConfigFilesList[i]->Name, MAX_PATH);
DisableResume(); DisableResume();
RefreshAllPanels(); RefreshAllPanels();
//} }
} }
else if (actionEvent.getSource() == cmdSave) else if (actionEvent.getSource() == cmdSave)
{ {
@ -130,10 +130,10 @@ public:
char filename[MAX_DPATH]; char filename[MAX_DPATH];
if (!txtName->getText().empty()) if (!txtName->getText().empty())
{ {
fetch_configurationpath(filename, sizeof filename); fetch_configurationpath(filename, MAX_DPATH);
strncat(filename, txtName->getText().c_str(), sizeof filename); strncat(filename, txtName->getText().c_str(), MAX_DPATH - 1);
strncat(filename, ".uae", sizeof filename); strncat(filename, ".uae", MAX_DPATH);
strncpy(changed_prefs.description, txtDesc->getText().c_str(), sizeof changed_prefs.description); strncpy(changed_prefs.description, txtDesc->getText().c_str(), 256);
if (cfgfile_save(&changed_prefs, filename, 0)) if (cfgfile_save(&changed_prefs, filename, 0))
RefreshPanelConfig(); RefreshPanelConfig();
} }
@ -149,7 +149,7 @@ public:
//----------------------------------------------- //-----------------------------------------------
// Delete selected config // Delete selected config
//----------------------------------------------- //-----------------------------------------------
char msg[MAX_DPATH]; char msg[256];
i = lstConfigs->getSelected(); i = lstConfigs->getSelected();
if (i >= 0 && strcmp(ConfigFilesList[i]->Name, OPTIONSFILENAME)) if (i >= 0 && strcmp(ConfigFilesList[i]->Name, OPTIONSFILENAME))
{ {
@ -296,7 +296,7 @@ void InitPanelConfig(const struct _ConfigCategory& category)
category.panel->add(txtDesc, DISTANCE_BORDER + lblDesc->getWidth() + 8, txtName->getY() + txtName->getHeight() + DISTANCE_NEXT_Y); category.panel->add(txtDesc, DISTANCE_BORDER + lblDesc->getWidth() + 8, txtName->getY() + txtName->getHeight() + DISTANCE_NEXT_Y);
if (strlen(last_active_config) == 0) if (strlen(last_active_config) == 0)
strncpy(last_active_config, OPTIONSFILENAME, MAX_DPATH); strncpy(last_active_config, OPTIONSFILENAME, MAX_PATH);
txtName->setText(last_active_config); txtName->setText(last_active_config);
txtDesc->setText(changed_prefs.description); txtDesc->setText(changed_prefs.description);
ensureVisible = -1; ensureVisible = -1;