SCUMM: Fix Valgrind mismatched delete errors in SMUSH channel base class.

This was due to the SMUSH channel base class using new/delete to manage buffer, but the imuse_channel and saud_channel classes which subclass and override this using malloc/free.
The more C++ solution of moving all to new/delete was tried, but the buffer is passed into a MemoryReadStream and free()'d there, so all classes have been moved to malloc/free instead.
This is not a critical problem as the buffers are byte primitive type anyway.

svn-id: r55660
This commit is contained in:
David Turner 2011-01-30 16:50:55 +00:00
parent b644c6d466
commit ec885e5665

View File

@ -41,8 +41,8 @@ SmushChannel::SmushChannel(int32 track) :
} }
SmushChannel::~SmushChannel() { SmushChannel::~SmushChannel() {
delete[] _tbuffer; free(_tbuffer);
delete[] _sbuffer; free(_sbuffer);
} }
void SmushChannel::processBuffer() { void SmushChannel::processBuffer() {
@ -60,7 +60,7 @@ void SmushChannel::processBuffer() {
_sbuffer = _tbuffer; _sbuffer = _tbuffer;
if (offset < _tbufferSize) { if (offset < _tbufferSize) {
int new_size = _tbufferSize - offset; int new_size = _tbufferSize - offset;
_tbuffer = new byte[new_size]; _tbuffer = (byte *)malloc(new_size);
if (!_tbuffer) if (!_tbuffer)
error("smush channel failed to allocate memory"); error("smush channel failed to allocate memory");
memcpy(_tbuffer, _sbuffer + offset, new_size); memcpy(_tbuffer, _sbuffer + offset, new_size);
@ -70,7 +70,7 @@ void SmushChannel::processBuffer() {
_tbufferSize = 0; _tbufferSize = 0;
} }
if (_sbufferSize == 0) { if (_sbufferSize == 0) {
delete[] _sbuffer; free(_sbuffer);
_sbuffer = 0; _sbuffer = 0;
} }
} else { } else {
@ -86,23 +86,23 @@ void SmushChannel::processBuffer() {
if (_inData) { if (_inData) {
_sbufferSize = _tbufferSize - offset; _sbufferSize = _tbufferSize - offset;
assert(_sbufferSize); assert(_sbufferSize);
_sbuffer = new byte[_sbufferSize]; _sbuffer = (byte *)malloc(_sbufferSize);
if (!_sbuffer) if (!_sbuffer)
error("smush channel failed to allocate memory"); error("smush channel failed to allocate memory");
memcpy(_sbuffer, _tbuffer + offset, _sbufferSize); memcpy(_sbuffer, _tbuffer + offset, _sbufferSize);
delete[] _tbuffer; free(_tbuffer);
_tbuffer = 0; _tbuffer = 0;
_tbufferSize = 0; _tbufferSize = 0;
} else { } else {
if (offset) { if (offset) {
byte *old = _tbuffer; byte *old = _tbuffer;
int32 new_size = _tbufferSize - offset; int32 new_size = _tbufferSize - offset;
_tbuffer = new byte[new_size]; _tbuffer = (byte *)malloc(new_size);
if (!_tbuffer) if (!_tbuffer)
error("smush channel failed to allocate memory"); error("smush channel failed to allocate memory");
memcpy(_tbuffer, old + offset, new_size); memcpy(_tbuffer, old + offset, new_size);
_tbufferSize = new_size; _tbufferSize = new_size;
delete[] old; free(old);
} }
} }
} }