[Scummvm-cvs-logs] SF.net SVN: scummvm:[42632] scummvm/trunk/engines/scumm

wjpalenstijn at users.sourceforge.net wjpalenstijn at users.sourceforge.net
Mon Jul 20 22:55:28 CEST 2009


Revision: 42632
          http://scummvm.svn.sourceforge.net/scummvm/?rev=42632&view=rev
Author:   wjpalenstijn
Date:     2009-07-20 20:55:28 +0000 (Mon, 20 Jul 2009)

Log Message:
-----------
Make ScummFile::eos() consistent with Stream::eos().
Remove usage of ioFailed from SCUMM engine.
Fix reading up to the end of a SCUMM SubFile.
This hopefully fixes #2820957.

Modified Paths:
--------------
    scummvm/trunk/engines/scumm/file.cpp
    scummvm/trunk/engines/scumm/file.h
    scummvm/trunk/engines/scumm/he/cup_player_he.cpp
    scummvm/trunk/engines/scumm/resource.cpp
    scummvm/trunk/engines/scumm/resource_v4.cpp

Modified: scummvm/trunk/engines/scumm/file.cpp
===================================================================
--- scummvm/trunk/engines/scumm/file.cpp	2009-07-20 18:04:44 UTC (rev 42631)
+++ scummvm/trunk/engines/scumm/file.cpp	2009-07-20 20:55:28 UTC (rev 42632)
@@ -126,7 +126,7 @@
 
 
 bool ScummFile::eos() const {
-	return _subFileLen ? (pos() >= _subFileLen) : File::eos(); // FIXME
+	return _subFileLen ? _myEos : File::eos();
 }
 
 int32 ScummFile::pos() const {
@@ -154,7 +154,10 @@
 		assert((int32)_subFileStart <= offs && offs <= (int32)(_subFileStart + _subFileLen));
 		whence = SEEK_SET;
 	}
-	return File::seek(offs, whence);
+	bool ret = File::seek(offs, whence);
+	if (ret)
+		_myEos = false;
+	return ret;
 }
 
 uint32 ScummFile::read(void *dataPtr, uint32 dataSize) {
@@ -167,7 +170,7 @@
 		int32 newPos = curPos + dataSize;
 		if (newPos > _subFileLen) {
 			dataSize = _subFileLen - curPos;
-			_myIoFailed = true;
+			_myEos = true;
 		}
 	}
 

Modified: scummvm/trunk/engines/scumm/file.h
===================================================================
--- scummvm/trunk/engines/scumm/file.h	2009-07-20 18:04:44 UTC (rev 42631)
+++ scummvm/trunk/engines/scumm/file.h	2009-07-20 20:55:28 UTC (rev 42632)
@@ -55,7 +55,7 @@
 	byte _encbyte;
 	int32	_subFileStart;
 	int32	_subFileLen;
-	bool	_myIoFailed;
+	bool	_myEos; // Have we read past the end of the subfile?
 
 	void setSubfileRange(int32 start, int32 len);
 	void resetSubfile();
@@ -67,8 +67,7 @@
 	bool open(const Common::String &filename);
 	bool openSubFile(const Common::String &filename);
 
-	bool ioFailed() const { return _myIoFailed || BaseScummFile::ioFailed(); }
-	void clearIOFailed() { _myIoFailed = false; BaseScummFile::clearIOFailed(); }
+	void clearErr() { _myEos = false; BaseScummFile::clearErr(); }
 
 	bool eos() const;
 	int32 pos() const;

