(svn r14167) -Fix: items in some ini-groups got duplicated on save.
--- a/src/ini.cpp Mon Aug 25 12:47:17 2008 +0000
+++ b/src/ini.cpp Mon Aug 25 15:15:41 2008 +0000
@@ -19,14 +19,6 @@
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 @@
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);
--- a/src/ini_type.h Mon Aug 25 12:47:17 2008 +0000
+++ b/src/ini_type.h Mon Aug 25 15:15:41 2008 +0000
@@ -26,14 +26,6 @@
*/
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();
--- a/src/settings.cpp Mon Aug 25 12:47:17 2008 +0000
+++ b/src/settings.cpp Mon Aug 25 15:15:41 2008 +0000
@@ -640,7 +640,7 @@
if (entry == NULL || *entry == '\0') continue;
- new IniItem(group, entry, "");
+ group->GetItem(entry, true)->SetValue("");
}
}
@@ -1687,7 +1687,7 @@
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 @@
};
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 @@
char params[512];
GRFBuildParamList(params, c, lastof(params));
- new IniItem(group, c->filename, params);
+ group->GetItem(c->filename, true)->SetValue(params);
}
}