aboutsummaryrefslogtreecommitdiff
path: root/engines/mohawk
diff options
context:
space:
mode:
authorDavid Turner2010-11-09 11:02:06 +0000
committerDavid Turner2010-11-09 11:02:06 +0000
commit63d023964e1523d88463602a7b556e2c8fbe0799 (patch)
tree4b0c290fa42c6d25737b8b4c79e106cba737d551 /engines/mohawk
parent77a636aaec30f1e1e9f69038dbd397e9bb23dedf (diff)
downloadscummvm-rg350-63d023964e1523d88463602a7b556e2c8fbe0799.tar.gz
scummvm-rg350-63d023964e1523d88463602a7b556e2c8fbe0799.tar.bz2
scummvm-rg350-63d023964e1523d88463602a7b556e2c8fbe0799.zip
MOHAWK: Close a number of memory leaks in Myst.
These corrections close a number of leaks reported by running Valgrind with --leak-check=full option, but some still remain, mainly in the image loading and caching. svn-id: r54152
Diffstat (limited to 'engines/mohawk')
-rw-r--r--engines/mohawk/graphics.cpp1
-rw-r--r--engines/mohawk/myst.cpp64
-rw-r--r--engines/mohawk/myst.h9
3 files changed, 69 insertions, 5 deletions
diff --git a/engines/mohawk/graphics.cpp b/engines/mohawk/graphics.cpp
index f472a9d721..a2fb8e3f0c 100644
--- a/engines/mohawk/graphics.cpp
+++ b/engines/mohawk/graphics.cpp
@@ -92,6 +92,7 @@ MystGraphics::~MystGraphics() {
delete _bmpDecoder;
delete _jpegDecoder;
delete _pictDecoder;
+ delete[] _pictureFile.entries;
}
static const char* picFileNames[] = {
diff --git a/engines/mohawk/myst.cpp b/engines/mohawk/myst.cpp
index b351f611e3..be0ac1c2e4 100644
--- a/engines/mohawk/myst.cpp
+++ b/engines/mohawk/myst.cpp
@@ -64,6 +64,14 @@ MohawkEngine_Myst::MohawkEngine_Myst(OSystem *syst, const MohawkGameDescription
_needsUpdate = false;
_curResource = -1;
+ _gfx = NULL;
+ _console = NULL;
+ _scriptParser = NULL;
+ _varStore = NULL;
+ _saveLoad = NULL;
+ _loadDialog = NULL;
+ _optionsDialog = NULL;
+
_cursorHintCount = 0;
_cursorHints = NULL;
@@ -83,6 +91,8 @@ MohawkEngine_Myst::MohawkEngine_Myst(OSystem *syst, const MohawkGameDescription
}
MohawkEngine_Myst::~MohawkEngine_Myst() {
+ DebugMan.clearAllDebugChannels();
+
delete _gfx;
delete _console;
delete _scriptParser;
@@ -90,10 +100,17 @@ MohawkEngine_Myst::~MohawkEngine_Myst() {
delete _saveLoad;
delete _loadDialog;
delete _optionsDialog;
+
+ delete[] _cursorHints;
+
delete[] _view.conditionalImages;
delete[] _view.scriptResources;
- delete[] _cursorHints;
- _resources.clear();
+
+ while(!_resources.empty()) {
+ MystResource *temp = _resources.back();
+ _resources.pop_back();
+ delete temp;
+ }
}
// Uses cached data objects in preference to disk access
@@ -949,7 +966,11 @@ static MystResource *loadResource(MohawkEngine_Myst *vm, Common::SeekableReadStr
}
void MohawkEngine_Myst::loadResources() {
- _resources.clear();
+ while(!_resources.empty()) {
+ MystResource *temp = _resources.back();
+ _resources.pop_back();
+ delete temp;
+ }
if (!_view.rlst) {
debugC(kDebugResource, "No RLST present");
@@ -1011,6 +1032,9 @@ MystResource::MystResource(MohawkEngine_Myst *vm, Common::SeekableReadStream *rl
(_flags & kMystSubimageEnableFlag) != 0);
}
+MystResource::~MystResource() {
+}
+
void MystResource::handleMouseUp() {
if (_dest != 0)
_vm->changeToCard(_dest);
@@ -1021,6 +1045,7 @@ void MystResource::handleMouseUp() {
MystResourceType5::MystResourceType5(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent) : MystResource(vm, rlstStream, parent) {
debugC(kDebugResource, "\tResource Type 5 Script:");
+ _scripts = NULL;
_scriptCount = rlstStream->readUint16LE();
debugC(kDebugResource, "\tOpcode Count: %d", _scriptCount);
@@ -1046,6 +1071,12 @@ MystResourceType5::MystResourceType5(MohawkEngine_Myst *vm, Common::SeekableRead
}
}
+MystResourceType5::~MystResourceType5() {
+ for (uint16 i = 0; i < _scriptCount; i++)
+ delete[] _scripts[i].values;
+ delete[] _scripts;
+}
+
void MystResourceType5::handleMouseUp() {
_vm->_scriptParser->runScript(_scriptCount, _scripts, this);
}
@@ -1133,6 +1164,14 @@ MystResourceType7::MystResourceType7(MohawkEngine_Myst *vm, Common::SeekableRead
_subResources.push_back(loadResource(vm, rlstStream, this));
}
+MystResourceType7::~MystResourceType7() {
+ while(!_subResources.empty()) {
+ MystResource *temp = _subResources.back();
+ _subResources.pop_back();
+ delete temp;
+ }
+}
+
// TODO: All these functions to switch subresource are very similar.
// Find way to share code (function pointer pass?)
void MystResourceType7::drawDataToScreen() {
@@ -1286,6 +1325,10 @@ MystResourceType8::MystResourceType8(MohawkEngine_Myst *vm, Common::SeekableRead
}
}
+MystResourceType8::~MystResourceType8() {
+ delete[] _subImages;
+}
+
void MystResourceType8::drawDataToScreen() {
// Need to call overidden Type 7 function to ensure
// switch section is processed correctly.
@@ -1416,6 +1459,11 @@ MystResourceType10::MystResourceType10(MohawkEngine_Myst *vm, Common::SeekableRe
warning("TODO: Card contains Type 10 Resource - Function not yet implemented");
}
+MystResourceType10::~MystResourceType10() {
+ for (byte i = 0; i < 4; i++)
+ delete[] _lists[i].list;
+}
+
void MystResourceType10::handleMouseUp() {
// TODO
}
@@ -1472,6 +1520,11 @@ MystResourceType11::MystResourceType11(MohawkEngine_Myst *vm, Common::SeekableRe
warning("TODO: Card contains Type 11 Resource - Function not yet implemented");
}
+MystResourceType11::~MystResourceType11() {
+ for (byte i = 0; i < 3; i++)
+ delete[] _lists[i].list;
+}
+
void MystResourceType11::handleMouseUp() {
// TODO
@@ -1557,6 +1610,11 @@ MystResourceType12::MystResourceType12(MohawkEngine_Myst *vm, Common::SeekableRe
_doAnimation = false;
}
+MystResourceType12::~MystResourceType12() {
+ for (byte i = 0; i < 3; i++)
+ delete[] _lists[i].list;
+}
+
void MystResourceType12::handleAnimation() {
// TODO: Probably not final version. Variable/Type 11 Controlled?
if (_doAnimation) {
diff --git a/engines/mohawk/myst.h b/engines/mohawk/myst.h
index 7486e559bb..a66456e1c8 100644
--- a/engines/mohawk/myst.h
+++ b/engines/mohawk/myst.h
@@ -157,7 +157,7 @@ struct MystScriptEntry {
class MystResource {
public:
MystResource(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
- virtual ~MystResource() {}
+ virtual ~MystResource();
MystResource *_parent;
@@ -188,6 +188,7 @@ protected:
class MystResourceType5 : public MystResource {
public:
MystResourceType5(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
+ virtual ~MystResourceType5();
void handleMouseUp();
protected:
@@ -218,7 +219,7 @@ private:
struct MystResourceType7 : public MystResource {
public:
MystResourceType7(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
- virtual ~MystResourceType7() {}
+ virtual ~MystResourceType7();
virtual void drawDataToScreen();
virtual void handleAnimation();
@@ -237,6 +238,7 @@ protected:
class MystResourceType8 : public MystResourceType7 {
public:
MystResourceType8(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
+ virtual ~MystResourceType8();
void drawDataToScreen();
uint16 getType8Var();
@@ -254,6 +256,7 @@ protected:
class MystResourceType10 : public MystResourceType8 {
public:
MystResourceType10(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
+ virtual ~MystResourceType10();
void handleMouseUp();
protected:
@@ -273,6 +276,7 @@ protected:
class MystResourceType11 : public MystResourceType8 {
public:
MystResourceType11(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
+ virtual ~MystResourceType11();
void handleMouseUp();
protected:
@@ -292,6 +296,7 @@ protected:
class MystResourceType12 : public MystResourceType8 {
public:
MystResourceType12(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
+ virtual ~MystResourceType12();
void handleAnimation();
void handleMouseUp();