[Scummvm-cvs-logs] CVS: scummvm/sword1 sound.cpp,1.32,1.33

Torbjörn Andersson eriktorbjorn at users.sourceforge.net
Sat Oct 30 03:36:15 CEST 2004


Update of /cvsroot/scummvm/scummvm/sword1
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1222

Modified Files:
	sound.cpp 
Log Message:
Brute-force workaround for speech decoder crashes in the BS1 demo. It still
doesn't work very well, though...


Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/sound.cpp,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -d -r1.32 -r1.33
--- sound.cpp	21 Oct 2004 12:43:48 -0000	1.32
+++ sound.cpp	30 Oct 2004 10:35:39 -0000	1.33
@@ -214,20 +214,40 @@
 		} else
 			resSize = READ_LE_UINT32(fBuf + headerPos + 4) >> 1;
 		int16 *srcData = (int16*)(fBuf + headerPos + 8);
-		int16 *dstData = (int16*)malloc(resSize * 2);
 		uint32 srcPos = 0;
-		int16 *dstPos = dstData;
+		uint32 dstPos = 0;
 		cSize = (cSize - (headerPos + 8)) / 2;
+		if (_cowMode == CowDemo) {
+			// FIXME: Until someone figures out how to really
+			//        calculate the uncompressed buffer size, use
+			//        brute force to avoid crashes.
+			debug(1, "old resSize = %d", resSize);
+			resSize = 0;
+			while (srcPos < cSize) {
+				int16 length = (int16)READ_LE_UINT16(srcData + srcPos);
+				srcPos++;
+				if (length < 0) {
+					length = -length;
+					srcPos++;
+				} else {
+					srcPos += length;
+				}
+				resSize += length;
+			}
+			debug(1, "new resSize = %d", resSize);
+		}
+		int16 *dstData = (int16*)malloc(resSize * 2);
+		srcPos = 0;
 		while (srcPos < cSize) {
 			int16 length = (int16)READ_LE_UINT16(srcData + srcPos);
 			srcPos++;
 			if (length < 0) {
 				length = -length;
 				for (uint16 cnt = 0; cnt < (uint16)length; cnt++)
-					*dstPos++ = srcData[srcPos];
+					dstData[dstPos++] = srcData[srcPos];
 				srcPos++;
 			} else {
-				memcpy(dstPos, srcData + srcPos, length * 2);
+				memcpy(dstData + dstPos, srcData + srcPos, length * 2);
 				dstPos += length;
 				srcPos += length;
 			}





More information about the Scummvm-git-logs mailing list