diff options
-rw-r--r-- | src/fios.cpp | 6 | ||||
-rw-r--r-- | src/fios.h | 2 | ||||
-rw-r--r-- | src/openttd.cpp | 18 |
3 files changed, 19 insertions, 7 deletions
diff --git a/src/fios.cpp b/src/fios.cpp index 73c3b9ae2..cdecb1b34 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -297,12 +297,12 @@ static FiosItem *FiosGetFileList(SaveLoadDialogMode mode, fios_getlist_callback_ * @param mode Save/load mode. * @param file Name of the file to check. * @param ext A pointer to the extension identifier inside file - * @param title Buffer if a callback wants to lookup the title of the file + * @param title Buffer if a callback wants to lookup the title of the file; NULL to skip the lookup * @return a FIOS_TYPE_* type of the found file, FIOS_TYPE_INVALID if not a savegame * @see FiosGetFileList * @see FiosGetSavegameList */ -static FiosType FiosGetSavegameListCallback(SaveLoadDialogMode mode, const char *file, const char *ext, char *title) +FiosType FiosGetSavegameListCallback(SaveLoadDialogMode mode, const char *file, const char *ext, char *title) { /* Show savegame files * .SAV OpenTTD saved game @@ -314,7 +314,7 @@ static FiosType FiosGetSavegameListCallback(SaveLoadDialogMode mode, const char if (mode == SLD_LOAD_GAME || mode == SLD_LOAD_SCENARIO) { if (strcasecmp(ext, ".ss1") == 0 || strcasecmp(ext, ".sv1") == 0 || strcasecmp(ext, ".sv2") == 0) { - GetOldSaveGameName(title, _fios_path, file); + if (title != NULL) GetOldSaveGameName(title, _fios_path, file); return FIOS_TYPE_OLDFILE; } } diff --git a/src/fios.h b/src/fios.h index 6a46987b3..40982bf4d 100644 --- a/src/fios.h +++ b/src/fios.h @@ -105,6 +105,8 @@ StringID FiosGetDescText(const char **path, uint32 *total_free); bool FiosDelete(const char *name); /* Make a filename from a name */ void FiosMakeSavegameName(char *buf, const char *name, size_t size); +/* Determines type of savegame (or tells it is not a savegame) */ +FiosType FiosGetSavegameListCallback(SaveLoadDialogMode mode, const char *file, const char *ext, char *title); int CDECL compare_FiosItems(const void *a, const void *b); diff --git a/src/openttd.cpp b/src/openttd.cpp index 7eb61c226..29f6bbb79 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -460,11 +460,21 @@ int ttd_main(int argc, char *argv[]) if (mgo.opt != NULL) { ttd_strlcpy(_file_to_saveload.name, mgo.opt, sizeof(_file_to_saveload.name)); _switch_mode = SM_LOAD; - } else { - _switch_mode = SM_NEWGAME; - /* Give a random map */ - generation_seed = InteractiveRandom(); + _file_to_saveload.mode = SL_LOAD; + + /* if the file doesn't exist or it is not a valid savegame, let the saveload code show an error */ + const char *t = strrchr(_file_to_saveload.name, '.'); + if (t != NULL) { + FiosType ft = FiosGetSavegameListCallback(SLD_LOAD_GAME, _file_to_saveload.name, t, NULL); + if (ft != FIOS_TYPE_INVALID) SetFiosType(ft); + } + + break; } + + _switch_mode = SM_NEWGAME; + /* Give a random map */ + generation_seed = InteractiveRandom(); break; case 'G': generation_seed = atoi(mgo.opt); break; case 'c': _config_file = strdup(mgo.opt); break; |