mirror of
https://github.com/libretro/scummvm.git
synced 2025-03-05 01:38:36 +00:00
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:
parent
b644c6d466
commit
ec885e5665
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user