[Scummvm-cvs-logs] scummvm master -> ebeeb467c429e5ea3a03a903f530c8252cc57d0c

sev- sev at scummvm.org
Tue May 3 19:52:39 CEST 2016


This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
0ec2acba20 TEENAGENT: Renames and cleanup
0d44f77ab3 TONY: Fix numerous memory leaks
acfcbd5919 LASTEXPRESS: Fix logic comparison
ebeeb467c4 SCUMM HE: Fixes to T14 image clipping


Commit: 0ec2acba20bf757a4575402ce098ecfe89526fab
    https://github.com/scummvm/scummvm/commit/0ec2acba20bf757a4575402ce098ecfe89526fab
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-05-03T12:41:36+02:00

Commit Message:
TEENAGENT: Renames and cleanup

Changed paths:
    engines/teenagent/music.cpp
    engines/teenagent/music.h
    engines/teenagent/objects.h
    engines/teenagent/scene.cpp
    engines/teenagent/scene.h
    engines/teenagent/teenagent.cpp



diff --git a/engines/teenagent/music.cpp b/engines/teenagent/music.cpp
index 5d66c3c..795b8f7 100644
--- a/engines/teenagent/music.cpp
+++ b/engines/teenagent/music.cpp
@@ -36,7 +36,7 @@ static const uint32 noteToPeriod[3][12] = {
 	{214, 201, 189, 179, 170, 160, 151, 143, 135, 127, 120, 113}
 };
 
