[Scummvm-cvs-logs] SF.net SVN: scummvm:[44421] scummvm/trunk/engines/sci/engine

wjpalenstijn at users.sourceforge.net wjpalenstijn at users.sourceforge.net
Sun Sep 27 23:00:50 CEST 2009


Revision: 44421
          http://scummvm.svn.sourceforge.net/scummvm/?rev=44421&view=rev
Author:   wjpalenstijn
Date:     2009-09-27 21:00:45 +0000 (Sun, 27 Sep 2009)

Log Message:
-----------
SCI: Adjust isValidOffset to match changes from r44396,
and make maxSize report the valid space starting at offset.

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/seg_manager.cpp
    scummvm/trunk/engines/sci/engine/segment.cpp

Modified: scummvm/trunk/engines/sci/engine/seg_manager.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/seg_manager.cpp	2009-09-27 20:50:15 UTC (rev 44420)
+++ scummvm/trunk/engines/sci/engine/seg_manager.cpp	2009-09-27 21:00:45 UTC (rev 44421)
@@ -864,7 +864,7 @@
 		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) {

Modified: scummvm/trunk/engines/sci/engine/segment.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/segment.cpp	2009-09-27 20:50:15 UTC (rev 44420)
+++ scummvm/trunk/engines/sci/engine/segment.cpp	2009-09-27 21:00:45 UTC (rev 44421)
@@ -233,17 +233,13 @@
 
 	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 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 @@
 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;
 }


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list