Logging: Log full file names of opened GRFs

pull/121/head
Jonathan G Rennison 5 years ago
parent fe9b024f1a
commit 6ada7c3c7f

@ -245,14 +245,14 @@ static void FioFreeHandle()
* @param filename Name of the file at the disk.
* @param subdir The sub directory to search this file in.
*/
void FioOpenFile(uint slot, const char *filename, Subdirectory subdir)
void FioOpenFile(uint slot, const char *filename, Subdirectory subdir, char **output_filename)
{
FILE *f;
#if defined(LIMITED_FDS)
FioFreeHandle();
#endif /* LIMITED_FDS */
f = FioFOpenFile(filename, "rb", subdir);
f = FioFOpenFile(filename, "rb", subdir, nullptr, output_filename);
if (f == nullptr) usererror("Cannot open file '%s'", filename);
long pos = ftell(f);
if (pos < 0) usererror("Cannot read file '%s'", filename);
@ -395,7 +395,7 @@ char *FioGetDirectory(char *buf, const char *last, Subdirectory subdir)
return buf;
}
static FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath sp, Subdirectory subdir, size_t *filesize)
static FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath sp, Subdirectory subdir, size_t *filesize, char **output_filename)
{
#if defined(_WIN32) && defined(UNICODE)
/* fopen is implemented as a define with ellipses for
@ -430,6 +430,9 @@ static FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath s
*filesize = ftell(f);
fseek(f, 0, SEEK_SET);
}
if (output_filename != nullptr) {
*output_filename = (f != nullptr) ? stredup(buf, lastof(buf)) : nullptr;
}
return f;
}
@ -460,7 +463,7 @@ FILE *FioFOpenFileTar(TarFileListEntry *entry, size_t *filesize)
* @param subdir Subdirectory to open.
* @return File handle of the opened file, or \c nullptr if the file is not available.
*/
FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, size_t *filesize)
FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, size_t *filesize, char **output_filename)
{
FILE *f = nullptr;
Searchpath sp;
@ -468,7 +471,7 @@ FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir,
assert(subdir < NUM_SUBDIRS || subdir == NO_DIRECTORY);
FOR_ALL_SEARCHPATHS(sp) {
f = FioFOpenFileSp(filename, mode, sp, subdir, filesize);
f = FioFOpenFileSp(filename, mode, sp, subdir, filesize, output_filename);
if (f != nullptr || subdir == NO_DIRECTORY) break;
}
@ -501,6 +504,9 @@ FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir,
TarFileList::iterator it = _tar_filelist[subdir].find(resolved_name);
if (it != _tar_filelist[subdir].end()) {
f = FioFOpenFileTar(&((*it).second), filesize);
if (output_filename != nullptr && f != nullptr) {
*output_filename = str_fmt("%s" PATHSEP "%s", ((*it).second).tar_filename, filename);
}
}
}
@ -509,15 +515,15 @@ FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir,
if (f == nullptr && subdir != NO_DIRECTORY) {
switch (subdir) {
case BASESET_DIR:
f = FioFOpenFile(filename, mode, OLD_GM_DIR, filesize);
f = FioFOpenFile(filename, mode, OLD_GM_DIR, filesize, output_filename);
if (f != nullptr) break;
FALLTHROUGH;
case NEWGRF_DIR:
f = FioFOpenFile(filename, mode, OLD_DATA_DIR, filesize);
f = FioFOpenFile(filename, mode, OLD_DATA_DIR, filesize, output_filename);
break;
default:
f = FioFOpenFile(filename, mode, NO_DIRECTORY, filesize);
f = FioFOpenFile(filename, mode, NO_DIRECTORY, filesize, output_filename);
break;
}
}

@ -21,7 +21,7 @@ byte FioReadByte();
uint16 FioReadWord();
uint32 FioReadDword();
void FioCloseAll();
void FioOpenFile(uint slot, const char *filename, Subdirectory subdir);
void FioOpenFile(uint slot, const char *filename, Subdirectory subdir, char **output_filename = nullptr);
void FioReadBlock(void *ptr, size_t size);
void FioSkipBytes(int n);
@ -47,7 +47,7 @@ static inline bool IsValidSearchPath(Searchpath sp)
#define FOR_ALL_SEARCHPATHS(sp) for (sp = SP_FIRST_DIR; sp < NUM_SEARCHPATHS; sp++) if (IsValidSearchPath(sp))
void FioFCloseFile(FILE *f);
FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, size_t *filesize = nullptr);
FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, size_t *filesize = nullptr, char **output_filename = nullptr);
bool FioCheckFileExists(const char *filename, Subdirectory subdir);
char *FioGetFullPath(char *buf, const char *last, Searchpath sp, Subdirectory subdir, const char *filename);
char *FioFindFullPath(char *buf, const char *last, Subdirectory subdir, const char *filename);

