Mercurial > hg > openttd
changeset 11261:5a50ba45cf24 draft
(svn r15610) -Change: allow loading of heightmaps and savegames (any form) that are in .tar files
author | rubidium <rubidium@openttd.org> |
---|---|
date | Wed, 04 Mar 2009 09:53:31 +0000 |
parents | 6b0149b64909 |
children | de226219239a |
files | src/fileio.cpp src/fios.cpp src/heightmap.cpp src/saveload/oldloader.cpp src/saveload/saveload.cpp |
diffstat | 5 files changed, 19 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -358,7 +358,7 @@ } /* We can only use .tar in case of data-dir, and read-mode */ - if (f == NULL && (subdir == DATA_DIR || subdir == AI_DIR || subdir == AI_LIBRARY_DIR) && mode[0] == 'r') { + if (f == NULL && mode[0] == 'r') { static const uint MAX_RESOLVED_LENGTH = 2 * (100 + 100 + 155) + 1; // Enough space to hold two filenames plus link. See 'TarHeader'. char resolved_name[MAX_RESOLVED_LENGTH]; @@ -777,6 +777,8 @@ num += ScanPathForTarFiles(path, strlen(path)); FioAppendDirectory(path, MAX_PATH, sp, AI_LIBRARY_DIR); num += ScanPathForTarFiles(path, strlen(path)); + FioAppendDirectory(path, MAX_PATH, sp, SCENARIO_DIR); + num += ScanPathForTarFiles(path, strlen(path)); } DEBUG(misc, 1, "Scan complete, found %d files", num); }
--- a/src/fios.cpp +++ b/src/fios.cpp @@ -37,7 +37,7 @@ extern bool FiosGetDiskFreeSpace(const char *path, uint64 *tot); /* get the name of an oldstyle savegame */ -extern void GetOldSaveGameName(const char *path, const char *file, char *title, const char *last); +extern void GetOldSaveGameName(const char *file, char *title, const char *last); /** * Compare two FiosItem's. Used with qsort when sorting the file list. @@ -343,7 +343,7 @@ if (mode == SLD_LOAD_GAME || mode == SLD_LOAD_SCENARIO) { if (strcasecmp(ext, ".ss1") == 0 || strcasecmp(ext, ".sv1") == 0 || strcasecmp(ext, ".sv2") == 0) { - if (title != NULL) GetOldSaveGameName(_fios_path, file, title, last); + if (title != NULL) GetOldSaveGameName(file, title, last); return FIOS_TYPE_OLDFILE; } } @@ -392,7 +392,7 @@ if (mode == SLD_LOAD_GAME || mode == SLD_LOAD_SCENARIO || mode == SLD_NEW_GAME) { if (strcasecmp(ext, ".sv0") == 0 || strcasecmp(ext, ".ss0") == 0 ) { - GetOldSaveGameName(_fios_path, file, title, last); + GetOldSaveGameName(file, title, last); return FIOS_TYPE_OLD_SCENARIO; } }
--- a/src/heightmap.cpp +++ b/src/heightmap.cpp @@ -12,6 +12,7 @@ #include "gfx_func.h" #include "fios.h" #include "settings_type.h" +#include "fileio_func.h" #include "table/strings.h" @@ -98,7 +99,7 @@ png_structp png_ptr = NULL; png_infop info_ptr = NULL; - fp = fopen(filename, "rb"); + fp = FioFOpenFile(filename, "rb"); if (fp == NULL) { ShowErrorMessage(STR_PNGMAP_ERR_FILE_NOT_FOUND, STR_PNGMAP_ERROR, 0, 0); return false; @@ -221,7 +222,7 @@ /* Init BmpData */ memset(&data, 0, sizeof(data)); - f = fopen(filename, "rb"); + f = FioFOpenFile(filename, "rb"); if (f == NULL) { ShowErrorMessage(STR_PNGMAP_ERR_FILE_NOT_FOUND, STR_BMPMAP_ERROR, 0, 0); return false;
--- a/src/saveload/oldloader.cpp +++ b/src/saveload/oldloader.cpp @@ -9,6 +9,7 @@ #include "../strings_type.h" #include "../string_func.h" #include "../settings_type.h" +#include "../fileio_func.h" #include "table/strings.h" @@ -224,7 +225,6 @@ { assert(last - temp + 1 >= (int)len); - fseek(f, 0, SEEK_SET); if (fread(temp, 1, len, f) != len) { temp[0] = '\0'; // if reading failed, make the name empty return false; @@ -243,8 +243,11 @@ SavegameType type = SGT_TTO; + /* Can't fseek to 0 as in tar files that is not correct */ + long pos = ftell(f); if (!CheckOldSavegameType(f, temp, lastof(temp), TTO_HEADER_SIZE)) { type = SGT_TTD; + fseek(f, pos, SEEK_SET); if (!CheckOldSavegameType(f, temp, lastof(temp), TTD_HEADER_SIZE)) { type = SGT_INVALID; } @@ -273,7 +276,7 @@ InitLoading(&ls); /* Open file */ - ls.file = fopen(file, "rb"); + ls.file = FioFOpenFile(file, "rb"); if (ls.file == NULL) { DEBUG(oldloader, 0, "Cannot open file '%s'", file); @@ -303,12 +306,9 @@ return true; } -void GetOldSaveGameName(const char *path, const char *file, char *title, const char *last) +void GetOldSaveGameName(const char *file, char *title, const char *last) { - char filename[MAX_PATH]; - - snprintf(filename, lengthof(filename), "%s" PATHSEP "%s", path, file); - FILE *f = fopen(filename, "rb"); + FILE *f = FioFOpenFile(file, "rb"); if (f == NULL) { *title = '\0';
--- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -1737,6 +1737,8 @@ assert(mode == SL_LOAD); DEBUG(desync, 1, "load: %s\n", filename); + /* Can't fseek to 0 as in tar files that is not correct */ + long pos = ftell(_sl.fh); if (fread(hdr, sizeof(hdr), 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE); /* see if we have any loader for this type. */ @@ -1744,13 +1746,8 @@ /* No loader found, treat as version 0 and use LZO format */ if (fmt == endof(_saveload_formats)) { DEBUG(sl, 0, "Unknown savegame type, trying to load it as the buggy format"); - #if defined(WINCE) - /* Of course some system had not to support rewind ;) */ - fseek(_sl.fh, 0L, SEEK_SET); clearerr(_sl.fh); - #else - rewind(_sl.fh); - #endif + fseek(_sl.fh, pos, SEEK_SET); _sl_version = 0; _sl_minor_version = 0; fmt = _saveload_formats + 1; // LZO