aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2017-09-20 20:55:40 +0200
committerGitHub2017-09-20 20:55:40 +0200
commit7a58db8b92d58d81a3752140c7983de7595db13d (patch)
tree7580d3f0c7bbc7f5a3e476161644997a19876384
parent1515bb31a6fa802314836a9904756d7fcc840c69 (diff)
parent31089578129fc810188277eb546715e5409fb124 (diff)
downloadscummvm-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
-rw-r--r--engines/cge/detection.cpp5
-rw-r--r--engines/cge2/detection.cpp5
-rw-r--r--engines/director/detection.cpp52
-rw-r--r--engines/sludge/detection.cpp20
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;