[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