# HG changeset patch # User smatz # Date 2008-07-28 15:31:11 # Node ID db92977da47bc43014bcf5edc0eafd57e30e8fbe # Parent 3d58456a60d9f3bd9020614e2ff6bc27b3db6552 (svn r13859) -Fix: loading of TTD(Patch) savegames from the command line didn't work diff --git a/src/fios.cpp b/src/fios.cpp --- a/src/fios.cpp +++ b/src/fios.cpp @@ -297,12 +297,12 @@ static FiosItem *FiosGetFileList(SaveLoa * @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 FiosGetSavegameListCallb 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 --- a/src/fios.h +++ b/src/fios.h @@ -105,6 +105,8 @@ StringID FiosGetDescText(const char **pa 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 --- 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;