aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorMax Horn2008-11-07 09:57:54 +0000
committerMax Horn2008-11-07 09:57:54 +0000
commit903dd97aa1558ce994e2e44d6b8b33bd09f8dac0 (patch)
tree698e39a55b984f89880838ad9b3557749efb70c5 /common
parent81431f18cd620c521c7b880d6c8b41279721bafb (diff)
downloadscummvm-rg350-903dd97aa1558ce994e2e44d6b8b33bd09f8dac0.tar.gz
scummvm-rg350-903dd97aa1558ce994e2e44d6b8b33bd09f8dac0.tar.bz2
scummvm-rg350-903dd97aa1558ce994e2e44d6b8b33bd09f8dac0.zip
Refactoring the Arj decoder code, phase 3 (fixing some more leaks, too)
svn-id: r34924
Diffstat (limited to 'common')
-rw-r--r--common/unarj.cpp44
-rw-r--r--common/unarj.h1
2 files changed, 16 insertions, 29 deletions
diff --git a/common/unarj.cpp b/common/unarj.cpp
index d44e52e0dc..3753354010 100644
--- a/common/unarj.cpp
+++ b/common/unarj.cpp
@@ -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 @@ ArjFile::~ArjFile() {
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 @@ bool ArjFile::open(const Common::String &filename) {
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 @@ bool ArjFile::open(const Common::String &filename) {
byte *uncompressedData = (byte *)malloc(_decoder->_origsize);
_decoder->_outstream = new MemoryWriteStream(uncompressedData, _decoder->_origsize);
- _currArchive.open(_archMap[filename]);
- _currArchive.seek(hdr->pos, SEEK_SET);
-
-printf("Arj archive method %d, file '%s'\n", hdr->method, filename.c_str());
+ File archiveFile;
+ archiveFile.open(_archMap[filename]);
+ archiveFile.seek(hdr->pos, SEEK_SET);
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 @@ printf("Arj archive method %d, file '%s'\n", hdr->method, filename.c_str());
free(_compressedData);
}
- _currArchive.close();
delete _decoder->_outstream;
_decoder->_outstream = NULL;
@@ -396,15 +392,7 @@ printf("Arj archive method %d, file '%s'\n", hdr->method, filename.c_str());
}
void ArjFile::close() {
- if (!_uncompressed)
- return;
-
- if (_fallBack) {
- _currArchive.close();
- } else {
- delete _uncompressed;
- }
-
+ delete _uncompressed;
_uncompressed = NULL;
}
diff --git a/common/unarj.h b/common/unarj.h
index f3473a6d79..060e72f560 100644
--- a/common/unarj.h
+++ b/common/unarj.h
@@ -58,7 +58,6 @@ public:
private:
bool _fallBack;
- File _currArchive;
Array<ArjHeader *> _headers;
ArjFilesMap _fileMap;
StringMap _archMap;