[Scummvm-cvs-logs] SF.net SVN: scummvm:[36191] scummvm/trunk/engines/kyra/sound.cpp

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Sun Feb 1 22:11:04 CET 2009


Revision: 36191
          http://scummvm.svn.sourceforge.net/scummvm/?rev=36191&view=rev
Author:   lordhoto
Date:     2009-02-01 21:11:03 +0000 (Sun, 01 Feb 2009)

Log Message:
-----------
- Cleanup
- This time fixed the real cause of the mismatching malloc / delete[] call.

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/sound.cpp

Modified: scummvm/trunk/engines/kyra/sound.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sound.cpp	2009-02-01 21:09:29 UTC (rev 36190)
+++ scummvm/trunk/engines/kyra/sound.cpp	2009-02-01 21:11:03 UTC (rev 36191)
@@ -125,15 +125,28 @@
 	Audio::AppendableAudioStream *out = Audio::makeAppendableAudioStream(22050, Audio::Mixer::FLAG_AUTOFREE | Audio::Mixer::FLAG_UNSIGNED);
 	
 	for (Common::List<const char*>::iterator i = fileList.begin(); i != fileList.end(); i++) {
-		uint32 fileSize = 0;
-		uint8 *file = _vm->resource()->fileData(*i, &fileSize);
-		Common::MemoryReadStream vocStream(file, fileSize, false);
+		Common::SeekableReadStream *file = _vm->resource()->createReadStream(*i);
 
+		// TODO: Maybe output an warning like "file not found"?
+		if (!file)
+			continue;
+
 		int size, rate;
-		uint8 *data = Audio::loadVOCFromStream(vocStream, size, rate);
-		out->queueBuffer(data, size);
-		delete[] file;
+		uint8 *data = Audio::loadVOCFromStream(*file, size, rate);
+		delete file;
+
+		// FIXME/HACK: While loadVOCStream uses malloc / realloc,
+		// AppendableAudioStream uses delete[] to free the passed buffer.
+		// As a consequence we just 'move' the data to a buffer allocated
+		// via new[].
+		uint8 *vocBuffer = new uint8[size];
+		assert(vocBuffer);
+		memcpy(vocBuffer, data, size);
+		free(data);
+
+		out->queueBuffer(vocBuffer, size);
 	}
+
 	out->finish();
 	
 	_soundChannels[h].file = *fileList.begin();


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