TINSEL: Merged NewName() inside DoSave() in order to remove a static var

This commit is contained in:
md5 2011-04-10 14:19:28 +03:00
parent d1c4b56223
commit c89f2276d1

View file

@ -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();