aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorAndre Heider2009-02-26 21:17:53 +0000
committerAndre Heider2009-02-26 21:17:53 +0000
commit2d1fd81f90ca0583d1e28b57926079cec3d6c48c (patch)
tree8d7736dd41b254e979e26666db2a2fcd39925ae2 /engines
parentf8648767e4882de9adb8f23c9bae8d5146dc3fd9 (diff)
downloadscummvm-rg350-2d1fd81f90ca0583d1e28b57926079cec3d6c48c.tar.gz
scummvm-rg350-2d1fd81f90ca0583d1e28b57926079cec3d6c48c.tar.bz2
scummvm-rg350-2d1fd81f90ca0583d1e28b57926079cec3d6c48c.zip
start out with an empty array of file handles, so the Enginestates matches between startup and restart. really check its size before accessing it (fixes LSL3 restart)
svn-id: r38915
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/engine/game.cpp2
-rw-r--r--engines/sci/engine/kfile.cpp10
2 files changed, 7 insertions, 5 deletions
diff --git a/engines/sci/engine/game.cpp b/engines/sci/engine/game.cpp
index 250610dfb7..03fbb74266 100644
--- a/engines/sci/engine/game.cpp
+++ b/engines/sci/engine/game.cpp
@@ -528,8 +528,6 @@ EngineState::EngineState() {
kernel_opt_flags = 0;
- _fileHandles.resize(5);
-
dirseeker = 0;
execution_stack = 0;
diff --git a/engines/sci/engine/kfile.cpp b/engines/sci/engine/kfile.cpp
index 7638bab28a..4c615ff6b4 100644
--- a/engines/sci/engine/kfile.cpp
+++ b/engines/sci/engine/kfile.cpp
@@ -379,12 +379,16 @@ void file_open(EngineState *s, char *filename, int mode) {
return;
}
- uint retval = 1; // Ignore _fileHandles[0]
+ uint retval = 0;
while ((retval < s->_fileHandles.size()) && s->_fileHandles[retval]._file)
retval++;
- if (retval == s->_fileHandles.size()) { // Hit size limit => Allocate more space
- s->_fileHandles.resize(s->_fileHandles.size() + 1);
+ // Ignore _fileHandles[0]
+ if (retval < 1)
+ retval = 1;
+
+ if (retval >= s->_fileHandles.size()) { // Hit size limit => Allocate more space
+ s->_fileHandles.resize(retval + 1);
}
s->_fileHandles[retval]._file = file;