diff options
author | Willem Jan Palenstijn | 2017-09-20 20:55:40 +0200 |
---|---|---|
committer | GitHub | 2017-09-20 20:55:40 +0200 |
commit | 7a58db8b92d58d81a3752140c7983de7595db13d (patch) | |
tree | 7580d3f0c7bbc7f5a3e476161644997a19876384 /engines | |
parent | 1515bb31a6fa802314836a9904756d7fcc840c69 (diff) | |
parent | 31089578129fc810188277eb546715e5409fb124 (diff) | |
download | scummvm-rg350-7a58db8b92d58d81a3752140c7983de7595db13d.tar.gz scummvm-rg350-7a58db8b92d58d81a3752140c7983de7595db13d.tar.bz2 scummvm-rg350-7a58db8b92d58d81a3752140c7983de7595db13d.zip |
Merge pull request #1024 from wjp/detection_searchman
Clean up use of SearchMan in fallback detection
Diffstat (limited to 'engines')
-rw-r--r-- | engines/cge/detection.cpp | 5 | ||||
-rw-r--r-- | engines/cge2/detection.cpp | 5 | ||||
-rw-r--r-- | engines/director/detection.cpp | 52 | ||||
-rw-r--r-- | engines/sludge/detection.cpp | 20 |
4 files changed, 32 insertions, 50 deletions
diff --git a/engines/cge/detection.cpp b/engines/cge/detection.cpp index 0df1e8711e..482591bf50 100644 --- a/engines/cge/detection.cpp +++ b/engines/cge/detection.cpp @@ -159,13 +159,14 @@ const ADGameDescription *CGEMetaEngine::fallbackDetect(const FileMap &allFiles, if (!game) return nullptr; - SearchMan.clear(); - SearchMan.addDirectory(fslist.begin()->getParent().getPath(), fslist.begin()->getParent()); + SearchMan.addDirectory("CGEMetaEngine::fallbackDetect", fslist.begin()->getParent()); ResourceManager *resman; resman = new ResourceManager(); bool result = resman->exist("CGE.SAY"); delete resman; + SearchMan.remove("CGEMetaEngine::fallbackDetect"); + if (!result) return nullptr; diff --git a/engines/cge2/detection.cpp b/engines/cge2/detection.cpp index 5a4f286d5b..d05dfffedc 100644 --- a/engines/cge2/detection.cpp +++ b/engines/cge2/detection.cpp @@ -157,13 +157,14 @@ const ADGameDescription *CGE2MetaEngine::fallbackDetect(const FileMap &allFiles, if (!game) return 0; - SearchMan.clear(); - SearchMan.addDirectory(fslist.begin()->getParent().getPath(), fslist.begin()->getParent()); + SearchMan.addDirectory("CGE2MetaEngine::fallbackDetect", fslist.begin()->getParent()); ResourceManager *resman; resman = new ResourceManager(); bool result = resman->exist("CGE.SAY"); delete resman; + SearchMan.remove("CGE2MetaEngine::fallbackDetect"); + if (!result) return 0; diff --git a/engines/director/detection.cpp b/engines/director/detection.cpp index dd10b6c044..a3f9b7c2f5 100644 --- a/engines/director/detection.cpp +++ b/engines/director/detection.cpp @@ -165,26 +165,20 @@ const ADGameDescription *DirectorMetaEngine::fallbackDetect(const FileMap &allFi if (!fileName.hasSuffix(".exe")) continue; - SearchMan.clear(); - SearchMan.addDirectory(file->getParent().getName(), file->getParent()); - - Common::SeekableReadStream *stream = SearchMan.createReadStreamForMember(file->getName()); - - if (!stream) + Common::File f; + if (!f.open(*file)) continue; - stream->seek(-4, SEEK_END); + f.seek(-4, SEEK_END); - uint32 offset = stream->readUint32LE(); + uint32 offset = f.readUint32LE(); - if (stream->eos() || offset == 0 || offset >= (uint32)(stream->size() - 4)) { - delete stream; + if (f.eos() || offset == 0 || offset >= (uint32)(f.size() - 4)) continue; - } - stream->seek(offset); + f.seek(offset); - uint32 tag = stream->readUint32LE(); + uint32 tag = f.readUint32LE(); switch (tag) { case MKTAG('3', '9', 'J', 'P'): @@ -200,41 +194,31 @@ const ADGameDescription *DirectorMetaEngine::fallbackDetect(const FileMap &allFi // Prior to version 4, there was no tag here. So we'll use a bit of a // heuristic to detect. The first field is the entry count, of which // there should only be one. - if ((tag & 0xFFFF) != 1) { - delete stream; + if ((tag & 0xFFFF) != 1) continue; - } - stream->skip(3); + f.skip(3); - uint32 mmmSize = stream->readUint32LE(); + uint32 mmmSize = f.readUint32LE(); - if (stream->eos() || mmmSize == 0) { - delete stream; + if (f.eos() || mmmSize == 0) continue; - } - byte fileNameSize = stream->readByte(); + byte fileNameSize = f.readByte(); - if (stream->eos()) { - delete stream; + if (f.eos()) continue; - } - stream->skip(fileNameSize); - byte directoryNameSize = stream->readByte(); + f.skip(fileNameSize); + byte directoryNameSize = f.readByte(); - if (stream->eos()) { - delete stream; + if (f.eos()) continue; - } - stream->skip(directoryNameSize); + f.skip(directoryNameSize); - if (stream->pos() != stream->size() - 4) { - delete stream; + if (f.pos() != f.size() - 4) continue; - } // Assume v3 at this point (for now at least) desc->version = 3; diff --git a/engines/sludge/detection.cpp b/engines/sludge/detection.cpp index de5897b66c..cdb67fae79 100644 --- a/engines/sludge/detection.cpp +++ b/engines/sludge/detection.cpp @@ -122,26 +122,22 @@ const ADGameDescription *SludgeMetaEngine::fallbackDetect(const FileMap &allFile if (!(fileName.hasSuffix(".slg") || fileName == "gamedata")) continue; - SearchMan.clear(); - SearchMan.addDirectory(file->getParent().getName(), file->getParent()); - - Common::SeekableReadStream *stream = SearchMan.createReadStreamForMember(file->getName()); - - if (!stream) + Common::File f; + if (!f.open(*file)) continue; bool headerBad = false; - if (stream->readByte() != 'S') + if (f.readByte() != 'S') headerBad = true; - if (stream->readByte() != 'L') + if (f.readByte() != 'L') headerBad = true; - if (stream->readByte() != 'U') + if (f.readByte() != 'U') headerBad = true; - if (stream->readByte() != 'D') + if (f.readByte() != 'D') headerBad = true; - if (stream->readByte() != 'G') + if (f.readByte() != 'G') headerBad = true; - if (stream->readByte() != 'E') + if (f.readByte() != 'E') headerBad = true; if (headerBad) { continue; |