mirror of https://github.com/OpenTTD/OpenTTD
(svn r1702) - Fix: [ 1110407 ] Game does not crash any more when a newgrf file doesn't exist
parent
3e0dcfd47f
commit
c8d084a85e
36
fileio.c
36
fileio.c
|
@ -100,6 +100,42 @@ void FioCloseAll(void)
|
||||||
FioCloseFile(i);
|
FioCloseFile(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FiosCheckFileExists(const char *filename)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
char buf[MAX_PATH];
|
||||||
|
|
||||||
|
sprintf(buf, "%s%s", _path.data_dir, filename);
|
||||||
|
|
||||||
|
f = fopen(buf, "rb");
|
||||||
|
#if !defined(WIN32)
|
||||||
|
if (f == NULL) {
|
||||||
|
char *s;
|
||||||
|
// Make lower case and try again
|
||||||
|
for(s=buf + strlen(_path.data_dir) - 1; *s != 0; s++)
|
||||||
|
*s = tolower(*s);
|
||||||
|
f = fopen(buf, "rb");
|
||||||
|
|
||||||
|
#if defined SECOND_DATA_DIR
|
||||||
|
// tries in the 2nd data directory
|
||||||
|
if (f == NULL) {
|
||||||
|
sprintf(buf, "%s%s", _path.second_data_dir, filename);
|
||||||
|
for(s=buf + strlen(_path.second_data_dir) - 1; *s != 0; s++)
|
||||||
|
*s = tolower(*s);
|
||||||
|
f = fopen(buf, "rb");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (f == NULL)
|
||||||
|
return false;
|
||||||
|
else {
|
||||||
|
fclose(f);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void FioOpenFile(int slot, const char *filename)
|
void FioOpenFile(int slot, const char *filename)
|
||||||
{
|
{
|
||||||
FILE *f;
|
FILE *f;
|
||||||
|
|
1
fileio.h
1
fileio.h
|
@ -11,5 +11,6 @@ void FioCloseAll(void);
|
||||||
void FioOpenFile(int slot, const char *filename);
|
void FioOpenFile(int slot, const char *filename);
|
||||||
void FioReadBlock(void *ptr, uint size);
|
void FioReadBlock(void *ptr, uint size);
|
||||||
void FioSkipBytes(int n);
|
void FioSkipBytes(int n);
|
||||||
|
bool FiosCheckFileExists(const char *filename);
|
||||||
|
|
||||||
#endif /* FILEIO_H */
|
#endif /* FILEIO_H */
|
||||||
|
|
|
@ -893,20 +893,17 @@ static void LoadSpriteTables(void)
|
||||||
|
|
||||||
|
|
||||||
/* Load newgrf sprites */
|
/* Load newgrf sprites */
|
||||||
|
// in each loading stage, (try to) open each file specified in the config and load information from it.
|
||||||
_custom_sprites_base = load_index;
|
_custom_sprites_base = load_index;
|
||||||
|
for (_loading_stage = 0; _loading_stage < 2; _loading_stage++) {
|
||||||
_loading_stage = 0;
|
|
||||||
for (j = 0; j != lengthof(_newgrf_files) && _newgrf_files[j]; j++) {
|
for (j = 0; j != lengthof(_newgrf_files) && _newgrf_files[j]; j++) {
|
||||||
|
if ( !FiosCheckFileExists(_newgrf_files[j]) )
|
||||||
|
continue;
|
||||||
|
if (_loading_stage == 0)
|
||||||
InitNewGRFFile(_newgrf_files[j], load_index);
|
InitNewGRFFile(_newgrf_files[j], load_index);
|
||||||
load_index += LoadNewGrfFile(_newgrf_files[j], load_index, i++);
|
load_index += LoadNewGrfFile(_newgrf_files[j], load_index, i++);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
_loading_stage = 1;
|
|
||||||
load_index = _custom_sprites_base;
|
|
||||||
for (j = 0; j != lengthof(_newgrf_files) && _newgrf_files[j]; j++)
|
|
||||||
load_index += LoadNewGrfFile(_newgrf_files[j], load_index, i++);
|
|
||||||
|
|
||||||
|
|
||||||
// If needed, save the cache to file
|
// If needed, save the cache to file
|
||||||
HandleCachedSpriteHeaders(_cached_filenames[_opt.landscape], false);
|
HandleCachedSpriteHeaders(_cached_filenames[_opt.landscape], false);
|
||||||
|
|
Loading…
Reference in New Issue