void SaveLoad::loadStream(GameId id) { Common::InSaveFile *save = openForLoading(id); if (save->size() < 32) error("SaveLoad::init - Savegame seems to be corrupted (not enough data: %i bytes)", save->size()); if (!_savegame) error("SaveLoad::loadStream: savegame stream is invalid"); // Load all savegame data uint8* buf = new uint8[8192]; while (!save->eos() && !save->err()) { _engine->pollEvents(); uint32 count = save->read(buf, sizeof(buf)); if (count) { uint32 w = _savegame->write(buf, count); assert (w == count); } } if (save->err()) error("SaveLoad::init - Error reading savegame"); delete[] buf; delete save; // Move back to the beginning of the stream _savegame->seek(0); }
// Check if the game has been started in the specific savegame bool SaveLoad::isSavegameValid(GameId id) { if (!isSavegamePresent(id)) { debugC(2, kLastExpressDebugSavegame, "SaveLoad::isSavegameValid - Savegame does not exist: %s", getFilename(id).c_str()); return false; } SavegameMainHeader header; Common::InSaveFile *save = openForLoading(id); bool isHeaderValid = loadMainHeader(save, &header); delete save; return isHeaderValid; }
bool SaveFileManager::renameSavefile(const String &oldFilename, const String &newFilename) { InSaveFile *inFile = 0; OutSaveFile *outFile = 0; uint32 size = 0; void *buffer = 0; bool success = false; inFile = openForLoading(oldFilename); if (inFile) { size = inFile->size(); buffer = malloc(size); assert(buffer); outFile = openForSaving(newFilename); if (buffer && outFile) { inFile->read(buffer, size); bool error = inFile->err(); delete inFile; inFile = 0; if (!error) { outFile->write(buffer, size); outFile->finalize(); if (!outFile->err()) { success = removeSavefile(oldFilename); } } } free(buffer); delete outFile; delete inFile; } return success; }