Modified: scummvm/trunk/engines/scumm/he/cup_player_he.cpp
===================================================================
--- scummvm/trunk/engines/scumm/he/cup_player_he.cpp	2009-07-20 18:04:44 UTC (rev 42631)
+++ scummvm/trunk/engines/scumm/he/cup_player_he.cpp	2009-07-20 20:55:28 UTC (rev 42632)
@@ -91,20 +91,19 @@
 }
 
 void CUP_Player::play() {
-	while (parseNextHeaderTag(_fileStream)) {
-		if (_fileStream.ioFailed()) {
-			return;
-		}
-	}
+	while (parseNextHeaderTag(_fileStream)) { }
+
+	if (_fileStream.eos() || _fileStream.err())
+		return;
+
 	debug(1, "rate %d width %d height %d", _playbackRate, _width, _height);
 
 	int ticks = _system->getMillis();
 	while (_dataSize != 0 && !_vm->shouldQuit()) {
-		while (parseNextBlockTag(_fileStream)) {
-			if (_fileStream.ioFailed()) {
-				return;
-			}
-		}
+		while (parseNextBlockTag(_fileStream)) { }
+		if (_fileStream.eos() || _fileStream.err())
+			return;
+
 		int diff = _system->getMillis() - ticks;
 		if (diff >= 0 && diff <= _playbackRate) {
 			_system->delayMillis(_playbackRate - diff);
@@ -200,6 +199,10 @@
 bool CUP_Player::parseNextHeaderTag(Common::SeekableReadStream &dataStream) {
 	uint32 tag = dataStream.readUint32BE();
 	uint32 size = dataStream.readUint32BE() - 8;
+
+	if (dataStream.eos())
+		return false;
+
 	uint32 next = dataStream.pos() + size;
 	debug(1, "New header tag %s %d dataSize %d", tag2str(tag), size, _dataSize);
 	switch (tag) {

Modified: scummvm/trunk/engines/scumm/resource.cpp
===================================================================
--- scummvm/trunk/engines/scumm/resource.cpp	2009-07-20 18:04:44 UTC (rev 42631)
+++ scummvm/trunk/engines/scumm/resource.cpp	2009-07-20 20:55:28 UTC (rev 42632)
@@ -253,10 +253,10 @@
 
 	if (_game.version <= 5) {
 		// Figure out the sizes of various resources
-		while (!_fileHandle->eos()) {
+		while (true) {
 			blocktype = _fileHandle->readUint32BE();
 			itemsize = _fileHandle->readUint32BE();
-			if (_fileHandle->ioFailed())
+			if (_fileHandle->eos() || _fileHandle->err())
 				break;
 			switch (blocktype) {
 			case MKID_BE('DOBJ'):
@@ -285,7 +285,6 @@
 			}
 			_fileHandle->seek(itemsize - 8, SEEK_CUR);
 		}
-		_fileHandle->clearIOFailed();
 		_fileHandle->seek(0, SEEK_SET);
 	}
 
@@ -300,7 +299,7 @@
 		blocktype = _fileHandle->readUint32BE();
 		itemsize = _fileHandle->readUint32BE();
 
-		if (_fileHandle->ioFailed())
+		if (_fileHandle->eos() || _fileHandle->err())
 			break;
 
 		numblock++;
@@ -689,7 +688,7 @@
 		dumpResource("script-", idx, getResourceAddress(rtScript, idx));
 	}
 
-	if (!_fileHandle->ioFailed()) {
+	if (!_fileHandle->err() && !_fileHandle->eos()) {
 		return 1;
 	}
 

Modified: scummvm/trunk/engines/scumm/resource_v4.cpp
===================================================================
--- scummvm/trunk/engines/scumm/resource_v4.cpp	2009-07-20 18:04:44 UTC (rev 42631)
+++ scummvm/trunk/engines/scumm/resource_v4.cpp	2009-07-20 20:55:28 UTC (rev 42632)
@@ -61,11 +61,11 @@
 	closeRoom();
 	openRoom(0);
 
-	while (!_fileHandle->eos()) {
+	while (true) {
 		// Figure out the sizes of various resources
 		itemsize = _fileHandle->readUint32LE();
 		blocktype = _fileHandle->readUint16LE();
-		if (_fileHandle->ioFailed())
+		if (_fileHandle->eos() || _fileHandle->err())
 			break;
 
 		switch (blocktype) {
@@ -95,16 +95,15 @@
 		_fileHandle->seek(itemsize - 8, SEEK_CUR);
 	}
 
-	_fileHandle->clearIOFailed();
 	_fileHandle->seek(0, SEEK_SET);
 
 	readMAXS(0);
 	allocateArrays();
 
-	while (1) {
+	while (true) {
 		itemsize = _fileHandle->readUint32LE();
 
-		if (_fileHandle->ioFailed())
+		if (_fileHandle->eos() || _fileHandle->err())
 			break;
 
 		blocktype = _fileHandle->readUint16LE();


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