[Scummvm-cvs-logs] SF.net SVN: scummvm: [28487] scummvm/trunk/engines/gob

drmccoy at users.sourceforge.net drmccoy at users.sourceforge.net
Tue Aug 7 22:43:41 CEST 2007


Revision: 28487
          http://scummvm.svn.sourceforge.net/scummvm/?rev=28487&view=rev
Author:   drmccoy
Date:     2007-08-07 13:43:41 -0700 (Tue, 07 Aug 2007)

Log Message:
-----------
Fixing my leak fix...

Modified Paths:
--------------
    scummvm/trunk/engines/gob/saveload.cpp
    scummvm/trunk/engines/gob/saveload.h
    scummvm/trunk/engines/gob/saveload_v2.cpp
    scummvm/trunk/engines/gob/saveload_v3.cpp

Modified: scummvm/trunk/engines/gob/saveload.cpp
===================================================================
--- scummvm/trunk/engines/gob/saveload.cpp	2007-08-07 18:51:34 UTC (rev 28486)
+++ scummvm/trunk/engines/gob/saveload.cpp	2007-08-07 20:43:41 UTC (rev 28487)
@@ -62,9 +62,11 @@
 }
 
 SaveLoad::~SaveLoad() {
-	for (int i = 0; i < _stagesCount; i++)
-		delete[] _buffer[i];
-	delete[] _buffer;
+	if (_buffer) {
+		for (int i = 0; i < _stagesCount; i++)
+			delete[] _buffer[i];
+		delete[] _buffer;
+	}
 
 	delete _tempSprite;
 

Modified: scummvm/trunk/engines/gob/saveload.h
===================================================================
--- scummvm/trunk/engines/gob/saveload.h	2007-08-07 18:51:34 UTC (rev 28486)
+++ scummvm/trunk/engines/gob/saveload.h	2007-08-07 20:43:41 UTC (rev 28487)
@@ -116,7 +116,7 @@
 	virtual SaveType getSaveType(const char *fileName);
 
 	SaveLoad_v2(GobEngine *vm, const char *targetName);
-	virtual ~SaveLoad_v2();
+	virtual ~SaveLoad_v2() {}
 
 protected:
 	virtual uint32 getSaveGameSize();
@@ -130,6 +130,8 @@
 	virtual bool saveGame(int16 dataVar, int32 size, int32 offset);
 	virtual bool saveNotes(int16 dataVar, int32 size, int32 offset);
 	virtual bool saveScreenshot(int16 dataVar, int32 size, int32 offset);
+
+	void initBuffer();
 };
 
 class SaveLoad_v3 : public SaveLoad_v2 {
@@ -160,6 +162,7 @@
 	virtual bool saveScreenshot(int16 dataVar, int32 size, int32 offset);
 
 	bool saveGame(int32 screenshotSize);
+	void initBuffer();
 };
 
 } // End of namespace Gob

Modified: scummvm/trunk/engines/gob/saveload_v2.cpp
===================================================================
--- scummvm/trunk/engines/gob/saveload_v2.cpp	2007-08-07 18:51:34 UTC (rev 28486)
+++ scummvm/trunk/engines/gob/saveload_v2.cpp	2007-08-07 20:43:41 UTC (rev 28487)
@@ -38,18 +38,8 @@
 	SaveLoad(vm, targetName) {
 
 	_stagesCount = 1;
-
-	_buffer = new byte*[_stagesCount];
-
-	assert(_buffer);
-
-	_buffer[0] = 0;
 }
 
-SaveLoad_v2::~SaveLoad_v2() {
-	delete[] _buffer;
-}
-
 SaveType SaveLoad_v2::getSaveType(const char *fileName) {
 	const char *backSlash;
 	if ((backSlash = strrchr(fileName, '\\')))
@@ -194,6 +184,8 @@
 bool SaveLoad_v2::saveGame(int16 dataVar, int32 size, int32 offset) {
 	int32 varSize = READ_LE_UINT32(_vm->_game->_totFileData + 0x2C) * 4;
 
+	initBuffer();
+
 	if (size == 0) {
 		dataVar = 0;
 		size = varSize;
@@ -293,4 +285,13 @@
 	return false;
 }
 
+void SaveLoad_v2::initBuffer() {
+	if (_buffer)
+		return;
+
+	_buffer = new byte*[_stagesCount];
+	assert(_buffer);
+	_buffer[0] = 0;
+}
+
 } // End of namespace Gob

Modified: scummvm/trunk/engines/gob/saveload_v3.cpp
===================================================================
--- scummvm/trunk/engines/gob/saveload_v3.cpp	2007-08-07 18:51:34 UTC (rev 28486)
+++ scummvm/trunk/engines/gob/saveload_v3.cpp	2007-08-07 20:43:41 UTC (rev 28487)
@@ -45,19 +45,6 @@
 	_saveSlot = -1;
 	_stagesCount = 3;
 
-	_buffer = new byte*[_stagesCount];
-
-	assert(_buffer);
-
-	_buffer[0] = new byte[1000];
-	_buffer[1] = new byte[1200];
-	_buffer[2] = 0;
-
-	assert(_buffer[0] && _buffer[1]);
-
-	memset(_buffer[0], 0, 1000);
-	memset(_buffer[1], 0, 1200);
-
 	_useScreenshots = false;
 	_firstSizeGame = true;
 }
@@ -146,6 +133,8 @@
 	int slot = (offset - 1700) / varSize;
 	int slotR = (offset - 1700) % varSize;
 
+	initBuffer();
+
 	if ((size > 0) && (offset < 500) && ((size + offset) <= 500)) {
 
 		memcpy(_vm->_global->_inter_variables + dataVar,
@@ -279,6 +268,8 @@
 	int slot = (offset - 1700) / varSize;
 	int slotR = (offset - 1700) % varSize;
 
+	initBuffer();
+
 	if ((size > 0) && (offset < 500) && ((size + offset) <= 500)) {
 
 		memcpy(_buffer[0] + offset,
@@ -360,6 +351,8 @@
 
 	_saveSlot = -1;
 
+	initBuffer();
+
 	if ((slot < 0) || (slot > 29)) {
 		warning("Can't save to slot %d: Out of range", slot);
 		delete[] _buffer[2];
@@ -433,4 +426,22 @@
 	return true;
 }
 
+void SaveLoad_v3::initBuffer() {
+	if (_buffer)
+		return;
+
+	_buffer = new byte*[_stagesCount];
+
+	assert(_buffer);
+
+	_buffer[0] = new byte[1000];
+	_buffer[1] = new byte[1200];
+	_buffer[2] = 0;
+
+	assert(_buffer[0] && _buffer[1]);
+
+	memset(_buffer[0], 0, 1000);
+	memset(_buffer[1], 0, 1200);
+}
+
 } // End of namespace Gob


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