TINSEL: Merged NewName() inside DoSave() in order to remove a static var
This commit is contained in:
parent
d1c4b56223
commit
c89f2276d1
1 changed files with 27 additions and 36 deletions
|
@ -77,9 +77,6 @@ SRSTATE SRstate = SR_IDLE;
|
|||
// in DOS_DW.C
|
||||
extern void syncSCdata(Common::Serializer &s);
|
||||
|
||||
// in DOS_MAIN.C
|
||||
//char HardDriveLetter();
|
||||
|
||||
// in PCODE.C
|
||||
extern void syncGlobInfo(Common::Serializer &s);
|
||||
|
||||
|
@ -283,32 +280,6 @@ static void syncSavedData(Common::Serializer &s, SAVED_DATA &sd) {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called when saving a game to a new file.
|
||||
* Generates a new, unique, filename.
|
||||
*/
|
||||
static char *NewName() {
|
||||
static char result[FNAMELEN]; // FIXME: Avoid non-const global vars
|
||||
int i;
|
||||
int ano = 1; // Allocated number
|
||||
|
||||
while (1) {
|
||||
Common::String fname = _vm->getSavegameFilename(ano);
|
||||
strcpy(result, fname.c_str());
|
||||
|
||||
for (i = 0; i < numSfiles; i++)
|
||||
if (!strcmp(savedFiles[i].name, result))
|
||||
break;
|
||||
|
||||
if (i == numSfiles)
|
||||
break;
|
||||
ano++;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compare two TimeDate structs to see which one was earlier.
|
||||
* Returns 0 if they are equal, a negative value if a is lower / first, and
|
||||
|
@ -498,19 +469,37 @@ static bool DoRestore() {
|
|||
*/
|
||||
static void DoSave() {
|
||||
Common::OutSaveFile *f;
|
||||
const char *fname;
|
||||
char tmpName[FNAMELEN];
|
||||
|
||||
// Next getList() must do its stuff again
|
||||
NeedLoad = true;
|
||||
|
||||
if (SaveSceneName == NULL)
|
||||
SaveSceneName = NewName();
|
||||
if (SaveSceneName == NULL) {
|
||||
// Generate a new unique save name
|
||||
int i;
|
||||
int ano = 1; // Allocated number
|
||||
|
||||
while (1) {
|
||||
Common::String fname = _vm->getSavegameFilename(ano);
|
||||
strcpy(tmpName, fname.c_str());
|
||||
|
||||
for (i = 0; i < numSfiles; i++)
|
||||
if (!strcmp(savedFiles[i].name, tmpName))
|
||||
break;
|
||||
|
||||
if (i == numSfiles)
|
||||
break;
|
||||
ano++;
|
||||
}
|
||||
|
||||
SaveSceneName = tmpName;
|
||||
}
|
||||
|
||||
|
||||
if (SaveSceneDesc[0] == 0)
|
||||
SaveSceneDesc = "unnamed";
|
||||
|
||||
fname = SaveSceneName;
|
||||
|
||||
f = _vm->getSaveFileMan()->openForSaving(fname);
|
||||
f = _vm->getSaveFileMan()->openForSaving(SaveSceneName);
|
||||
Common::Serializer s(0, f);
|
||||
|
||||
if (f == NULL)
|
||||
|
@ -537,12 +526,14 @@ static void DoSave() {
|
|||
|
||||
f->finalize();
|
||||
delete f;
|
||||
SaveSceneName = NULL; // Invalidate save name
|
||||
return;
|
||||
|
||||
save_failure:
|
||||
if (f) {
|
||||
delete f;
|
||||
_vm->getSaveFileMan()->removeSavefile(fname);
|
||||
_vm->getSaveFileMan()->removeSavefile(SaveSceneName);
|
||||
SaveSceneName = NULL; // Invalidate save name
|
||||
}
|
||||
GUI::MessageDialog dialog("Failed to save game state to file.");
|
||||
dialog.runModal();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue