summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/newgrf_config.cpp9
-rw-r--r--src/oldloader.cpp19
2 files changed, 16 insertions, 12 deletions
diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp
index 24d9727ff..583b4773b 100644
--- a/src/newgrf_config.cpp
+++ b/src/newgrf_config.cpp
@@ -465,12 +465,13 @@ static void Save_NGRF(void)
static void Load_NGRF(void)
{
- GRFConfig *c = CallocT<GRFConfig>(1);
+ GRFConfig c;
+ memset(&c, 0, sizeof(GRFConfig));
+
while (SlIterateArray() != -1) {
- SlObject(c, _grfconfig_desc);
- AppendToGRFConfigList(&_grfconfig, c);
+ SlObject(&c, _grfconfig_desc);
+ AppendToGRFConfigList(&_grfconfig, &c);
}
- free(c);
/* Append static NewGRF configuration */
AppendStaticGRFConfigs(&_grfconfig);
diff --git a/src/oldloader.cpp b/src/oldloader.cpp
index 75dc8e5db..82c7d8493 100644
--- a/src/oldloader.cpp
+++ b/src/oldloader.cpp
@@ -1359,38 +1359,41 @@ static bool LoadTTDPatchExtraChunks(LoadgameState *ls, int num)
uint32 len = ReadUint32(ls);
switch (id) {
- /* List of GRFIDs, used in the savegame
+ /* List of GRFIDs, used in the savegame. 0x8004 is the new ID
* They are saved in a 'GRFID:4 active:1' format, 5 bytes for each entry */
case 0x2:
case 0x8004: {
- /* Skip the first element: TTDP hack for the Action D special variables FFFF0000 01 */
+ /* Skip the first element: TTDP hack for the Action D special variables (FFFF0000 01) */
ReadUint32(ls); ReadByte(ls); len -= 5;
ClearGRFConfigList(&_grfconfig);
- GRFConfig *c = CallocT<GRFConfig>(1);
+ 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";
+ c.grfid = grfid;
+ c.filename = "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;
};
- free(c);
/* Append static NewGRF configuration */
AppendStaticGRFConfigs(&_grfconfig);
} break;
+
case 0x3: { /* TTDPatch version and configuration */
uint32 ttdpv = ReadUint32(ls);
DEBUG(oldloader, 3, "Game saved with TTDPatch version %d.%d.%d r%d", GB(ttdpv, 24, 8), GB(ttdpv, 20, 4), GB(ttdpv, 16, 4), GB(ttdpv, 0, 16));
len -= 4;
while (len-- != 0) ReadByte(ls); // skip the configuration
} break;
+
default:
DEBUG(oldloader, 4, "Skipping unknown extra chunk %X", id);
while (len-- != 0) ReadByte(ls);