[Scummvm-cvs-logs] CVS: scummvm/scumm scumm.h,1.392,1.393 string.cpp,1.211,1.212

Max Horn fingolfin at users.sourceforge.net
Sat Apr 3 16:42:00 CEST 2004


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12599

Modified Files:
	scumm.h string.cpp 
Log Message:
got rid of _msgPtrToAdd; slightly improved error checking in addMessageToStack()

Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.392
retrieving revision 1.393
diff -u -d -r1.392 -r1.393
--- scumm.h	3 Apr 2004 19:41:31 -0000	1.392
+++ scumm.h	4 Apr 2004 00:29:13 -0000	1.393
@@ -1067,21 +1067,21 @@
 	int _charsetBufPos;
 	byte _charsetBuffer[512];
 
-protected:
+	bool _keepText;
+
 	void initCharset(int charset);
 
 	void CHARSET_1();
 	void drawString(int a, const byte *msg);
-	void addMessageToStack(const byte *msg, byte *dstBuffer, int dstBufferSize);
-	void addIntToStack(int var);
-	void addVerbToStack(int var);
-	void addNameToStack(int var);
-	void addStringToStack(int var);
 	void unkMessage1(const byte *msg);
 	void unkMessage2(const byte *msg);
-protected:
-	byte *_msgPtrToAdd;
-	bool _keepText;
+
+	int addMessageToStack(const byte *msg, byte *dst, int dstSize);
+	int addIntToStack(byte *dst, int dstSize, int var);
+	int addVerbToStack(byte *dst, int dstSize, int var);
+	int addNameToStack(byte *dst, int dstSize, int var);
+	int addStringToStack(byte *dst, int dstSize, int var);
+
 public:
 	Common::Language _language;
 protected:

Index: string.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/string.cpp,v
retrieving revision 1.211
retrieving revision 1.212
diff -u -d -r1.211 -r1.212
--- string.cpp	3 Apr 2004 19:41:31 -0000	1.211
+++ string.cpp	4 Apr 2004 00:29:13 -0000	1.212
@@ -454,55 +454,55 @@
 	}
 }
 
