[Scummvm-cvs-logs] SF.net SVN: scummvm:[48888] tools/trunk/engines/sci/compress_sci.cpp

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Sun May 2 12:04:38 CEST 2010


Revision: 48888
          http://scummvm.svn.sourceforge.net/scummvm/?rev=48888&view=rev
Author:   m_kiewitz
Date:     2010-05-02 10:04:38 +0000 (Sun, 02 May 2010)

Log Message:
-----------
TOOLS/SCI: add workarounds for errors in freddy pharkas resource.sfx

Modified Paths:
--------------
    tools/trunk/engines/sci/compress_sci.cpp

Modified: tools/trunk/engines/sci/compress_sci.cpp
===================================================================
--- tools/trunk/engines/sci/compress_sci.cpp	2010-05-01 22:20:50 UTC (rev 48887)
+++ tools/trunk/engines/sci/compress_sci.cpp	2010-05-02 10:04:38 UTC (rev 48888)
@@ -69,6 +69,14 @@
 	byte buffer[20];
 	uint32 dataSize;
 	memcpy(&buffer, header, 6);
+	if ((memcmp(buffer + 1, "RIFF", 4) == 0) || (memcmp(buffer + 1, "\x8d\x0bSOL", 4) == 0)) {
+		// Fixup for pharkas resource.sfx, several WAVE files contain a size thats not right (-1 byte)
+		for (int i = 0; i < 5; i++)
+			buffer[i] = buffer[i + 1];
+		_input.read_throwsOnError(&buffer[5], 1);
+		_inputOffset++;
+		warning("WAVE resource position adjusted at %lx\n", _inputOffset);
+	}
 	if (memcmp(buffer, "RIFF", 4) == 0) {
 		// WAVE files begin with
 		// "RIFF" [size of following data:DWORD]
@@ -344,19 +352,23 @@
 
 	int resourceCount = 0;
 	do {
-		print("offset %lx\n", _inputOffset);
 		recognizedDataType = detectData(header, false);
 		if (!recognizedDataType)
 			error("Unsupported data at offset %lx", _inputOffset);
 		_input.seek(_inputEndOffset, SEEK_SET);
 		_inputOffset = _inputEndOffset;
-		if (_inputOffset == _inputSize)
+		// We abort even, if file position is one below size because of pharkas resource.sfx
+		if (_inputOffset >= _inputSize - 1)
 			break;
 
 		resourceCount++;
 		_input.read_throwsOnError(&header, 6);
 	} while (true);
 
+	// This case happens on pharkas resource.sfx
+	if (_inputOffset != _inputSize)
+		warning("resource file has additional byte before end-of-file\n");
+
 	print("Valid sci audio resource file. Found %d resources", resourceCount);
 
 	// Now write basic output file header


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