[Scummvm-git-logs] scummvm master -> b9e072275b68ab2aeeefb5c2213db0dd27e39e1d

sev- sev at scummvm.org
Mon Mar 27 00:49:03 CEST 2017


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
b9e072275b DIRECTOR: Fixed processing of embedded RIFF archives


Commit: b9e072275b68ab2aeeefb5c2213db0dd27e39e1d
    https://github.com/scummvm/scummvm/commit/b9e072275b68ab2aeeefb5c2213db0dd27e39e1d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-03-27T00:48:56+02:00

Commit Message:
DIRECTOR: Fixed processing of embedded RIFF archives

Changed paths:
    engines/director/archive.cpp
    engines/director/archive.h


diff --git a/engines/director/archive.cpp b/engines/director/archive.cpp
index 340db3d..bcd064b 100644
--- a/engines/director/archive.cpp
+++ b/engines/director/archive.cpp
@@ -248,6 +248,8 @@ Common::SeekableSubReadStreamEndian *MacArchive::getResource(uint32 tag, uint16
 bool RIFFArchive::openStream(Common::SeekableReadStream *stream, uint32 startOffset) {
 	close();
 
+	_startOffset = startOffset;
+
 	stream->seek(startOffset);
 
 	if (convertTagToUppercase(stream->readUint32BE()) != MKTAG('R', 'I', 'F', 'F'))
@@ -289,11 +291,11 @@ bool RIFFArchive::openStream(Common::SeekableReadStream *stream, uint32 startOff
 
 		stream->seek(startResPos);
 
-		debug(3, "Found RIFF resource '%s' %d: %d @ 0x%08x", tag2str(tag), id, size, startOffset + offset);
+		debug(3, "Found RIFF resource '%s' %d: %d @ 0x%08x (0x%08x)", tag2str(tag), id, size, offset, startOffset + offset);
 
 		ResourceMap &resMap = _types[tag];
 		Resource &res = resMap[id];
-		res.offset = offset + startOffset;
+		res.offset = offset;
 		res.size = size;
 		res.name = name;
 	}
@@ -317,7 +319,7 @@ Common::SeekableSubReadStreamEndian *RIFFArchive::getResource(uint32 tag, uint16
 	uint32 offset = res.offset + 12;
 	uint32 size = res.size - 4;
 	// Skip the Pascal string
-	_stream->seek(offset);
+	_stream->seek(_startOffset + offset);
 	byte stringSize = _stream->readByte(); // 1 for this byte
 
 	offset += stringSize + 1;
@@ -329,7 +331,7 @@ Common::SeekableSubReadStreamEndian *RIFFArchive::getResource(uint32 tag, uint16
 		size--;
 	}
 
-	return new Common::SeekableSubReadStreamEndian(_stream, offset, offset + size, true, DisposeAfterUse::NO);
+	return new Common::SeekableSubReadStreamEndian(_stream, _startOffset + offset, _startOffset + offset + size, true, DisposeAfterUse::NO);
 }
 
 // RIFX Archive code
diff --git a/engines/director/archive.h b/engines/director/archive.h
index 40b15d5..28be6cf 100644
--- a/engines/director/archive.h
+++ b/engines/director/archive.h
@@ -94,11 +94,13 @@ private:
 
 class RIFFArchive : public Archive {
 public:
-	RIFFArchive() : Archive() {}
+	RIFFArchive() : Archive() { _startOffset = 0; }
 	~RIFFArchive() {}
 
 	bool openStream(Common::SeekableReadStream *stream, uint32 startOffset = 0);
 	Common::SeekableSubReadStreamEndian *getResource(uint32 tag, uint16 id);
+
+	uint32 _startOffset;
 };
 
 class RIFXArchive : public Archive {





More information about the Scummvm-git-logs mailing list