summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2008-08-25 15:15:41 +0000
committerrubidium <rubidium@openttd.org>2008-08-25 15:15:41 +0000
commit621a9b647afce6a9d8172bea6c8f781f5151bb29 (patch)
treee0c81bcd849d7f96b671cd698a6d2c6331595c75
parent262ddecfc56b31e1b59457ecacc0267517088a3f (diff)
downloadopenttd-621a9b647afce6a9d8172bea6c8f781f5151bb29.tar.xz
(svn r14167) -Fix: items in some ini-groups got duplicated on save.
-rw-r--r--src/ini.cpp14
-rw-r--r--src/ini_type.h8
-rw-r--r--src/settings.cpp8
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);
}
}