diff options
Diffstat (limited to 'engines/wintermute')
-rw-r--r-- | engines/wintermute/base/file/base_disk_file.cpp | 4 | ||||
-rw-r--r-- | engines/wintermute/dctypes.h | 3 | ||||
-rw-r--r-- | engines/wintermute/utils/path_util.cpp | 48 | ||||
-rw-r--r-- | engines/wintermute/utils/path_util.h | 15 |
4 files changed, 39 insertions, 31 deletions
diff --git a/engines/wintermute/base/file/base_disk_file.cpp b/engines/wintermute/base/file/base_disk_file.cpp index d0c51616f4..0684b3f591 100644 --- a/engines/wintermute/base/file/base_disk_file.cpp +++ b/engines/wintermute/base/file/base_disk_file.cpp @@ -29,6 +29,7 @@ #include "engines/wintermute/dcgf.h" #include "engines/wintermute/base/file/base_disk_file.h" #include "engines/wintermute/base/base_file_manager.h" +#include "engines/wintermute/utils/path_util.h" #include "common/stream.h" #include "common/memstream.h" #include "common/file.h" @@ -37,6 +38,7 @@ #include "common/tokenizer.h" #include "common/config-manager.h" + namespace Wintermute { void correctSlashes(Common::String &fileName) { @@ -150,7 +152,7 @@ Common::SeekableReadStream *openDiskFile(const Common::String &filename) { } // File wasn't found in SearchMan, try to parse the path as a relative path. if (!file) { - Common::FSNode searchNode = getNodeForRelativePath(filename); + Common::FSNode searchNode = getNodeForRelativePath(PathUtil::normalizeFileName(filename)); if (searchNode.exists() && !searchNode.isDirectory() && searchNode.isReadable()) { file = searchNode.createReadStream(); } diff --git a/engines/wintermute/dctypes.h b/engines/wintermute/dctypes.h index 90340f437d..571ce21931 100644 --- a/engines/wintermute/dctypes.h +++ b/engines/wintermute/dctypes.h @@ -37,9 +37,6 @@ namespace Wintermute { -//typedef std::string AnsiString; -//typedef std::string Utf8String; -//typedef std::wstring WideString; typedef Common::String AnsiString; typedef Common::String Utf8String; typedef Common::U32String WideString; diff --git a/engines/wintermute/utils/path_util.cpp b/engines/wintermute/utils/path_util.cpp index 71311713af..8518f8968f 100644 --- a/engines/wintermute/utils/path_util.cpp +++ b/engines/wintermute/utils/path_util.cpp @@ -32,8 +32,8 @@ namespace Wintermute { ////////////////////////////////////////////////////////////////////////// -AnsiString PathUtil::unifySeparators(const AnsiString &path) { - AnsiString newPath = path; +Common::String PathUtil::unifySeparators(const Common::String &path) { + Common::String newPath = path; for (uint32 i = 0; i < newPath.size(); i++) { if (newPath[i] == '\\') { @@ -45,16 +45,16 @@ AnsiString PathUtil::unifySeparators(const AnsiString &path) { } ////////////////////////////////////////////////////////////////////////// -AnsiString PathUtil::normalizeFileName(const AnsiString &path) { - AnsiString newPath = unifySeparators(path); +Common::String PathUtil::normalizeFileName(const Common::String &path) { + Common::String newPath = unifySeparators(path); newPath.toLowercase(); return newPath; } ////////////////////////////////////////////////////////////////////////// -AnsiString PathUtil::combine(const AnsiString &path1, const AnsiString &path2) { - AnsiString newPath1 = unifySeparators(path1); - AnsiString newPath2 = unifySeparators(path2); +Common::String PathUtil::combine(const Common::String &path1, const Common::String &path2) { + Common::String newPath1 = unifySeparators(path1); + Common::String newPath2 = unifySeparators(path2); if (!newPath1.hasSuffix("/") && !newPath2.hasPrefix("/")) { newPath1 += "/"; @@ -63,29 +63,37 @@ AnsiString PathUtil::combine(const AnsiString &path1, const AnsiString &path2) { return newPath1 + newPath2; } +bool PathUtil::hasTrailingSlash(const Common::String &path) { + return (path.size() > 0 && path[path.size() - 1 ] == '/'); +} + ////////////////////////////////////////////////////////////////////////// -AnsiString PathUtil::getDirectoryName(const AnsiString &path) { - AnsiString newPath = unifySeparators(path); +Common::String PathUtil::getDirectoryName(const Common::String &path) { + Common::String newPath = unifySeparators(path); Common::String filename = getFileName(path); - return Common::String(path.c_str(), path.size() - filename.size()); + if (hasTrailingSlash(newPath)) { + return path; + } else { + return Common::String(path.c_str(), path.size() - filename.size()); + } } ////////////////////////////////////////////////////////////////////////// -AnsiString PathUtil::getFileName(const AnsiString &path) { - AnsiString newPath = unifySeparators(path); +Common::String PathUtil::getFileName(const Common::String &path) { + Common::String newPath = unifySeparators(path); Common::String lastPart = Common::lastPathComponent(newPath, '/'); - if (lastPart[lastPart.size() - 1 ] != '/') { - return lastPart; + if (hasTrailingSlash(newPath)) { + return Common::String(""); } else { - return path; + return lastPart; } } ////////////////////////////////////////////////////////////////////////// -AnsiString PathUtil::getFileNameWithoutExtension(const AnsiString &path) { - AnsiString fileName = getFileName(path); +Common::String PathUtil::getFileNameWithoutExtension(const Common::String &path) { + Common::String fileName = getFileName(path); // TODO: Prettify this. - AnsiString extension = Common::lastPathComponent(fileName, '.'); + Common::String extension = Common::lastPathComponent(fileName, '.'); for (uint32 i = 0; i < extension.size() + 1; i++) { fileName.deleteLastChar(); } @@ -93,8 +101,8 @@ AnsiString PathUtil::getFileNameWithoutExtension(const AnsiString &path) { } ////////////////////////////////////////////////////////////////////////// -AnsiString PathUtil::getExtension(const AnsiString &path) { - AnsiString fileName = getFileName(path); +Common::String PathUtil::getExtension(const Common::String &path) { + Common::String fileName = getFileName(path); return Common::lastPathComponent(path, '.'); } diff --git a/engines/wintermute/utils/path_util.h b/engines/wintermute/utils/path_util.h index 264dc5d241..8050cdfae2 100644 --- a/engines/wintermute/utils/path_util.h +++ b/engines/wintermute/utils/path_util.h @@ -35,13 +35,14 @@ namespace Wintermute { class PathUtil { public: - static AnsiString unifySeparators(const AnsiString &path); - static AnsiString normalizeFileName(const AnsiString &path); - static AnsiString combine(const AnsiString &path1, const AnsiString &path2); - static AnsiString getDirectoryName(const AnsiString &path); - static AnsiString getFileName(const AnsiString &path); - static AnsiString getFileNameWithoutExtension(const AnsiString &path); - static AnsiString getExtension(const AnsiString &path); + static Common::String unifySeparators(const Common::String &path); + static Common::String normalizeFileName(const Common::String &path); + static Common::String combine(const Common::String &path1, const Common::String &path2); + static Common::String getDirectoryName(const Common::String &path); + static Common::String getFileName(const Common::String &path); + static Common::String getFileNameWithoutExtension(const Common::String &path); + static Common::String getExtension(const Common::String &path); + static bool hasTrailingSlash(const Common::String &path); }; } // End of namespace Wintermute |