changeset 10008:8224a56fdd44 draft

(svn r14167) -Fix: items in some ini-groups got duplicated on save.
author rubidium <rubidium@openttd.org>
date Mon, 25 Aug 2008 15:15:41 +0000
parents 18cc449f6575
children efa28ce0a82e
files src/ini.cpp src/ini_type.h src/settings.cpp
diffstat 3 files changed, 10 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/src/ini.cpp
+++ b/src/ini.cpp
@@ -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
+++ b/src/ini_type.h
@@ -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
+++ b/src/settings.cpp
@@ -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);
 	}
 }