diff options
author | Paul Gilbert | 2013-12-15 17:51:47 -0500 |
---|---|---|
committer | Paul Gilbert | 2013-12-15 17:51:47 -0500 |
commit | 663d08b192027a534f077168b72e79fe63a799fd (patch) | |
tree | 6012ea9e7ee3131d699beda54272863c9f8fdb0b | |
parent | 28ecf5ba53c81389dfd3ef8f7f4ee25d00ced39e (diff) | |
download | scummvm-rg350-663d08b192027a534f077168b72e79fe63a799fd.tar.gz scummvm-rg350-663d08b192027a534f077168b72e79fe63a799fd.tar.bz2 scummvm-rg350-663d08b192027a534f077168b72e79fe63a799fd.zip |
VOYEUR: Fix for when multiple bolt files are open
-rw-r--r-- | engines/voyeur/files.cpp | 10 | ||||
-rw-r--r-- | engines/voyeur/files.h | 3 |
2 files changed, 8 insertions, 5 deletions
diff --git a/engines/voyeur/files.cpp b/engines/voyeur/files.cpp index a9473d4b70..28f4763877 100644 --- a/engines/voyeur/files.cpp +++ b/engines/voyeur/files.cpp @@ -163,9 +163,10 @@ byte *BoltFilesState::decompress(byte *buf, int size, int mode) { #undef NEXT_BYTE void BoltFilesState::nextBlock() { - if (_curFilePosition != _bufferEnd) - _curFd->seek(_bufferEnd); + if (&_curLibPtr->_file != _curFd || _curFilePosition != _bufferEnd) + _curLibPtr->_file.seek(_bufferEnd); + _curFd = &_curLibPtr->_file; _bufferBegin = _bufferEnd; int bytesRead = _curFd->read(_bufStart, _bufSize); @@ -219,7 +220,6 @@ byte *FilesManager::fload(const Common::String &filename, int *size) { /*------------------------------------------------------------------------*/ BoltFile::BoltFile(const Common::String &filename, BoltFilesState &state): _state(state) { - _state._curFd = &_file; if (!_file.open(filename)) error("Could not open %s", filename.c_str()); _state._curFilePosition = 0; @@ -233,13 +233,15 @@ BoltFile::BoltFile(const Common::String &filename, BoltFilesState &state): _stat int totalGroups = header[11] ? header[11] : 0x100; for (int i = 0; i < totalGroups; ++i) - _groups.push_back(BoltGroup(_state._curFd)); + _groups.push_back(BoltGroup(&_file)); } BoltFile::~BoltFile() { _file.close(); if (_state._curFd == &_file) _state._curFd = NULL; + if (_state._curLibPtr == this) + _state._curLibPtr = NULL; } BoltGroup *BoltFile::getBoltGroup(uint16 id, bool process) { diff --git a/engines/voyeur/files.h b/engines/voyeur/files.h index 28c77bb5f1..e82d6a83bc 100644 --- a/engines/voyeur/files.h +++ b/engines/voyeur/files.h @@ -100,7 +100,6 @@ public: class BoltFile { private: Common::Array<BoltGroup> _groups; - Common::File _file; protected: BoltFilesState &_state; @@ -116,6 +115,8 @@ private: void initGro() {} // TODO void termGro() {} // TODO public: + Common::File _file; +public: BoltFile(const Common::String &filename, BoltFilesState &state); virtual ~BoltFile(); |