diff options
author | Max Horn | 2008-11-07 09:57:54 +0000 |
---|---|---|
committer | Max Horn | 2008-11-07 09:57:54 +0000 |
commit | 903dd97aa1558ce994e2e44d6b8b33bd09f8dac0 (patch) | |
tree | 698e39a55b984f89880838ad9b3557749efb70c5 /common | |
parent | 81431f18cd620c521c7b880d6c8b41279721bafb (diff) | |
download | scummvm-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.cpp | 44 | ||||
-rw-r--r-- | common/unarj.h | 1 |
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; |