diff options
author | rubidium <rubidium@openttd.org> | 2008-08-25 15:15:41 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2008-08-25 15:15:41 +0000 |
commit | 4548c5a26b39e93e9de31bc0f2e04edd0c52213a (patch) | |
tree | e0c81bcd849d7f96b671cd698a6d2c6331595c75 /src | |
parent | 53735906f8e636445328c189d7bfde5d259ad02d (diff) | |
download | openttd-4548c5a26b39e93e9de31bc0f2e04edd0c52213a.tar.xz |
(svn r14167) -Fix: items in some ini-groups got duplicated on save.
Diffstat (limited to 'src')
-rw-r--r-- | src/ini.cpp | 14 | ||||
-rw-r--r-- | src/ini_type.h | 8 | ||||
-rw-r--r-- | src/settings.cpp | 8 |
3 files changed, 10 insertions, 20 deletions
diff --git a/src/ini.cpp b/src/ini.cpp index c72addd65..7c1786a74 100644 --- a/src/ini.cpp +++ b/src/ini.cpp @@ -19,14 +19,6 @@ IniItem::IniItem(IniGroup *parent, const char *name, size_t len) : next(NULL), v parent->last_item = &this->next; } -IniItem::IniItem(IniGroup *parent, const char *name, const char *value) : next(NULL), comment(NULL) -{ - this->name = strdup(name); - this->value = strdup(value); - *parent->last_item = this; - parent->last_item = &this->next; -} - IniItem::~IniItem() { free(this->name); @@ -36,6 +28,12 @@ IniItem::~IniItem() delete this->next; } +void IniItem::SetValue(const char *value) +{ + free(this->value); + this->value = strdup(value); +} + IniGroup::IniGroup(IniFile *parent, const char *name, size_t len) : next(NULL), type(IGT_VARIABLES), item(NULL), comment(NULL) { if (len == 0) len = strlen(name); diff --git a/src/ini_type.h b/src/ini_type.h index 060af5d66..7bbc2ca20 100644 --- a/src/ini_type.h +++ b/src/ini_type.h @@ -26,14 +26,6 @@ struct IniItem { */ IniItem(struct IniGroup *parent, const char *name, size_t len = 0); - /** - * Construct a new in-memory item of an Ini file. - * @param parent the group we belong to - * @param name the name of the item - * @param value the value to immediatelly assign - */ - IniItem(IniGroup *parent, const char *name, const char *value); - /** Free everything we loaded. */ ~IniItem(); diff --git a/src/settings.cpp b/src/settings.cpp index effc9f8d9..b69767af2 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -640,7 +640,7 @@ static void ini_save_setting_list(IniFile *ini, const char *grpname, char **list if (entry == NULL || *entry == '\0') continue; - new IniItem(group, entry, ""); + group->GetItem(entry, true)->SetValue(""); } } @@ -1687,7 +1687,7 @@ static void NewsDisplaySaveConfig(IniFile *ini, const char *grpname) value = (v == ND_OFF ? "off" : (v == ND_SUMMARY ? "summarized" : "full")); - new IniItem(group, _news_type_data[i].name, value); + group->GetItem(_news_type_data[i].name, true)->SetValue(value); } } @@ -1708,7 +1708,7 @@ static void SaveVersionInConfig(IniFile *ini) }; for (uint i = 0; i < lengthof(versions); i++) { - new IniItem(group, versions[i][0], versions[i][1]); + group->GetItem(versions[i][0], true)->SetValue(versions[i][1]); } } @@ -1722,7 +1722,7 @@ static void GRFSaveConfig(IniFile *ini, const char *grpname, const GRFConfig *li char params[512]; GRFBuildParamList(params, c, lastof(params)); - new IniItem(group, c->filename, params); + group->GetItem(c->filename, true)->SetValue(params); } } |