diff --git a/engines/gob/databases.cpp b/engines/gob/databases.cpp index d29ca2ea806..1fa0e5f3f54 100644 --- a/engines/gob/databases.cpp +++ b/engines/gob/databases.cpp @@ -58,7 +58,7 @@ void Databases::setLanguage(Common::Language language) { _language = lang; } -bool Databases::open(const Common::String &id, const Common::String &file) { +bool Databases::open(const Common::String &id, const Common::Path &file) { if (_databases.contains(id)) { warning("Databases::open(): A database with the ID \"%s\" already exists", id.c_str()); return false; @@ -66,13 +66,13 @@ bool Databases::open(const Common::String &id, const Common::String &file) { Common::File dbFile; if (!dbFile.open(file)) { - warning("Databases::open(): No such file \"%s\"", file.c_str()); + warning("Databases::open(): No such file \"%s\"", file.toString().c_str()); return false; } dBase db; if (!db.load(dbFile)) { - warning("Databases::open(): Failed loading database file \"%s\"", file.c_str()); + warning("Databases::open(): Failed loading database file \"%s\"", file.toString().c_str()); return false; } @@ -81,7 +81,7 @@ bool Databases::open(const Common::String &id, const Common::String &file) { assert(map != _databases.end()); if (!buildMap(db, map->_value)) { - warning("Databases::open(): Failed building a map for database \"%s\"", file.c_str()); + warning("Databases::open(): Failed building a map for database \"%s\"", file.toString().c_str()); _databases.erase(map); return false; } diff --git a/engines/gob/databases.h b/engines/gob/databases.h index a9b4e4fb0d5..7b9dbc5fb1f 100644 --- a/engines/gob/databases.h +++ b/engines/gob/databases.h @@ -38,7 +38,7 @@ public: void setLanguage(Common::Language language); - bool open(const Common::String &id, const Common::String &file); + bool open(const Common::String &id, const Common::Path &file); bool close(const Common::String &id); bool getString(const Common::String &id, Common::String group, diff --git a/engines/gob/dataio.cpp b/engines/gob/dataio.cpp index 2309ca34fdd..dba7027ca91 100644 --- a/engines/gob/dataio.cpp +++ b/engines/gob/dataio.cpp @@ -231,7 +231,7 @@ bool DataIO::openArchive(Common::String name, bool base) { name += ".stk"; // Try to open - *archive = openArchive(name); + *archive = openArchive(Common::Path(name)); if (!*archive) return false; @@ -245,14 +245,14 @@ static void replaceChar(char *str, char c1, char c2) { *str = c2; } -DataIO::Archive *DataIO::openArchive(const Common::String &name) { +DataIO::Archive *DataIO::openArchive(const Common::Path &name) { Archive *archive = new Archive; if (!archive->file.open(name)) { delete archive; return nullptr; } - archive->name = name; + archive->name = name.toString('/'); uint16 fileCount = archive->file.readUint16LE(); for (uint16 i = 0; i < fileCount; i++) { @@ -316,7 +316,7 @@ bool DataIO::hasFile(const Common::String &name){ return true; // Else, look if a plain file that matches exists - return Common::File::exists(name); + return Common::File::exists(Common::Path(name)); } int32 DataIO::fileSize(const Common::String &name) { @@ -342,7 +342,7 @@ int32 DataIO::fileSize(const Common::String &name) { // Else, try to find a matching plain file Common::File f; - if (!f.open(name)) + if (!f.open(Common::Path(name))) return -1; return f.size(); @@ -359,7 +359,7 @@ Common::SeekableReadStream *DataIO::getFile(const Common::String &name) { // Else, try to open a matching plain file Common::File f; - if (!f.open(name)) + if (!f.open(Common::Path(name))) return nullptr; return f.readStream(f.size()); @@ -376,7 +376,7 @@ byte *DataIO::getFile(const Common::String &name, int32 &size) { // Else, try to open a matching plain file Common::File f; - if (!f.open(name)) + if (!f.open(Common::Path(name))) return nullptr; size = f.size(); diff --git a/engines/gob/dataio.h b/engines/gob/dataio.h index afa43bef461..6a6c9462be3 100644 --- a/engines/gob/dataio.h +++ b/engines/gob/dataio.h @@ -90,7 +90,7 @@ private: Common::Array _archives; - Archive *openArchive(const Common::String &name); + Archive *openArchive(const Common::Path &name); bool closeArchive(Archive &archive); File *findFile(const Common::String &name); diff --git a/engines/gob/detection/detection.cpp b/engines/gob/detection/detection.cpp index 644ba9fdc09..10cebfad6b1 100644 --- a/engines/gob/detection/detection.cpp +++ b/engines/gob/detection/detection.cpp @@ -100,7 +100,7 @@ ADDetectedGame GobMetaEngineDetection::fallbackDetect(const FileMap &allFiles, c const Gob::GOBGameDescription *GobMetaEngineDetection::detectOnceUponATime(const Common::FSList &fslist) { // Add the game path to the search manager SearchMan.clear(); - SearchMan.addDirectory(fslist.begin()->getParent().getPath(), fslist.begin()->getParent()); + SearchMan.addDirectory(fslist.begin()->getParent()); // Open the archives Gob::DataIO dataIO; diff --git a/engines/gob/iniconfig.cpp b/engines/gob/iniconfig.cpp index 1709aba19a4..7e21c72865c 100644 --- a/engines/gob/iniconfig.cpp +++ b/engines/gob/iniconfig.cpp @@ -75,7 +75,9 @@ bool INIConfig::openConfig(const Common::String &file, Config &config) { config.config = new Common::INIFile(); config.created = false; - if (!config.config->loadFromFile(file)) { + // GOB uses \ as a path separator but + // it almost always manipulates base names + if (!config.config->loadFromFile(Common::Path(file, '\\'))) { delete config.config; config.config = nullptr; return false; diff --git a/engines/gob/init_v7.cpp b/engines/gob/init_v7.cpp index 9076ca09aab..d201ee420a2 100644 --- a/engines/gob/init_v7.cpp +++ b/engines/gob/init_v7.cpp @@ -33,7 +33,7 @@ Init_v7::~Init_v7() { } void Init_v7::initGame() { - const Common::FSNode gameDataDir(ConfMan.get("path")); + const Common::FSNode gameDataDir(ConfMan.getPath("path")); // Add the environment directory SearchMan.addSubDirectoryMatching(gameDataDir, "envir"); diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp index aa67735095e..8e95d5ebc74 100644 --- a/engines/gob/inter_v7.cpp +++ b/engines/gob/inter_v7.cpp @@ -724,7 +724,7 @@ void Inter_v7::o7_setActiveCD() { Common::String str1 = _vm->_game->_script->evalString(); Common::ArchiveMemberDetailsList files; - SearchMan.listMatchingMembers(files, str0); + SearchMan.listMatchingMembers(files, Common::Path(str0)); Common::String savedCDpath = _currentCDPath; for (Common::ArchiveMemberDetails file : files) { @@ -739,7 +739,7 @@ void Inter_v7::o7_setActiveCD() { } void Inter_v7::o7_findFile() { - Common::String file_pattern = getFile(_vm->_game->_script->evalString()); + Common::Path file_pattern(getFile(_vm->_game->_script->evalString())); Common::ArchiveMemberList files; SearchMan.listMatchingMembers(files, file_pattern); @@ -758,7 +758,7 @@ void Inter_v7::o7_findFile() { } debugC(5, kDebugFileIO, "o7_findFile(%s): %d matches (%d including duplicates)", - file_pattern.c_str(), + file_pattern.toString().c_str(), filesWithoutDuplicates.size(), files.size()); @@ -769,7 +769,7 @@ void Inter_v7::o7_findFile() { Common::String file = files.front()->getName(); filesWithoutDuplicates.pop_front(); debugC(5, kDebugFileIO, "o7_findFile(%s): first match = %s", - file_pattern.c_str(), + file_pattern.toString().c_str(), file.c_str()); storeString(file.c_str()); @@ -961,7 +961,7 @@ void Inter_v7::o7_opendBase() { dbFile += ".DBF"; _databases.setLanguage(_vm->_language); - if (!_databases.open(id, dbFile)) { + if (!_databases.open(id, Common::Path(dbFile))) { WRITE_VAR(27, 0); // Failure return; } @@ -1250,7 +1250,7 @@ void Inter_v7::o7_checkData(OpFuncParams ¶ms) { if (indexAppli == -1) { // New appli, find the first directory containing an application still not installed, and set it as "current CD" path. Common::ArchiveMemberDetailsList files; - SearchMan.listMatchingMembers(files, file); // Search for CD.INF files + SearchMan.listMatchingMembers(files, Common::Path(file)); // Search for CD.INF files for (Common::ArchiveMemberDetails &cdInfFile : files) { Common::SeekableReadStream *stream = cdInfFile.arcMember->createReadStream(); while (stream->pos() + 4 <= stream->size()) { @@ -1266,7 +1266,7 @@ void Inter_v7::o7_checkData(OpFuncParams ¶ms) { } else if (indexAppli >= 0 && (size_t) indexAppli <= installedApplications.size()) { // Already installed appli, find its directory and set it as "current CD" path int32 applicationNumber = installedApplications[indexAppli - 1]; - Common::String appliVmdName = Common::String::format("appli_%02d.vmd", applicationNumber); + Common::Path appliVmdName(Common::String::format("appli_%02d.vmd", applicationNumber)); Common::ArchiveMemberDetailsList matchingFiles; SearchMan.listMatchingMembers(matchingFiles, appliVmdName); for (Common::ArchiveMemberDetails &matchingFile : matchingFiles) { diff --git a/engines/gob/resources.cpp b/engines/gob/resources.cpp index b7ce2efa3cb..0489ecbf2f8 100644 --- a/engines/gob/resources.cpp +++ b/engines/gob/resources.cpp @@ -586,7 +586,7 @@ byte *Resources::getTexts() const { } bool Resources::dumpResource(const Resource &resource, - const Common::String &fileName) const { + const Common::Path &fileName) const { Common::DumpFile dump; @@ -614,7 +614,7 @@ bool Resources::dumpResource(const Resource &resource, uint16 id, fileName += "."; fileName += ext; - return dumpResource(resource, fileName); + return dumpResource(resource, Common::Path(fileName)); } Resource *Resources::getTOTResource(uint16 id) const { diff --git a/engines/gob/resources.h b/engines/gob/resources.h index 433b56d09a2..57b30fb9cd6 100644 --- a/engines/gob/resources.h +++ b/engines/gob/resources.h @@ -25,6 +25,7 @@ #include "common/str.h" namespace Common { +class Path; class SeekableReadStream; } @@ -88,7 +89,7 @@ public: byte *getTexts() const; bool dumpResource(const Resource &resource, - const Common::String &fileName) const; + const Common::Path &fileName) const; bool dumpResource(const Resource &resource, uint16 id, const Common::String &ext = "dmp") const;