summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarkvater <darkvater@openttd.org>2007-02-22 16:16:44 +0000
committerDarkvater <darkvater@openttd.org>2007-02-22 16:16:44 +0000
commit31be3c6fac70752f97b81490b3aa0f0d3d6c0764 (patch)
tree193b4d1c17fae519d21ba6f62142a9f496fe834b
parentc8343206115a50afb27743937d6c477516cbfdb2 (diff)
downloadopenttd-31be3c6fac70752f97b81490b3aa0f0d3d6c0764.tar.xz
(svn r8844) -Revert partly (r8820, r8806): Change AppendToGRFConfigList to add the allocated GRFConfig to its list and not copy it.
-rw-r--r--src/newgrf_config.cpp20
-rw-r--r--src/newgrf_config.h2
-rw-r--r--src/oldloader.cpp12
3 files changed, 15 insertions, 19 deletions
diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp
index d6b910e05..70d5da9ec 100644
--- a/src/newgrf_config.cpp
+++ b/src/newgrf_config.cpp
@@ -178,13 +178,13 @@ void AppendStaticGRFConfigs(GRFConfig **dst)
}
/** Appends an element to a list of GRFs
- * @param dst the head of the list to add to
- * @param el the element that is being added (as a copy) */
-void AppendToGRFConfigList(GRFConfig **dst, const GRFConfig *el)
+ * @param dst the head of the list to add to */
+void AppendToGRFConfigList(GRFConfig **dst, GRFConfig *el)
{
GRFConfig **tail = dst;
while (*tail != NULL) tail = &(*tail)->next;
- CopyGRFConfigList(tail, el);
+ *tail = el;
+
RemoveDuplicatesFromGRFConfigList(*dst);
}
@@ -451,10 +451,9 @@ static const SaveLoad _grfconfig_desc[] = {
static void Save_NGRF(void)
{
- GRFConfig *c;
int index = 0;
- for (c = _grfconfig; c != NULL; c = c->next) {
+ for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) {
if (HASBIT(c->flags, GCF_STATIC)) continue;
SlSetArrayIndex(index++);
SlObject(c, _grfconfig_desc);
@@ -464,12 +463,11 @@ static void Save_NGRF(void)
static void Load_NGRF(void)
{
- GRFConfig c;
- memset(&c, 0, sizeof(GRFConfig));
-
+ ClearGRFConfigList(&_grfconfig);
while (SlIterateArray() != -1) {
- SlObject(&c, _grfconfig_desc);
- AppendToGRFConfigList(&_grfconfig, &c);
+ GRFConfig *c = CallocT<GRFConfig>(1);
+ SlObject(c, _grfconfig_desc);
+ AppendToGRFConfigList(&_grfconfig, c);
}
/* Append static NewGRF configuration */
diff --git a/src/newgrf_config.h b/src/newgrf_config.h
index e2f326215..f0bb773a4 100644
--- a/src/newgrf_config.h
+++ b/src/newgrf_config.h
@@ -50,7 +50,7 @@ const GRFConfig *FindGRFConfig(uint32 grfid, const uint8 *md5sum = NULL);
GRFConfig *GetGRFConfig(uint32 grfid);
GRFConfig **CopyGRFConfigList(GRFConfig **dst, const GRFConfig *src);
void AppendStaticGRFConfigs(GRFConfig **dst);
-void AppendToGRFConfigList(GRFConfig **dst, const GRFConfig *el);
+void AppendToGRFConfigList(GRFConfig **dst, GRFConfig *el);
void ClearGRFConfig(GRFConfig **config);
void ClearGRFConfigList(GRFConfig **config);
void ResetGRFConfig(bool defaults);
diff --git a/src/oldloader.cpp b/src/oldloader.cpp
index 82c7d8493..76b74620d 100644
--- a/src/oldloader.cpp
+++ b/src/oldloader.cpp
@@ -1367,18 +1367,16 @@ static bool LoadTTDPatchExtraChunks(LoadgameState *ls, int num)
ReadUint32(ls); ReadByte(ls); len -= 5;
ClearGRFConfigList(&_grfconfig);
- GRFConfig c;
- memset(&c, 0, sizeof(GRFConfig));
-
while (len != 0) {
uint32 grfid = ReadUint32(ls);
if (ReadByte(ls) == 1) {
- c.grfid = grfid;
- c.filename = "TTDP game, no information";
+ GRFConfig *c = CallocT<GRFConfig>(1);
+ c->grfid = grfid;
+ c->filename = strdup("TTDP game, no information");
- AppendToGRFConfigList(&_grfconfig, &c);
- DEBUG(oldloader, 3, "TTDPatch game using GRF file with GRFID %0X", BSWAP32(c.grfid));
+ AppendToGRFConfigList(&_grfconfig, c);
+ DEBUG(oldloader, 3, "TTDPatch game using GRF file with GRFID %0X", BSWAP32(c->grfid));
}
len -= 5;
};