[Scummvm-cvs-logs] SF.net SVN: scummvm:[33132] residual/trunk/engine

aquadran at users.sourceforge.net aquadran at users.sourceforge.net
Sun Jul 20 17:53:15 CEST 2008


Revision: 33132
          http://scummvm.svn.sourceforge.net/scummvm/?rev=33132&view=rev
Author:   aquadran
Date:     2008-07-20 15:53:14 +0000 (Sun, 20 Jul 2008)

Log Message:
-----------
use common savefilemanager for savegame.cpp code

Modified Paths:
--------------
    residual/trunk/engine/savegame.cpp
    residual/trunk/engine/savegame.h

Modified: residual/trunk/engine/savegame.cpp
===================================================================
--- residual/trunk/engine/savegame.cpp	2008-07-20 15:42:52 UTC (rev 33131)
+++ residual/trunk/engine/savegame.cpp	2008-07-20 15:53:14 UTC (rev 33132)
@@ -38,27 +38,24 @@
 SaveGame::SaveGame(const char *filename, bool saving) :
 		_saving(saving), _currentSection(0) {
 	if (_saving) {
-		uint32 tag = SAVEGAME_HEADERTAG;
-		uint32 version = SAVEGAME_VERSION;
-		
-		_fileHandle = gzopen(filename, "wb");
-		if (_fileHandle == NULL) {
+		_outSaveFile = g_saveFileMan->openForSaving(filename);
+		if (!_outSaveFile) {
 			warning("SaveGame::SaveGame() Error creating savegame file");
 			return;
 		}
-		gzwrite(_fileHandle, &tag, 4);
-		gzwrite(_fileHandle, &version, 4);
+		_outSaveFile->writeUint32LE(SAVEGAME_HEADERTAG);
+		_outSaveFile->writeUint32LE(SAVEGAME_VERSION);
 	} else {
 		uint32 tag, version;
-		
-		_fileHandle = gzopen(filename, "rb");
-		if (_fileHandle == NULL) {
+
+		_inSaveFile = g_saveFileMan->openForLoading(filename);
+		if (!_inSaveFile) {
 			warning("SaveGame::SaveGame() Error opening savegame file");
 			return;
 		}
-		gzread(_fileHandle, &tag, 4);
+		tag = _inSaveFile->readUint32LE();
 		assert(tag == SAVEGAME_HEADERTAG);
-		gzread(_fileHandle, &version, 4);
+		version = _inSaveFile->readUint32LE();
 		assert(version == SAVEGAME_VERSION);
 	}
 }
@@ -66,8 +63,14 @@
 SaveGame::~SaveGame() {
 	uint32 tag = SAVEGAME_FOOTERTAG;
 	
-	gzwrite(_fileHandle, &tag, 4);
-	gzclose(_fileHandle);
+	if (_saving) {
+		_outSaveFile->writeUint32LE(SAVEGAME_FOOTERTAG);
+		_outSaveFile->finalize();
+		if (_outSaveFile->ioFailed())
+			warning("SaveGame::~SaveGame()Can't write file. (Disk full?)");
+		delete _outSaveFile;
+	} else
+		delete _inSaveFile;
 }
 
 uint32 SaveGame::beginSection(uint32 sectionTag) {
@@ -75,18 +78,18 @@
 		error("Tried to begin a new save game section with ending old section!");
 	_currentSection = sectionTag;
 	_sectionSize = 0;
-	_sectionBuffer = new char[_sectionSize];
+	_sectionBuffer = (byte *)malloc(_sectionSize);
 	if (!_saving) {
 		uint32 tag = 0;
 		
 		while (tag != sectionTag) {
-			delete[] _sectionBuffer;
-			gzread(_fileHandle, &tag, sizeof(uint32));
+			free(_sectionBuffer);
+			tag = _inSaveFile->readUint32LE();
 			if (tag == SAVEGAME_FOOTERTAG)
 				error("Unable to find requested section of savegame!");
-			gzread(_fileHandle, &_sectionSize, sizeof(uint32));
-			_sectionBuffer = new char[_sectionSize];
-			gzread(_fileHandle, _sectionBuffer, _sectionSize);
+			_sectionSize = _inSaveFile->readUint32LE();
+			_sectionBuffer = (byte *)malloc(_sectionSize);
+			_inSaveFile->read(_sectionBuffer, _sectionSize);
 		}
 	}
 	_sectionPtr = 0;
@@ -96,12 +99,12 @@
 void SaveGame::endSection() {
 	if (_currentSection == 0)
 		error("Tried to end a save game section without starting a section!");
-	if(_saving) {
-		gzwrite(_fileHandle, &_currentSection, sizeof(uint32));
-		gzwrite(_fileHandle, &_sectionSize, sizeof(uint32));
-		gzwrite(_fileHandle, _sectionBuffer, _sectionSize);
+	if (_saving) {
+		_outSaveFile->writeUint32LE(_currentSection);
+		_outSaveFile->writeUint32LE(_sectionSize);
+		_outSaveFile->write(_sectionBuffer, _sectionSize);
 	}
-	delete[] _sectionBuffer;
+	free(_sectionBuffer);
 	_sectionBuffer = NULL;
 	_currentSection = 0;
 }
@@ -120,8 +123,8 @@
 		error("SaveGame::writeBlock called when restoring a savegame!");
 	if (_currentSection == 0)
 		error("Tried to write a block without starting a section!");
-	_sectionBuffer = (char *)realloc(_sectionBuffer, _sectionSize + size);
-	if (_sectionBuffer == NULL)
+	_sectionBuffer = (byte *)realloc(_sectionBuffer, _sectionSize + size);
+	if (!_sectionBuffer)
 		error("Failed to allocate space for buffer!");
 	memcpy(&_sectionBuffer[_sectionSize], data, size);
 	_sectionSize += size;

Modified: residual/trunk/engine/savegame.h
===================================================================
--- residual/trunk/engine/savegame.h	2008-07-20 15:42:52 UTC (rev 33131)
+++ residual/trunk/engine/savegame.h	2008-07-20 15:53:14 UTC (rev 33132)
@@ -38,6 +38,8 @@
 
 namespace Common {
 	class SaveFileManager;
+	class InSaveFile;
+	class OutSaveFile;
 }
 
 extern Common::SaveFileManager *g_saveFileMan;
@@ -54,11 +56,12 @@
 
 protected:
 	bool _saving;
-	gzFile _fileHandle;
+	Common::InSaveFile *_inSaveFile;
+	Common::OutSaveFile *_outSaveFile;
 	uint32 _currentSection;
 	uint32 _sectionSize;
 	uint32 _sectionPtr;
-	char *_sectionBuffer;
+	byte *_sectionBuffer;
 };
 
 #endif


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