diff options
author | rubidium <rubidium@openttd.org> | 2009-03-04 09:53:31 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2009-03-04 09:53:31 +0000 |
commit | 0d8da02ec1ec610931c2fdbe05a29e7ee3a49144 (patch) | |
tree | 9a2c02d0b0de1ad7374ee64afe0beadcb8f2b21f /src/saveload | |
parent | f0de54bc10d158bbb1ae58b628c0896a56880540 (diff) | |
download | openttd-0d8da02ec1ec610931c2fdbe05a29e7ee3a49144.tar.xz |
(svn r15610) -Change: allow loading of heightmaps and savegames (any form) that are in .tar files
Diffstat (limited to 'src/saveload')
-rw-r--r-- | src/saveload/oldloader.cpp | 14 | ||||
-rw-r--r-- | src/saveload/saveload.cpp | 9 |
2 files changed, 10 insertions, 13 deletions
diff --git a/src/saveload/oldloader.cpp b/src/saveload/oldloader.cpp index dd55a9e29..7def93796 100644 --- 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 @@ static inline bool CheckOldSavegameType(FILE *f, char *temp, const char *last, u { 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 @@ static SavegameType DetermineOldSavegameType(FILE *f, char *title, const char *l 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 @@ bool LoadOldSaveGame(const char *file) 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 @@ bool LoadOldSaveGame(const char *file) 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'; diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 8b6b8e198..31f3b3c2d 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -1737,6 +1737,8 @@ SaveOrLoadResult SaveOrLoad(const char *filename, int mode, Subdirectory sb) 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 @@ SaveOrLoadResult SaveOrLoad(const char *filename, int mode, Subdirectory sb) /* 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 |