(svn r14167) -Fix: items in some ini-groups got duplicated on save.
authorrubidium
Mon, 25 Aug 2008 15:15:41 +0000
changeset 10008 fca6f9cf02ac
parent 10007 1905ac6855e5
child 10009 41d822dd3350
(svn r14167) -Fix: items in some ini-groups got duplicated on save.
src/ini.cpp
src/ini_type.h
src/settings.cpp
--- 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);
 	}
 }