# HG changeset patch # User Darkvater # Date 2007-02-22 16:16:44 # Node ID 580a9fc2a546c86ac8cd9d7f9543641d43bedf99 # Parent d013f802c577c60bf6b3ec7c59e8fd7f29f95555 (svn r8844) -Revert partly (r8820, r8806): Change AppendToGRFConfigList to add the allocated GRFConfig to its list and not copy it. diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -178,13 +178,13 @@ void AppendStaticGRFConfigs(GRFConfig ** } /** 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(1); + SlObject(c, _grfconfig_desc); + AppendToGRFConfigList(&_grfconfig, c); } /* Append static NewGRF configuration */ diff --git a/src/newgrf_config.h b/src/newgrf_config.h --- a/src/newgrf_config.h +++ b/src/newgrf_config.h @@ -50,7 +50,7 @@ const GRFConfig *FindGRFConfig(uint32 gr 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 --- a/src/oldloader.cpp +++ b/src/oldloader.cpp @@ -1367,18 +1367,16 @@ static bool LoadTTDPatchExtraChunks(Load 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(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; };