mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-06 06:15:04 +00:00
(svn r15085) -Fix (r14164): Clearing a settings group did not delete old items nor reset the last_item pointer, causing lists to not be saved unless they started blank.
This commit is contained in:
parent
3cd6bf0ead
commit
7d70f0cd14
@ -77,6 +77,13 @@ IniItem *IniGroup::GetItem(const char *name, bool create)
|
|||||||
return new IniItem(this, name, len);
|
return new IniItem(this, name, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void IniGroup::Clear()
|
||||||
|
{
|
||||||
|
delete this->item;
|
||||||
|
this->item = NULL;
|
||||||
|
this->last_item = &this->item;
|
||||||
|
}
|
||||||
|
|
||||||
IniFile::IniFile(const char **list_group_names) : group(NULL), comment(NULL), list_group_names(list_group_names)
|
IniFile::IniFile(const char **list_group_names) : group(NULL), comment(NULL), list_group_names(list_group_names)
|
||||||
{
|
{
|
||||||
this->last_group = &this->group;
|
this->last_group = &this->group;
|
||||||
|
@ -64,6 +64,11 @@ struct IniGroup {
|
|||||||
* @return the requested item or NULL if not found.
|
* @return the requested item or NULL if not found.
|
||||||
*/
|
*/
|
||||||
IniItem *GetItem(const char *name, bool create);
|
IniItem *GetItem(const char *name, bool create);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear all items in the group
|
||||||
|
*/
|
||||||
|
void Clear();
|
||||||
};
|
};
|
||||||
|
|
||||||
/** The complete ini file. */
|
/** The complete ini file. */
|
||||||
|
@ -639,7 +639,7 @@ static void ini_save_setting_list(IniFile *ini, const char *grpname, char **list
|
|||||||
|
|
||||||
if (proc == NULL && list == NULL) return;
|
if (proc == NULL && list == NULL) return;
|
||||||
if (group == NULL) return;
|
if (group == NULL) return;
|
||||||
group->item = NULL;
|
group->Clear();
|
||||||
|
|
||||||
for (i = 0; i != len; i++) {
|
for (i = 0; i != len; i++) {
|
||||||
entry = (proc != NULL) ? proc(NULL, i) : list[i];
|
entry = (proc != NULL) ? proc(NULL, i) : list[i];
|
||||||
@ -1720,11 +1720,9 @@ static void NewsDisplaySaveConfig(IniFile *ini, const char *grpname)
|
|||||||
static void AISaveConfig(IniFile *ini, const char *grpname)
|
static void AISaveConfig(IniFile *ini, const char *grpname)
|
||||||
{
|
{
|
||||||
IniGroup *group = ini->GetGroup(grpname);
|
IniGroup *group = ini->GetGroup(grpname);
|
||||||
IniItem **item;
|
|
||||||
|
|
||||||
if (group == NULL) return;
|
if (group == NULL) return;
|
||||||
group->item = NULL;
|
group->Clear();
|
||||||
item = &group->item;
|
|
||||||
|
|
||||||
for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) {
|
for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) {
|
||||||
AIConfig *config = AIConfig::GetConfig(c, true);
|
AIConfig *config = AIConfig::GetConfig(c, true);
|
||||||
@ -1739,9 +1737,8 @@ static void AISaveConfig(IniFile *ini, const char *grpname)
|
|||||||
name = "none";
|
name = "none";
|
||||||
}
|
}
|
||||||
|
|
||||||
*item = new IniItem(group, name);
|
IniItem *item = new IniItem(group, name, strlen(name));
|
||||||
(*item)->value = strdup(value);
|
item->SetValue(value);
|
||||||
item = &(*item)->next;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user