aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorPaul Gilbert2013-12-15 17:51:47 -0500
committerPaul Gilbert2013-12-15 17:51:47 -0500
commit663d08b192027a534f077168b72e79fe63a799fd (patch)
tree6012ea9e7ee3131d699beda54272863c9f8fdb0b /engines
parent28ecf5ba53c81389dfd3ef8f7f4ee25d00ced39e (diff)
downloadscummvm-rg350-663d08b192027a534f077168b72e79fe63a799fd.tar.gz
scummvm-rg350-663d08b192027a534f077168b72e79fe63a799fd.tar.bz2
scummvm-rg350-663d08b192027a534f077168b72e79fe63a799fd.zip
VOYEUR: Fix for when multiple bolt files are open
Diffstat (limited to 'engines')
-rw-r--r--engines/voyeur/files.cpp10
-rw-r--r--engines/voyeur/files.h3
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();