[Scummvm-cvs-logs] SF.net SVN: scummvm:[49520] scummvm/trunk/engines/sci/resource.cpp

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Tue Jun 8 23:15:55 CEST 2010


Revision: 49520
          http://scummvm.svn.sourceforge.net/scummvm/?rev=49520&view=rev
Author:   m_kiewitz
Date:     2010-06-08 21:15:53 +0000 (Tue, 08 Jun 2010)

Log Message:
-----------
SCI: check for SOL header in audio36 patches

Modified Paths:
--------------
    scummvm/trunk/engines/sci/resource.cpp

Modified: scummvm/trunk/engines/sci/resource.cpp
===================================================================
--- scummvm/trunk/engines/sci/resource.cpp	2010-06-08 21:08:36 UTC (rev 49519)
+++ scummvm/trunk/engines/sci/resource.cpp	2010-06-08 21:15:53 UTC (rev 49520)
@@ -1072,15 +1072,17 @@
 	Common::SeekableReadStream *fileStream = 0;
 	Resource *newrsc;
 	ResourceId resId = ResourceId(resourceType, resourceNr, tuple);
+	ResourceType checkForType = resourceType;
 	byte patchType, patchDataOffset;
 	int fsize;
+	uint32 audio36Header = 0;
 
 	// base36 encoded patches (i.e. audio36 and sync36) have the same type as their non-base36 encoded counterparts
-	if (resourceType == kResourceTypeAudio36)
-		resourceType = kResourceTypeAudio;
+	if (checkForType == kResourceTypeAudio36)
+		checkForType = kResourceTypeAudio;
 
-	if (resourceType == kResourceTypeSync36)
-		resourceType = kResourceTypeSync;
+	if (checkForType == kResourceTypeSync36)
+		checkForType = kResourceTypeSync;
 
 	if (source->resourceFile) {
 		fileStream = source->resourceFile->createReadStream();
@@ -1101,12 +1103,24 @@
 	patchType = fileStream->readByte() & 0x7F;
 	patchDataOffset = fileStream->readByte();
 
+	if (resourceType == kResourceTypeAudio36) {
+		audio36Header = fileStream->readUint32BE();
+	}
+
 	delete fileStream;
 
-	if (patchType != resourceType) {
+	if (patchType != checkForType) {
 		debug("Patching %s failed - resource type mismatch", source->location_name.c_str());
+		return;
 	}
 
+	if (resourceType == kResourceTypeAudio36) {
+		if (audio36Header != MKID_BE('SOL\x00')) {
+			debug("Patching %s failed - audio36 patch doesn't have SOL header", source->location_name.c_str());
+			return;
+		}
+	}
+
 	// Fixes SQ5/German, patch file special case logic taken from SCI View disassembly
 	if (patchDataOffset & 0x80) {
 		switch (patchDataOffset & 0x7F) {


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list