diff options
author | Hein-Pieter van Braam | 2017-05-28 11:40:07 +0200 |
---|---|---|
committer | GitHub | 2017-05-28 11:40:07 +0200 |
commit | d6645f3fc9bbd74174be544417780185fd9a9743 (patch) | |
tree | 1772e01b194ee6dc70b077025d5aa451cbb41760 | |
parent | 379314c27d3eae18b903bc4ca7500c7d3500c4f9 (diff) | |
parent | 159e5a97ce4f04eddd3d91a00aee2f3131b13a50 (diff) | |
download | scummvm-rg350-d6645f3fc9bbd74174be544417780185fd9a9743.tar.gz scummvm-rg350-d6645f3fc9bbd74174be544417780185fd9a9743.tar.bz2 scummvm-rg350-d6645f3fc9bbd74174be544417780185fd9a9743.zip |
Merge pull request #949 from csnover/advanceddetector-fullpaths
ENGINES: Allow detection entries to match on full paths
-rw-r--r-- | engines/advancedDetector.cpp | 9 | ||||
-rw-r--r-- | engines/advancedDetector.h | 13 |
2 files changed, 17 insertions, 5 deletions
diff --git a/engines/advancedDetector.cpp b/engines/advancedDetector.cpp index 8b6dc0c0d9..64f462a936 100644 --- a/engines/advancedDetector.cpp +++ b/engines/advancedDetector.cpp @@ -345,7 +345,7 @@ void AdvancedMetaEngine::reportUnknown(const Common::FSNode &path, const ADFileP g_system->logMessage(LogMessageType::kInfo, report.c_str()); } -void AdvancedMetaEngine::composeFileHashMap(FileMap &allFiles, const Common::FSList &fslist, int depth) const { +void AdvancedMetaEngine::composeFileHashMap(FileMap &allFiles, const Common::FSList &fslist, int depth, const Common::String &parentName) const { if (depth <= 0) return; @@ -353,6 +353,8 @@ void AdvancedMetaEngine::composeFileHashMap(FileMap &allFiles, const Common::FSL return; for (Common::FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) { + Common::String tstr = (_matchFullPaths && !parentName.empty() ? parentName + "/" : "") + file->getName(); + if (file->isDirectory()) { Common::FSList files; @@ -372,11 +374,9 @@ void AdvancedMetaEngine::composeFileHashMap(FileMap &allFiles, const Common::FSL if (!file->getChildren(files, Common::FSNode::kListAll)) continue; - composeFileHashMap(allFiles, files, depth - 1); + composeFileHashMap(allFiles, files, depth - 1, tstr); } - Common::String tstr = file->getName(); - // Strip any trailing dot if (tstr.lastChar() == '.') tstr.deleteLastChar(); @@ -625,6 +625,7 @@ AdvancedMetaEngine::AdvancedMetaEngine(const void *descs, uint descItemSize, con _guiOptions = GUIO_NONE; _maxScanDepth = 1; _directoryGlobs = NULL; + _matchFullPaths = false; } void AdvancedMetaEngine::initSubSystems(const ADGameDescription *gameDesc) const { diff --git a/engines/advancedDetector.h b/engines/advancedDetector.h index ab3ec22bdc..e218c41b52 100644 --- a/engines/advancedDetector.h +++ b/engines/advancedDetector.h @@ -251,6 +251,17 @@ protected: */ const char * const *_directoryGlobs; + /** + * If true, filenames will be matched against the entire path, relative to + * the root detection directory (e.g. "foo/bar.000" for a file at + * "<root>/foo/bar.000"). Otherwise, filenames only match the basename + * (e.g. "bar.000" for the same file). + * + * @note _maxScanDepth and _directoryGlobs must still be configured to allow + * the detector to find files inside subdirectories. + */ + bool _matchFullPaths; + public: AdvancedMetaEngine(const void *descs, uint descItemSize, const PlainGameDescriptor *gameIds, const ADExtraGuiOptionsMap *extraGuiOptions = 0); @@ -326,7 +337,7 @@ protected: * Compose a hashmap of all files in fslist. * Includes nifty stuff like removing trailing dots and ignoring case. */ - void composeFileHashMap(FileMap &allFiles, const Common::FSList &fslist, int depth) const; + void composeFileHashMap(FileMap &allFiles, const Common::FSList &fslist, int depth, const Common::String &parentName = Common::String()) const; /** Get the properties (size and MD5) of this file. */ bool getFileProperties(const Common::FSNode &parent, const FileMap &allFiles, const ADGameDescription &game, const Common::String fname, ADFileProperties &fileProps) const; |