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

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Tue Jun 1 17:38:35 CEST 2010


Revision: 49375
          http://scummvm.svn.sourceforge.net/scummvm/?rev=49375&view=rev
Author:   fingolfin
Date:     2010-06-01 15:38:34 +0000 (Tue, 01 Jun 2010)

Log Message:
-----------
SCI: Fix malloc<->new mismatch in SysStrings, try to increase readability

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

Modified: scummvm/trunk/engines/sci/engine/kernel32.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel32.cpp	2010-06-01 15:38:09 UTC (rev 49374)
+++ scummvm/trunk/engines/sci/engine/kernel32.cpp	2010-06-01 15:38:34 UTC (rev 49375)
@@ -577,14 +577,14 @@
 		// We have a special case here for argv[1] being a system string
 		if (argv[1].segment == s->_segMan->getSysStringsSegment()) {
 			// Resize if necessary
-			if ((uint32)s->_segMan->sysStrings->_strings[argv[1].toUint16()]._maxSize < index1 + count) {
-				delete[] s->_segMan->sysStrings->_strings[argv[1].toUint16()]._value;
-				s->_segMan->sysStrings->_strings[argv[1].toUint16()]._maxSize = index1 + count;
-				s->_segMan->sysStrings->_strings[argv[1].toUint16()]._value = new char[index1 + count];
-				memset(s->_segMan->sysStrings->_strings[argv[1].toUint16()]._value, 0, index1 + count);
+			const uint16 sysStringId = argv[1].toUint16();
+			if ((uint32)s->_segMan->sysStrings->_strings[sysStringId]._maxSize < index1 + count) {
+				free(s->_segMan->sysStrings->_strings[sysStringId]._value);
+				s->_segMan->sysStrings->_strings[sysStringId]._maxSize = index1 + count;
+				s->_segMan->sysStrings->_strings[sysStringId]._value = (char *)calloc(index1 + count, sizeof(char));
 			}
 
-			strncpy(s->_segMan->sysStrings->_strings[argv[1].toUint16()]._value + index1, string2.c_str() + index2, count);
+			strncpy(s->_segMan->sysStrings->_strings[sysStringId]._value + index1, string2.c_str() + index2, count);
 		} else {
 			SciString *string1 = s->_segMan->lookupString(argv[1]);
 


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