diff options
author | Max Horn | 2007-11-06 10:52:47 +0000 |
---|---|---|
committer | Max Horn | 2007-11-06 10:52:47 +0000 |
commit | 3598192859797d8b7cc33a22af21f04bd45af01a (patch) | |
tree | ed28685b78beccd234a6995ae5d36201267973d7 /backends | |
parent | 83802f795b042113ea564f7f6ff964b7d030f3e5 (diff) | |
download | scummvm-rg350-3598192859797d8b7cc33a22af21f04bd45af01a.tar.gz scummvm-rg350-3598192859797d8b7cc33a22af21f04bd45af01a.tar.bz2 scummvm-rg350-3598192859797d8b7cc33a22af21f04bd45af01a.zip |
Patch #1825132: SAVEFILEMAN: renameSavefile implementation
svn-id: r29433
Diffstat (limited to 'backends')
-rw-r--r-- | backends/saves/savefile.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/backends/saves/savefile.cpp b/backends/saves/savefile.cpp index 499edb0b28..8466130151 100644 --- a/backends/saves/savefile.cpp +++ b/backends/saves/savefile.cpp @@ -32,6 +32,42 @@ namespace Common { +bool SaveFileManager::renameSavefile(const char *oldFilename, const char *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); + if (!inFile->ioFailed()) { + outFile->write(buffer, size); + outFile->finalize(); + if (!outFile->ioFailed()) { + success = removeSavefile(oldFilename); + } + } + } + + free(buffer); + delete outFile; + delete inFile; + } + + return success; +} + const char *SaveFileManager::getSavePath() const { #if defined(PALMOS_MODE) || defined(__PSP__) |