diff options
author | Willem Jan Palenstijn | 2009-09-27 21:00:45 +0000 |
---|---|---|
committer | Willem Jan Palenstijn | 2009-09-27 21:00:45 +0000 |
commit | 7971d77dd6bfbe788a01ec2985d1b73847c0dd44 (patch) | |
tree | 7ef142fe2f9740bf1a896dd0848dd16aba54a954 /engines/sci | |
parent | caa3b6707e4cd6a20f2d20d57f9748b8ece89852 (diff) | |
download | scummvm-rg350-7971d77dd6bfbe788a01ec2985d1b73847c0dd44.tar.gz scummvm-rg350-7971d77dd6bfbe788a01ec2985d1b73847c0dd44.tar.bz2 scummvm-rg350-7971d77dd6bfbe788a01ec2985d1b73847c0dd44.zip |
SCI: Adjust isValidOffset to match changes from r44396,
and make maxSize report the valid space starting at offset.
svn-id: r44421
Diffstat (limited to 'engines/sci')
-rw-r--r-- | engines/sci/engine/seg_manager.cpp | 2 | ||||
-rw-r--r-- | engines/sci/engine/segment.cpp | 14 |
2 files changed, 6 insertions, 10 deletions
diff --git a/engines/sci/engine/seg_manager.cpp b/engines/sci/engine/seg_manager.cpp index cb8900ec09..4e770d26d7 100644 --- a/engines/sci/engine/seg_manager.cpp +++ b/engines/sci/engine/seg_manager.cpp @@ -864,7 +864,7 @@ reg_t *SegManager::derefRegPtr(reg_t pointer, int entries) { return NULL; } - return (reg_t *)_kernel_dereference_pointer(this, pointer, entries, false); + return (reg_t *)_kernel_dereference_pointer(this, pointer, 2*entries, false); } char *SegManager::derefString(reg_t pointer, int entries) { diff --git a/engines/sci/engine/segment.cpp b/engines/sci/engine/segment.cpp index 5851ec994a..bb9de42321 100644 --- a/engines/sci/engine/segment.cpp +++ b/engines/sci/engine/segment.cpp @@ -233,17 +233,13 @@ SegmentRef Script::dereference(reg_t pointer) { SegmentRef ret; ret.isRaw = true; - // FIXME: here we subtract pointer.offset from maxSize, elsewhere we don't -- huh? - // It's hard to say which is right, because it depends on how the various - // SegManager::deref*() methods are used. It's quite possible that this variant - // is "correct" and all the others aren't... we'll have to find out. ret.maxSize = _bufSize - pointer.offset; ret.raw = _buf + pointer.offset; return ret; } bool LocalVariables::isValidOffset(uint16 offset) const { - return offset < _locals.size() * sizeof(reg_t); + return offset < _locals.size() * 2; } SegmentRef LocalVariables::dereference(reg_t pointer) { @@ -263,19 +259,19 @@ SegmentRef LocalVariables::dereference(reg_t pointer) { SegmentRef ret; ret.isRaw = false; // reg_t based data! - ret.maxSize = _locals.size() * sizeof(reg_t); + ret.maxSize = (_locals.size() - pointer.offset/2) * 2; ret.raw = (byte *)&_locals[pointer.offset/2]; return ret; } bool DataStack::isValidOffset(uint16 offset) const { - return offset < _capacity * sizeof(reg_t); + return offset < _capacity * 2; } SegmentRef DataStack::dereference(reg_t pointer) { SegmentRef ret; ret.isRaw = false; // reg_t based data! - ret.maxSize = _capacity * sizeof(reg_t); + ret.maxSize = (_capacity - pointer.offset/2) * 2; // FIXME: Is this correct? See comment in LocalVariables::dereference if (pointer.offset & 1) warning("LocalVariables::dereference: Odd offset in pointer %04x:%04x", PRINT_REG(pointer)); @@ -290,7 +286,7 @@ bool DynMem::isValidOffset(uint16 offset) const { SegmentRef DynMem::dereference(reg_t pointer) { SegmentRef ret; ret.isRaw = true; - ret.maxSize = _size; + ret.maxSize = _size - pointer.offset; ret.raw = _buf + pointer.offset; return ret; } |