-void ScummEngine::addMessageToStack(const byte *msg, byte *dstBuffer, int dstBufferSize) {
+int ScummEngine::addMessageToStack(const byte *msg, byte *dst, int dstSize) {
 	uint num = 0;
 	uint32 val;
 	byte chr;
-	const byte *buf;
+	const byte *src;
+	byte *end;
 	byte transBuf[384];
 
-	if (dstBuffer) {
-		_msgPtrToAdd = dstBuffer;
-	}
+	assert(dst);
+	end = dst + dstSize;
 
 	if (msg == NULL) {
 		warning("Bad message in addMessageToStack, ignoring");
-		return;
+		return 0;
 	}
 
 	if (_version >= 7 && msg[0] == '/') {
 		translateText(msg, transBuf);
-		buf = transBuf;
+		src = transBuf;
 	} else {
-		buf = msg;
+		src = msg;
 	}
 
 	num = 0;
 
 	while (1) {
-		chr = buf[num++];
+		chr = src[num++];
 		if (chr == 0)
 			break;
 		if (chr == 0xFF) {
-			chr = buf[num++];
+			chr = src[num++];
 			if (chr == 1 || chr == 2 || chr == 3 || chr == 8) {
 				// Simply copy these special codes
-				*_msgPtrToAdd++ = 0xFF;
-				*_msgPtrToAdd++ = chr;
+				*dst++ = 0xFF;
+				*dst++ = chr;
 			} else {
-				val = (_version == 8) ? READ_LE_UINT32(buf + num) : READ_LE_UINT16(buf + num);
+				val = (_version == 8) ? READ_LE_UINT32(src + num) : READ_LE_UINT16(src + num);
 				switch (chr) {
 				case 4:
-					addIntToStack(val);
+					dst += addIntToStack(dst, end - dst, val);
 					break;
 				case 5:
-					addVerbToStack(val);
+					dst += addVerbToStack(dst, end - dst, val);
 					break;
 				case 6:
-					addNameToStack(val);
+					dst += addNameToStack(dst, end - dst, val);
 					break;
 				case 7:
-					addStringToStack(val);
+					dst += addStringToStack(dst, end - dst, val);
 					break;
 				case 9:
 				case 10:
@@ -510,13 +510,13 @@
 				case 13:
 				case 14:
 					// Simply copy these special codes
-					*_msgPtrToAdd++ = 0xFF;
-					*_msgPtrToAdd++ = chr;
-					*_msgPtrToAdd++ = buf[num+0];
-					*_msgPtrToAdd++ = buf[num+1];
+					*dst++ = 0xFF;
+					*dst++ = chr;
+					*dst++ = src[num+0];
+					*dst++ = src[num+1];
 					if (_version == 8) {
-						*_msgPtrToAdd++ = buf[num+2];
-						*_msgPtrToAdd++ = buf[num+3];
+						*dst++ = src[num+2];
+						*dst++ = src[num+3];
 					}
 					break;
 				default:
@@ -527,27 +527,27 @@
 			}
 		} else {
 			if (chr != '@') {
-				*_msgPtrToAdd++ = chr;
+				*dst++ = chr;
 			}
 		}
-	}
-	*_msgPtrToAdd = 0;
-
-	if (dstBuffer) {
+	
 		// Check for a buffer overflow
-		if (_msgPtrToAdd >= dstBuffer + dstBufferSize)
+		if (dst >= end)
 			error("addMessageToStack: buffer overflow!");
 	}
+	*dst = 0;
+	
+	return dstSize - (end - dst);
 }
 
-void ScummEngine::addIntToStack(int var) {
+int ScummEngine::addIntToStack(byte *dst, int dstSize, int var) {
 	int num;
 
 	num = readVar(var);
-	_msgPtrToAdd += sprintf((char *)_msgPtrToAdd, "%d", num);
+	return snprintf((char *)dst, dstSize, "%d", num);
 }
 
-void ScummEngine::addVerbToStack(int var) {
+int ScummEngine::addVerbToStack(byte *dst, int dstSize, int var) {
 	int num, k;
 
 	num = readVar(var);
@@ -555,36 +555,40 @@
 		for (k = 1; k < _numVerbs; k++) {
 			if (num == _verbs[k].verbid && !_verbs[k].type && !_verbs[k].saveid) {
 				const byte *ptr = getResourceAddress(rtVerb, k);
-				addMessageToStack(ptr, 0, 0);
-				break;
+				return addMessageToStack(ptr, dst, dstSize);
 			}
 		}
 	}
+	return 0;
 }
 
-void ScummEngine::addNameToStack(int var) {
+int ScummEngine::addNameToStack(byte *dst, int dstSize, int var) {
 	int num;
 
 	num = readVar(var);
 	if (num) {
 		const byte *ptr = getObjOrActorName(num);
 		if (ptr) {
-			addMessageToStack(ptr, 0, 0);
+			return addMessageToStack(ptr, dst, dstSize);
 		}
 	}
+	return 0;
 }
 
-void ScummEngine::addStringToStack(int var) {
+int ScummEngine::addStringToStack(byte *dst, int dstSize, int var) {
 	const byte *ptr;
 
 	if (_version <= 2) {
 		byte chr;
+		int i = 0;
 		while ((chr = (byte)_scummVars[var++])) {
-			if (chr != '@')
-				*_msgPtrToAdd++ = chr;
+			if (chr != '@') {
+				*dst++ = chr;
+				i++;
+			}
 		}
 
-		return;
+		return i;
 	}
 
 	if (_version == 3 || _version >= 6)
@@ -593,9 +597,10 @@
 	if (var) {
 		ptr = getStringAddress(var);
 		if (ptr) {
-			addMessageToStack(ptr, 0, 0);
+			return addMessageToStack(ptr, dst, dstSize);
 		}
 	}
+	return 0;
 }
 
 void ScummEngine::initCharset(int charsetno) {





More information about the Scummvm-git-logs mailing list