@ -386,7 +386,7 @@ void CDECL _intl_grfmsg(int severity, const char *str, ...)
vseprintf(buf, lastof(buf), str, va);
va_end(va);
DEBUG(grf, severity, "[%s:%d] %s", _cur.grfconfig->filename, _cur.nfo_line, buf);
DEBUG(grf, severity, "[%s:%d] %s", _cur.grfconfig->GetDisplayPath(), _cur.nfo_line, buf);
}
/**
@ -6814,7 +6814,7 @@ static void ScanInfo(ByteReader *buf)
if (grf_version < 2 || grf_version > 8) {
SetBit(_cur.grfconfig->flags, GCF_INVALID);
DEBUG(grf, 0, "%s: NewGRF \"%s\" (GRFID %08X) uses GRF version %d, which is incompatible with this version of OpenTTD.", _cur.grfconfig->filename, name, BSWAP32(grfid), grf_version);
DEBUG(grf, 0, "%s: NewGRF \"%s\" (GRFID %08X) uses GRF version %d, which is incompatible with this version of OpenTTD.", _cur.grfconfig->GetDisplayPath(), name, BSWAP32(grfid), grf_version);
}
/* GRF IDs starting with 0xFF are reserved for internal TTDPatch use */
@ -7519,7 +7519,7 @@ static void GRFInhibit(ByteReader *buf)
/* Unset activation flag */
if (file != nullptr && file != _cur.grfconfig) {
grfmsg(2, "GRFInhibit: Deactivating file '%s'", file->filename);
grfmsg(2, "GRFInhibit: Deactivating file '%s'", file->GetDisplayPath());
GRFError *error = DisableGrf(STR_NEWGRF_ERROR_FORCEFULLY_DISABLED, file);
error->data = stredup(_cur.grfconfig->GetName());
}
@ -9922,13 +9922,15 @@ void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage, S
return;
}
FioOpenFile(file_index, filename, subdir);
free(config->full_filename);
config->full_filename = nullptr;
FioOpenFile(file_index, filename, subdir, &(config->full_filename));
_cur.file_index = file_index; // XXX
_palette_remap_grf[_cur.file_index] = (config->palette & GRFP_USE_MASK);
_cur.grfconfig = config;
DEBUG(grf, 2, "LoadNewGRFFile: Reading NewGRF-file '%s'", filename);
DEBUG(grf, 2, "LoadNewGRFFile: Reading NewGRF-file '%s'", config->GetDisplayPath());
_cur.grf_container_ver = GetGRFContainerVersion();
if (_cur.grf_container_ver == 0) {

@ -108,6 +108,7 @@ GRFConfig::~GRFConfig()
free(this->filename);
delete this->error;
}
free(this->full_filename);
this->name->Release();
this->info->Release();
this->url->Release();
@ -658,7 +659,7 @@ GRFListCompatibility IsGoodGRFConfigList(GRFConfig *grfconfig)
f = FindGRFConfig(c->ident.grfid, FGCM_COMPATIBLE, nullptr, c->version);
if (f != nullptr) {
md5sumToString(buf, lastof(buf), c->ident.md5sum);
DEBUG(grf, 1, "NewGRF %08X (%s) not found; checksum %s. Compatibility mode on", BSWAP32(c->ident.grfid), c->filename, buf);
DEBUG(grf, 1, "NewGRF %08X (%s) not found; checksum %s. Compatibility mode on", BSWAP32(c->ident.grfid), c->GetDisplayPath(), buf);
if (!HasBit(c->flags, GCF_COMPATIBLE)) {
/* Preserve original_md5sum after it has been assigned */
SetBit(c->flags, GCF_COMPATIBLE);
@ -672,13 +673,13 @@ GRFListCompatibility IsGoodGRFConfigList(GRFConfig *grfconfig)
/* No compatible grf was found, mark it as disabled */
md5sumToString(buf, lastof(buf), c->ident.md5sum);
DEBUG(grf, 0, "NewGRF %08X (%s) not found; checksum %s", BSWAP32(c->ident.grfid), c->filename, buf);
DEBUG(grf, 0, "NewGRF %08X (%s) not found; checksum %s", BSWAP32(c->ident.grfid), c->GetDisplayPath(), buf);
c->status = GCS_NOT_FOUND;
res = GLC_NOT_FOUND;
} else {
compatible_grf:
DEBUG(grf, 1, "Loading GRF %08X from %s", BSWAP32(f->ident.grfid), f->filename);
DEBUG(grf, 1, "Loading GRF %08X from %s", BSWAP32(f->ident.grfid), f->GetDisplayPath());
/* The filename could be the filename as in the savegame. As we need
* to load the GRF here, we need the correct filename, so overwrite that
* in any case and set the name and info when it is not set already.

@ -156,6 +156,7 @@ struct GRFConfig : ZeroedMemoryAllocator {
GRFIdentifier ident; ///< grfid and md5sum to uniquely identify newgrfs
uint8 original_md5sum[16]; ///< MD5 checksum of original file if only a 'compatible' file was loaded
char *filename; ///< Filename - either with or without full path
char *full_filename; ///< NOSAVE: Full filename
GRFTextWrapper *name; ///< NOSAVE: GRF name (Action 0x08)
GRFTextWrapper *info; ///< NOSAVE: GRF info (author, copyright, ...) (Action 0x08)
GRFTextWrapper *url; ///< NOSAVE: URL belonging to this GRF.
@ -182,6 +183,11 @@ struct GRFConfig : ZeroedMemoryAllocator {
const char *GetDescription() const;
const char *GetURL() const;
const char *GetDisplayPath() const
{
return this->full_filename ? this->full_filename : this->filename;
}
void SetParameterDefaults();
void SetSuitablePalette();
void FinalizeParameterInfo();

Loading…
Cancel
Save