Implement file fallback for archives
svn-id: r32476
This commit is contained in:
parent
ba5cebfaf8
commit
452d46b3bf
2 changed files with 21 additions and 2 deletions
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue