Implement file fallback for archives

svn-id: r32476
This commit is contained in:
Eugene Sandulenko 2008-06-01 21:10:29 +00:00
parent ba5cebfaf8
commit 452d46b3bf
2 changed files with 21 additions and 2 deletions

View file

@ -78,6 +78,7 @@ static uint32 GetCRC(byte *data, int len) {
ArjFile::ArjFile() {
InitCRC();
_isOpen = false;
_fallBack = false;
}
ArjFile::~ArjFile() {
@ -234,6 +235,15 @@ bool ArjFile::open(const Common::String &filename, AccessMode mode) {
_isOpen = false;
if (_fallBack) {
_currArchive.open(filename);
if (_currArchive.isOpen()) {
_isOpen = true;
_uncompressed = &_currArchive;
return true;
}
}
if (!_fileMap.contains(filename))
return false;
@ -279,7 +289,12 @@ bool ArjFile::open(const Common::String &filename, AccessMode mode) {
void ArjFile::close() {
_isOpen = false;
delete _uncompressed;
if (_fallBack) {
_currArchive.close();
} else {
delete _uncompressed;
}
_uncompressed = NULL;
free(_uncompressedData);

View file

@ -106,6 +106,8 @@ public:
ArjFile();
~ArjFile();
void enableFallback(bool val) { _fallBack = val; }
void registerArchive(const String &filename);
bool open(const Common::String &filename, AccessMode mode = kFileReadMode);
@ -119,6 +121,8 @@ public:
bool isOpen() { return _isOpen; }
private:
bool _fallBack;
File _currArchive;
Array<ArjHeader *> _headers;
ArjFilesMap _fileMap;
@ -128,7 +132,7 @@ private:
byte *_compressedData;
MemoryWriteStream *_outstream;
MemoryReadStream *_compressed;
MemoryReadStream *_uncompressed;
SeekableReadStream *_uncompressed;
bool _isOpen;