[Scummvm-cvs-logs] SF.net SVN: scummvm:[34924] scummvm/trunk/common

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Fri Nov 7 10:57:54 CET 2008


Revision: 34924
          http://scummvm.svn.sourceforge.net/scummvm/?rev=34924&view=rev
Author:   fingolfin
Date:     2008-11-07 09:57:54 +0000 (Fri, 07 Nov 2008)

Log Message:
-----------
Refactoring the Arj decoder code, phase 3 (fixing some more leaks, too)

Modified Paths:
--------------
    scummvm/trunk/common/unarj.cpp
    scummvm/trunk/common/unarj.h

Modified: scummvm/trunk/common/unarj.cpp
===================================================================
--- scummvm/trunk/common/unarj.cpp	2008-11-07 09:50:51 UTC (rev 34923)
+++ scummvm/trunk/common/unarj.cpp	2008-11-07 09:57:54 UTC (rev 34924)
@@ -28,6 +28,7 @@
 // from http://arj.sourceforge.net/ , version 3.10.22 .
 
 #include "common/scummsys.h"
+#include "common/archive.h"
 #include "common/util.h"
 #include "common/unarj.h"
 
@@ -197,32 +198,31 @@
 void ArjFile::registerArchive(const String &filename) {
 	int32 first_hdr_pos;
 	ArjHeader *header;
+	File archiveFile;
 
-	if (!_currArchive.open(filename))
+	if (!archiveFile.open(filename))
 		return;
 
-	first_hdr_pos = _decoder->findHeader(_currArchive);
+	first_hdr_pos = _decoder->findHeader(archiveFile);
 
 	if (first_hdr_pos < 0) {
 		warning("ArjFile::registerArchive(): Could not find a valid header");
 		return;
 	}
 
-	_currArchive.seek(first_hdr_pos, SEEK_SET);
-	if (_decoder->readHeader(_currArchive) == NULL)
+	archiveFile.seek(first_hdr_pos, SEEK_SET);
+	if (_decoder->readHeader(archiveFile) == NULL)
 		return;
 
-	while ((header = _decoder->readHeader(_currArchive)) != NULL) {
+	while ((header = _decoder->readHeader(archiveFile)) != NULL) {
 		_headers.push_back(header);
 
-		_currArchive.seek(header->compSize, SEEK_CUR);
+		archiveFile.seek(header->compSize, SEEK_CUR);
 
 		_fileMap[header->filename] = _headers.size() - 1;
 		_archMap[header->filename] = filename;
 	}
 
-	_currArchive.close();
-
 	debug(0, "ArjFile::registerArchive(%s): Located %d files", filename.c_str(), _headers.size());
 }
 
@@ -345,11 +345,9 @@
 		error("Attempt to open another instance of archive");
 
 	if (_fallBack) {
-		_currArchive.open(filename);
-		if (_currArchive.isOpen()) {
-			_uncompressed = &_currArchive;
+		_uncompressed = SearchMan.openFile(filename);
+		if (_uncompressed)
 			return true;
-		}
 	}
 
 	if (!_fileMap.contains(filename))
@@ -363,16 +361,15 @@
 	byte *uncompressedData = (byte *)malloc(_decoder->_origsize);
 	_decoder->_outstream = new MemoryWriteStream(uncompressedData, _decoder->_origsize);
 
-	_currArchive.open(_archMap[filename]);
-	_currArchive.seek(hdr->pos, SEEK_SET);
+	File archiveFile;
+	archiveFile.open(_archMap[filename]);
+	archiveFile.seek(hdr->pos, SEEK_SET);
 
-printf("Arj archive method %d, file '%s'\n", hdr->method, filename.c_str());
-
 	if (hdr->method == 0) { // store
-        _currArchive.read(uncompressedData, _decoder->	_origsize);
+        archiveFile.read(uncompressedData, _decoder->	_origsize);
 	} else {
 		byte *_compressedData = (byte *)malloc(_decoder->_compsize);
-		_currArchive.read(_compressedData, _decoder->_compsize);
+		archiveFile.read(_compressedData, _decoder->_compsize);
 
 		_decoder->_compressed = new MemoryReadStream(_compressedData, _decoder->_compsize);
 
@@ -385,7 +382,6 @@
 		free(_compressedData);
 	}
 
-	_currArchive.close();
 	delete _decoder->_outstream;
 	_decoder->_outstream = NULL;
 
@@ -396,15 +392,7 @@
 }
 
 void ArjFile::close() {
-	if (!_uncompressed)
-		return;
-
-	if (_fallBack) {
-		_currArchive.close();
-	} else {
-		delete _uncompressed;
-	}
-
+	delete _uncompressed;
 	_uncompressed = NULL;
 }
 

Modified: scummvm/trunk/common/unarj.h
===================================================================
--- scummvm/trunk/common/unarj.h	2008-11-07 09:50:51 UTC (rev 34923)
+++ scummvm/trunk/common/unarj.h	2008-11-07 09:57:54 UTC (rev 34924)
@@ -58,7 +58,6 @@
 private:
 	bool _fallBack;
 
-	File _currArchive;
 	Array<ArjHeader *> _headers;
 	ArjFilesMap _fileMap;
 	StringMap _archMap;


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