1
0
Fork 0

(svn r17267) -Change [FS#3139]: mention the MD5 checksum of the original NewGRF in the "saveload failed horribly"-error message and make it more clear that the filename is of the current NewGRF

release/1.0
rubidium 2009-08-22 20:20:20 +00:00
parent f74b7d4ebd
commit 31a6ce5643
1 changed files with 24 additions and 4 deletions

View File

@ -18,6 +18,7 @@
#include "../train.h" #include "../train.h"
#include "../string_func.h" #include "../string_func.h"
#include "../gamelog.h" #include "../gamelog.h"
#include "../gamelog_internal.h"
#include "../network/network.h" #include "../network/network.h"
#include "../gfxinit.h" #include "../gfxinit.h"
#include "../functions.h" #include "../functions.h"
@ -274,6 +275,24 @@ static void ResetSignalHandlers()
signal(SIGFPE, _prev_fpe); signal(SIGFPE, _prev_fpe);
} }
/**
* Try to find the overridden GRF identifier of the given GRF.
* @param c the GRF to get the 'previous' version of.
* @return the GRF identifier or \a c if none could be found.
*/
static const GRFIdentifier *GetOverriddenIdentifier(const GRFConfig *c)
{
const LoggedAction *la = &_gamelog_action[_gamelog_actions - 1];
if (la->at != GLAT_LOAD) return c;
const LoggedChange *lcend = &la->change[la->changes];
for (const LoggedChange *lc = la->change; lc != lcend; lc++) {
if (lc->ct == GLCT_GRFCOMPAT && lc->grfcompat.grfid == c->grfid) return &lc->grfcompat;
}
return c;
}
/** /**
* Signal handler used to give a user a more useful report for crashes during * Signal handler used to give a user a more useful report for crashes during
* the savegame loading process; especially when there's problems with the * the savegame loading process; especially when there's problems with the
@ -299,16 +318,17 @@ static void CDECL HandleSavegameLoadCrash(int signum)
"savegame still crashes when all NewGRFs are found you should file a\n" "savegame still crashes when all NewGRFs are found you should file a\n"
"bug report. The missing NewGRFs are:\n"); "bug report. The missing NewGRFs are:\n");
for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) { for (const GRFConfig *c = _grfconfig; c != NULL; c = c->next) {
if (HasBit(c->flags, GCF_COMPATIBLE)) { if (HasBit(c->flags, GCF_COMPATIBLE)) {
const GRFIdentifier *replaced = GetOverriddenIdentifier(c);
char buf[40]; char buf[40];
md5sumToString(buf, lastof(buf), c->md5sum); md5sumToString(buf, lastof(buf), replaced->md5sum);
p += seprintf(p, lastof(buffer), "NewGRF %08X (%s) not found; checksum %s. Tried another NewGRF with same GRF ID\n", BSWAP32(c->grfid), c->filename, buf); p += seprintf(p, lastof(buffer), "NewGRF %08X (checksum %s) not found.\n Loaded NewGRF \"%s\" with same GRF ID instead.\n", BSWAP32(c->grfid), buf, c->filename);
} }
if (c->status == GCS_NOT_FOUND) { if (c->status == GCS_NOT_FOUND) {
char buf[40]; char buf[40];
md5sumToString(buf, lastof(buf), c->md5sum); md5sumToString(buf, lastof(buf), c->md5sum);
p += seprintf(p, lastof(buffer), "NewGRF %08X (%s) not found; checksum %s\n", BSWAP32(c->grfid), c->filename, buf); p += seprintf(p, lastof(buffer), "NewGRF %08X (%s) not found; checksum %s.\n", BSWAP32(c->grfid), c->filename, buf);
} }
} }