-MusicPlayer::MusicPlayer(TeenAgentEngine *vm) : Paula(false, 44100, 5000), _vm(vm), _id(0) {
+MusicPlayer::MusicPlayer(TeenAgentEngine *vm) : Paula(false, 44100, 5000), _vm(vm), _id(0), _currRow(0) {
 }
 
 MusicPlayer::~MusicPlayer() {
@@ -55,7 +55,7 @@ bool MusicPlayer::load(int id) {
 
 	Common::StackLock lock(_mutex);
 	// Load the samples
-	sampleCount = stream->readByte();
+	byte sampleCount = stream->readByte();
 
 	debugC(0, kDebugMusic, "sampleCount = %d", sampleCount);
 
diff --git a/engines/teenagent/music.h b/engines/teenagent/music.h
index e1630cc..4b1b683 100644
--- a/engines/teenagent/music.h
+++ b/engines/teenagent/music.h
@@ -74,7 +74,6 @@ private:
 			size = 0;
 		}
 	} _samples[256];
-	byte sampleCount;
 
 	Common::Array<Row> _rows;
 	uint _currRow;
diff --git a/engines/teenagent/objects.h b/engines/teenagent/objects.h
index f923ae5..94303c9 100644
--- a/engines/teenagent/objects.h
+++ b/engines/teenagent/objects.h
@@ -165,7 +165,7 @@ struct Object {
 	//19
 	Common::String name, description;
 
-	Object(): _base(NULL) {}
+	Object(): _base(NULL) { memset(this, 0, sizeof(Object));  }
 	void dump(int level = 0) const;
 	void setName(const Common::String &newName);
 	void load(byte *addr);
@@ -205,7 +205,7 @@ struct Walkbox {
 	Rect rect;
 	byte sideHint[4];
 
-	Walkbox() : _base(NULL) {}
+	Walkbox() : _base(NULL) { memset(this, 0, sizeof(Walkbox)); }
 	void dump(int level = 0) const;
 	void load(byte *src);
 	void save() const;
diff --git a/engines/teenagent/scene.cpp b/engines/teenagent/scene.cpp
index 6e1cef3..c250269 100644
--- a/engines/teenagent/scene.cpp
+++ b/engines/teenagent/scene.cpp
@@ -71,6 +71,9 @@ Scene::Scene(TeenAgentEngine *vm) : _vm(vm), intro(false), _id(0), ons(0),
 
 	varia.close();
 	loadObjectData();
+
+	_onsCount = 0;
+	_messageColor = 0;
 }
 
 Scene::~Scene() {
@@ -314,7 +317,7 @@ void Scene::loadOns() {
 	uint16 addr = _vm->res->dseg.get_word(dsAddr_onsAnimationTablePtr + (_id - 1) * 2);
 	debugC(0, kDebugScene, "ons index: %04x", addr);
 
-	onsCount = 0;
+	_onsCount = 0;
 	byte b;
 	byte onId[16];
 	while ((b = _vm->res->dseg.get_byte(addr)) != 0xff) {
@@ -323,15 +326,15 @@ void Scene::loadOns() {
 		if (b == 0)
 			continue;
 
-		onId[onsCount++] = b;
+		onId[_onsCount++] = b;
 	}
 
 	delete[] ons;
 	ons = NULL;
 
-	if (onsCount > 0) {
-		ons = new Surface[onsCount];
-		for (uint32 i = 0; i < onsCount; ++i) {
+	if (_onsCount > 0) {
+		ons = new Surface[_onsCount];
+		for (uint32 i = 0; i < _onsCount; ++i) {
 			Common::ScopedPtr<Common::SeekableReadStream> s(_vm->res->ons.getStream(onId[i]));
 			if (s) {
 				ons[i].load(*s, Surface::kTypeOns);
@@ -498,7 +501,7 @@ bool Scene::processEvent(const Common::Event &event) {
 				events.clear();
 				sounds.clear();
 				currentEvent.clear();
-				messageColor = textColorMark;
+				_messageColor = textColorMark;
 				for (int i = 0; i < 4; ++i)
 					customAnimation[i].free();
 				_vm->playMusic(4);
@@ -651,7 +654,7 @@ bool Scene::render(bool tickGame, bool tickMark, uint32 messageDelta) {
 		bool gotAnyAnimation = false;
 
 		if (ons != NULL && debugFeatures.feature[DebugFeatures::kShowOns]) {
-			for (uint32 i = 0; i < onsCount; ++i) {
+			for (uint32 i = 0; i < _onsCount; ++i) {
 				Surface *s = ons + i;
 				if (s != NULL)
 					s->render(surface);
@@ -821,7 +824,7 @@ bool Scene::render(bool tickGame, bool tickMark, uint32 messageDelta) {
 			}
 
 			if (visible) {
-				_vm->res->font7.render(surface, messagePos.x, messagePos.y, message, messageColor);
+				_vm->res->font7.render(surface, messagePos.x, messagePos.y, message, _messageColor);
 				busy = true;
 			}
 		}
@@ -1005,7 +1008,7 @@ bool Scene::processEventQueue() {
 					warning("no animation in slot %u", messageSlot);
 			}
 			messagePos = messagePosition(message, p);
-			messageColor = currentEvent.color;
+			_messageColor = currentEvent.color;
 
 			if (messageFirstFrame)
 				currentEvent.clear(); // async message, clearing event
@@ -1153,7 +1156,7 @@ bool Scene::processEventQueue() {
 	}
 
 	if (events.empty()) {
-		messageColor = textColorMark;
+		_messageColor = textColorMark;
 		hideActor = false;
 	}
 
@@ -1232,7 +1235,7 @@ void Scene::displayMessage(const Common::String &str, byte color, const Common::
 	debugC(0, kDebugScene, "displayMessage: %s", str.c_str());
 	message = str;
 	messagePos = (pos.x | pos.y) ? pos : messagePosition(str, position);
-	messageColor = color;
+	_messageColor = color;
 	messageTimer = messageDuration(message);
 }
 
@@ -1251,7 +1254,7 @@ void Scene::clear() {
 void Scene::clearMessage() {
 	message.clear();
 	messageTimer = 0;
-	messageColor = textColorMark;
+	_messageColor = textColorMark;
 	messageFirstFrame = 0;
 	messageLastFrame = 0;
 	messageAnimation = NULL;
diff --git a/engines/teenagent/scene.h b/engines/teenagent/scene.h
index 07b304e..40f910a 100644
--- a/engines/teenagent/scene.h
+++ b/engines/teenagent/scene.h
@@ -194,7 +194,7 @@ private:
 	SurfaceList on;
 	bool onEnabled;
 	Surface *ons;
-	uint32 onsCount;
+	uint32 _onsCount;
 	Animation actorAnimation, animation[4], customAnimation[4];
 	Common::Rect actorAnimationPosition, animationPosition[4];
 
@@ -214,7 +214,7 @@ private:
 
 	Common::String message;
 	Common::Point messagePos;
-	byte messageColor;
+	byte _messageColor;
 	uint messageTimer;
 	byte messageFirstFrame;
 	byte messageLastFrame;
diff --git a/engines/teenagent/teenagent.cpp b/engines/teenagent/teenagent.cpp
index 4dc7857..2d10b82 100644
--- a/engines/teenagent/teenagent.cpp
+++ b/engines/teenagent/teenagent.cpp
@@ -71,6 +71,13 @@ TeenAgentEngine::TeenAgentEngine(OSystem *system, const ADGameDescription *gd)
 	res = new Resources();
 
 	console = 0;
+	scene = 0;
+	inventory = 0;
+	_sceneBusy = false;
+	_dstObject = 0;
+	_musicStream = 0;
+	_markDelay = 0;
+	_gameDelay = 0;
 }
 
 TeenAgentEngine::~TeenAgentEngine() {


Commit: 0d44f77ab39191049935aa06a5275b3cb3f6207a
    https://github.com/scummvm/scummvm/commit/0d44f77ab39191049935aa06a5275b3cb3f6207a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-05-03T14:51:18+02:00

Commit Message:
TONY: Fix numerous memory leaks

Changed paths:
    engines/tony/mpal/mpal.cpp



diff --git a/engines/tony/mpal/mpal.cpp b/engines/tony/mpal/mpal.cpp
index 89cc281..9172843 100644
--- a/engines/tony/mpal/mpal.cpp
+++ b/engines/tony/mpal/mpal.cpp
@@ -367,12 +367,18 @@ MpalHandle resLoad(uint32 dwId) {
 			temp = (byte *)globalAlloc(GMEM_FIXED | GMEM_ZEROINIT, nSizeComp);
 
 			nBytesRead = GLOBALS._hMpr.read(temp, nSizeComp);
-			if (nBytesRead != nSizeComp)
+			if (nBytesRead != nSizeComp) {
+				globalDestroy(temp);
+				globalDestroy(h);
 				return NULL;
+			}
 
 			lzo1x_decompress(temp, nSizeComp, buf, &nBytesRead);
-			if (nBytesRead != nSizeDecomp)
+			if (nBytesRead != nSizeDecomp) {
+				globalDestroy(temp);
+				globalDestroy(h);
 				return NULL;
+			}
 
 			globalDestroy(temp);
 			globalUnlock(h);
@@ -526,8 +532,10 @@ static LpItem getItemData(uint32 nOrdItem) {
 	globalFree(hDat);
 
 	// Check if we've got to the end of the file
-	if (i != 0xABCD)
+	if (i != 0xABCD) {
+		globalDestroy(ret);
 		return NULL;
+	}
 
 	return ret;
 }
@@ -1413,36 +1421,51 @@ bool mpalInit(const char *lpszMpcFileName, const char *lpszMprFileName,
 	if (bCompress) {
 		// Get the compressed size and read the data in
 		uint32 dwSizeComp = hMpc.readUint32LE();
-		if (hMpc.err())
+		if (hMpc.err()) {
+			globalDestroy(lpMpcImage);
 			return false;
+		}
 
 		cmpbuf = (byte *)globalAlloc(GMEM_FIXED, dwSizeComp);
-		if (cmpbuf == NULL)
+		if (cmpbuf == NULL) {
+			globalDestroy(lpMpcImage);
 			return false;
+		}
 
 		nBytesRead = hMpc.read(cmpbuf, dwSizeComp);
-		if (nBytesRead != dwSizeComp)
+		if (nBytesRead != dwSizeComp) {
+			globalDestroy(cmpbuf);
+			globalDestroy(lpMpcImage);
 			return false;
+		}
 
 		// Decompress the data
 		lzo1x_decompress(cmpbuf, dwSizeComp, lpMpcImage, &nBytesRead);
-		if (nBytesRead != dwSizeDecomp)
+		if (nBytesRead != dwSizeDecomp) {
+			globalDestroy(cmpbuf);
+			globalDestroy(lpMpcImage);
 			return false;
+		}
 
 		globalDestroy(cmpbuf);
 	} else {
 		// If the file is not compressed, we directly read in the data
 		nBytesRead = hMpc.read(lpMpcImage, dwSizeDecomp);
-		if (nBytesRead != dwSizeDecomp)
+		if (nBytesRead != dwSizeDecomp) {
+			globalDestroy(lpMpcImage);
 			return false;
+		}
 	}
 
 	// Close the file
 	hMpc.close();
 
 	// Process the data
-	if (parseMpc(lpMpcImage) == false)
+	if (parseMpc(lpMpcImage) == false) {
+		globalDestroy(lpMpcImage);
+
 		return false;
+	}
 
 	globalDestroy(lpMpcImage);
 


Commit: acfcbd591965ddd1bd63621fab9840036582068d
    https://github.com/scummvm/scummvm/commit/acfcbd591965ddd1bd63621fab9840036582068d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-05-03T17:12:36+02:00

Commit Message:
LASTEXPRESS: Fix logic comparison

Changed paths:
    engines/lastexpress/sound/entry.cpp



diff --git a/engines/lastexpress/sound/entry.cpp b/engines/lastexpress/sound/entry.cpp
index 697e6e1..7308214 100644
--- a/engines/lastexpress/sound/entry.cpp
+++ b/engines/lastexpress/sound/entry.cpp
@@ -366,7 +366,7 @@ void SoundEntry::saveLoadWithSerializer(Common::Serializer &s) {
 	assert(_name1.size() <= 16);
 	assert(_name2.size() <= 16);
 
-	if (_name2.matchString("NISSND?") && (_status.status & kFlagType9) != kFlag3) {
+	if (_name2.matchString("NISSND?") && ((_status.status & kFlagType9) != kFlag3)) {
 		s.syncAsUint32LE(_status.status);
 		s.syncAsUint32LE(_type);
 		s.syncAsUint32LE(_blockCount); // field_8;


Commit: ebeeb467c429e5ea3a03a903f530c8252cc57d0c
    https://github.com/scummvm/scummvm/commit/ebeeb467c429e5ea3a03a903f530c8252cc57d0c
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-05-03T19:52:18+02:00

Commit Message:
SCUMM HE: Fixes to T14 image clipping

Changed paths:
    engines/scumm/he/moonbase/moonbase.cpp



diff --git a/engines/scumm/he/moonbase/moonbase.cpp b/engines/scumm/he/moonbase/moonbase.cpp
index 77b9808..b6bfd45 100644
--- a/engines/scumm/he/moonbase/moonbase.cpp
+++ b/engines/scumm/he/moonbase/moonbase.cpp
@@ -59,6 +59,9 @@ void Moonbase::blitT14WizImage(uint8 *dst, int dstw, int dsth, int dstPitch, con
 		return;
 	Common::Rect clippedRect = clippedDstRect.findIntersectingRect(dstOperation);
 
+	int cx = clippedRect.right - clippedRect.left;
+	int cy = clippedRect.bottom - clippedRect.top;
+
 	int sx = ((clippedRect.left - x) + srcLimitsRect.left);
 	int sy = ((clippedRect.top - y) + srcLimitsRect.top);
 
@@ -67,19 +70,18 @@ void Moonbase::blitT14WizImage(uint8 *dst, int dstw, int dsth, int dstPitch, con
 	int headerSize = READ_LE_UINT32(wizd + 0x4);
 	uint8 *dataPointer = wizd + 0x8 + headerSize;
 
-	for (int i = 0; i < height; i++) {
+	for (int i = 0; i < sy; i++) {
+		uint16 lineSize = READ_LE_UINT16(dataPointer + 0);
+
+		dataPointer += lineSize;
+	}
+
+	for (int i = 0; i < cy; i++) {
 		uint16 lineSize      = READ_LE_UINT16(dataPointer + 0);
 		uint8 *singlesOffset = READ_LE_UINT16(dataPointer + 2) + dataPointer;
 		uint8 *quadsOffset   = READ_LE_UINT16(dataPointer + 4) + dataPointer;
 
-		if (i < sy) {
-			dataPointer += lineSize;
-			dst += dstPitch;
-
-			continue;
-		}
-
-		int pixels = width;
+		int pixels = 0;
 		byte *dst1 = dst;
 		byte *codes = dataPointer + 6;
 
@@ -89,27 +91,31 @@ void Moonbase::blitT14WizImage(uint8 *dst, int dstw, int dsth, int dstPitch, con
 
 			if (code == 0) { // quad
 				for (int c = 0; c < 4; c++) {
-					if (width - pixels >= sx) {
+					if (pixels >= sx) {
 						WRITE_LE_UINT16(dst1, READ_LE_UINT16(quadsOffset));
 						dst1 += 2;
 					}
 					quadsOffset += 2;
-					pixels--;
+					pixels++;
 				}
 			} else if (code < 0) { // single
-				if (width - pixels >= sx) {
+				if (pixels >= sx) {
 					WRITE_LE_UINT16(dst1, READ_LE_UINT16(singlesOffset));
 					dst1 += 2;
 				}
 				singlesOffset += 2;
-				pixels--;
+				pixels++;
 			} else { // skip
 				if ((code & 1) == 0) {
 					code >>= 1;
-					dst1 += code * 2;
-					pixels -= code;
+
+					for (int j = 0; j < code; j++) {
+						if (pixels >= sx)
+							dst1 += 2;
+						pixels++;
+					}
 				} else { // special case
-					if (width - pixels >= sx) {
+					if (pixels >= sx) {
 						int alpha = code >> 1;
 						uint16 color = READ_LE_UINT16(singlesOffset);
 
@@ -137,11 +143,11 @@ void Moonbase::blitT14WizImage(uint8 *dst, int dstw, int dsth, int dstPitch, con
 						dst1 += 2;
 					}
 					singlesOffset += 2;
-					pixels--;
+					pixels++;
 				}
 			}
 
-			if (pixels <= 0)
+			if (pixels >= cx + sx)
 				break;
 		}
 






More information about the Scummvm-git-logs mailing list