diff options
author | Max Horn | 2008-08-04 17:41:07 +0000 |
---|---|---|
committer | Max Horn | 2008-08-04 17:41:07 +0000 |
commit | 2f2a4f03d0eda0f7f81fbfb9a8bc9cb95586bd43 (patch) | |
tree | aea4a5f47196bd7e7f5b5c5c314a540e9e113d71 | |
parent | 92d6ee3d7611617abfe1c4cdcf3a838116c34c95 (diff) | |
download | scummvm-rg350-2f2a4f03d0eda0f7f81fbfb9a8bc9cb95586bd43.tar.gz scummvm-rg350-2f2a4f03d0eda0f7f81fbfb9a8bc9cb95586bd43.tar.bz2 scummvm-rg350-2f2a4f03d0eda0f7f81fbfb9a8bc9cb95586bd43.zip |
Modified DefaultSaveFileManager::checkPath to perform at least basic checks on non-UNIX, non-Symbian systems
svn-id: r33615
-rw-r--r-- | backends/saves/default/default-saves.cpp | 26 | ||||
-rw-r--r-- | backends/saves/default/default-saves.h | 2 |
2 files changed, 17 insertions, 11 deletions
diff --git a/backends/saves/default/default-saves.cpp b/backends/saves/default/default-saves.cpp index cd46c941f5..bd72739f44 100644 --- a/backends/saves/default/default-saves.cpp +++ b/backends/saves/default/default-saves.cpp @@ -100,14 +100,14 @@ Common::StringList DefaultSaveFileManager::listSavefiles(const char *pattern) { return results; } -void DefaultSaveFileManager::checkPath(const Common::String &path) { +void DefaultSaveFileManager::checkPath(const FilesystemNode &dir) { + const Common::String path = dir.getPath(); clearError(); #if defined(UNIX) || defined(__SYMBIAN32__) struct stat sb; // Check whether the dir exists - // TODO: Use the FSNode API instead if (stat(path.c_str(), &sb) == -1) { // The dir does not exist, or stat failed for some other reason. // If the problem was that the path pointed to nothing, try @@ -168,17 +168,24 @@ void DefaultSaveFileManager::checkPath(const Common::String &path) { setError(SFM_DIR_NOTDIR, "The given savepath is not a directory: "+path); } } +#else + if (!dir.exists()) { + // TODO: We could try to mkdir the directory here; or rather, we could + // add a mkdir method to FilesystemNode and invoke that here. + setError(SFM_DIR_NOENT, "A component of the path does not exist, or the path is an empty string: "+path); + } else if (!dir.isDirectory()) { + setError(SFM_DIR_NOTDIR, "The given savepath is not a directory: "+path); + } #endif } Common::InSaveFile *DefaultSaveFileManager::openForLoading(const char *filename) { // Ensure that the savepath is valid. If not, generate an appropriate error. - Common::String savePath = getSavePath(); + FilesystemNode savePath(getSavePath()); checkPath(savePath); if (getError() == SFM_NO_ERROR) { - FilesystemNode saveDir(getSavePath()); - FilesystemNode file = saveDir.getChild(filename); + FilesystemNode file = savePath.getChild(filename); // Open the file for reading Common::SeekableReadStream *sf = file.openForReading(); @@ -191,12 +198,11 @@ Common::InSaveFile *DefaultSaveFileManager::openForLoading(const char *filename) Common::OutSaveFile *DefaultSaveFileManager::openForSaving(const char *filename) { // Ensure that the savepath is valid. If not, generate an appropriate error. - Common::String savePath = getSavePath(); + FilesystemNode savePath(getSavePath()); checkPath(savePath); if (getError() == SFM_NO_ERROR) { - FilesystemNode saveDir(getSavePath()); - FilesystemNode file = saveDir.getChild(filename); + FilesystemNode file = savePath.getChild(filename); // Open the file for saving Common::WriteStream *sf = file.openForWriting(); @@ -210,8 +216,8 @@ Common::OutSaveFile *DefaultSaveFileManager::openForSaving(const char *filename) bool DefaultSaveFileManager::removeSavefile(const char *filename) { clearError(); - FilesystemNode saveDir(getSavePath()); - FilesystemNode file = saveDir.getChild(filename); + FilesystemNode savePath(getSavePath()); + FilesystemNode file = savePath.getChild(filename); // TODO: Add new method FilesystemNode::remove() if (remove(file.getPath().c_str()) != 0) { diff --git a/backends/saves/default/default-saves.h b/backends/saves/default/default-saves.h index d8c0b0ae43..0e98d0ea9e 100644 --- a/backends/saves/default/default-saves.h +++ b/backends/saves/default/default-saves.h @@ -53,7 +53,7 @@ protected: * Checks the given path for read access, existence, etc. * Sets the internal error and error message accordingly. */ - void checkPath(const Common::String &path); + void checkPath(const FilesystemNode &dir); }; #endif |