[Scummvm-cvs-logs] SF.net SVN: scummvm:[35105] scummvm/trunk

Kirben at users.sourceforge.net Kirben at users.sourceforge.net
Mon Nov 17 12:09:57 CET 2008


Revision: 35105
          http://scummvm.svn.sourceforge.net/scummvm/?rev=35105&view=rev
Author:   Kirben
Date:     2008-11-17 11:09:57 +0000 (Mon, 17 Nov 2008)

Log Message:
-----------
Fix regressions in HE games, when slashes are used in filenames for file opcodes.

Modified Paths:
--------------
    scummvm/trunk/backends/fs/windows/windows-fs.cpp
    scummvm/trunk/engines/scumm/he/script_v60he.cpp
    scummvm/trunk/engines/scumm/he/script_v72he.cpp
    scummvm/trunk/engines/scumm/he/script_v80he.cpp

Modified: scummvm/trunk/backends/fs/windows/windows-fs.cpp
===================================================================
--- scummvm/trunk/backends/fs/windows/windows-fs.cpp	2008-11-17 11:09:23 UTC (rev 35104)
+++ scummvm/trunk/backends/fs/windows/windows-fs.cpp	2008-11-17 11:09:57 UTC (rev 35105)
@@ -226,6 +226,9 @@
 AbstractFSNode *WindowsFilesystemNode::getChild(const Common::String &n) const {
 	assert(_isDirectory);
 
+	// Make sure the string contains no slashes
+	assert(!n.contains('/'));
+
 	Common::String newPath(_path);
 	if (_path.lastChar() != '\\')
 		newPath += '\\';

Modified: scummvm/trunk/engines/scumm/he/script_v60he.cpp
===================================================================
--- scummvm/trunk/engines/scumm/he/script_v60he.cpp	2008-11-17 11:09:23 UTC (rev 35104)
+++ scummvm/trunk/engines/scumm/he/script_v60he.cpp	2008-11-17 11:09:57 UTC (rev 35105)
@@ -1051,7 +1051,9 @@
 
 	debug(1, "o60_deleteFile (\"%s\")", filename);
 
-	_saveFileMan->removeSavefile(filename);
+	if (!_saveFileMan->listSavefiles(filename).empty()) {
+		_saveFileMan->removeSavefile(filename);
+	}
 }
 
 void ScummEngine_v60he::o60_rename() {

Modified: scummvm/trunk/engines/scumm/he/script_v72he.cpp
===================================================================
--- scummvm/trunk/engines/scumm/he/script_v72he.cpp	2008-11-17 11:09:23 UTC (rev 35104)
+++ scummvm/trunk/engines/scumm/he/script_v72he.cpp	2008-11-17 11:09:57 UTC (rev 35105)
@@ -1690,9 +1690,9 @@
 	if (slot != -1) {
 		switch (mode) {
 		case 1:
-			// TODO / FIXME: Consider using listSavefiles to avoid unneccessary openForLoading calls
-			_hInFileTable[slot] = _saveFileMan->openForLoading(filename);
-			if (_hInFileTable[slot] == 0) {
+			if (!_saveFileMan->listSavefiles(filename).empty()) {
+				_hInFileTable[slot] = _saveFileMan->openForLoading(filename);
+			} else {
 				Common::File *f = new Common::File();
 				f->open(filename);
 				if (!f->isOpen())
@@ -1702,7 +1702,9 @@
 			}
 			break;
 		case 2:
-			_hOutFileTable[slot] = _saveFileMan->openForSaving(filename);
+			if (!strchr(filename, '/')) {
+				_hOutFileTable[slot] = _saveFileMan->openForSaving(filename);
+			}
 			break;
 		default:
 			error("o72_openFile(): wrong open file mode %d", mode);
@@ -1824,7 +1826,9 @@
 
 	debug(1, "o72_deleteFile(%s)", filename);
 
-	_saveFileMan->removeSavefile(filename);
+	if (!_saveFileMan->listSavefiles(filename).empty()) {
+		_saveFileMan->removeSavefile(filename);
+	}
 }
 
 void ScummEngine_v72he::o72_rename() {
@@ -2091,8 +2095,8 @@
 			// We set SaveGamePath in order to detect where it used
 			// in convertFilePath and to avoid warning about invalid
 			// path in Macintosh verisons.
-			data = defineArray(0, kStringArray, 0, 0, 0, 1);
-			memcpy(data, (const char *)"*", 1);
+			data = defineArray(0, kStringArray, 0, 0, 0, 2);
+			memcpy(data, (const char *)"*\\", 2);
 		} else {
 			const char *entry = (ConfMan.get((char *)option).c_str());
 			int len = resStrLen((const byte *)entry);

Modified: scummvm/trunk/engines/scumm/he/script_v80he.cpp
===================================================================
--- scummvm/trunk/engines/scumm/he/script_v80he.cpp	2008-11-17 11:09:23 UTC (rev 35104)
+++ scummvm/trunk/engines/scumm/he/script_v80he.cpp	2008-11-17 11:09:57 UTC (rev 35105)
@@ -399,17 +399,19 @@
 }
 
 void ScummEngine_v80he::o80_getFileSize() {
-	byte filename[256];
+	byte buffer[256];
 
-	copyScriptString(filename, sizeof(filename));
-	convertFilePath(filename);
+	copyScriptString(buffer, sizeof(buffer));
+	const char *filename = (char *)buffer + convertFilePath(buffer);
 
-	Common::SeekableReadStream *f = _saveFileMan->openForLoading((const char *)filename);
-	if (!f) {
+	Common::SeekableReadStream *f = 0;
+	if (!_saveFileMan->listSavefiles(filename).empty()) {
+		f = _saveFileMan->openForLoading((const char *)filename);
+	} else {
 		Common::File *file = new Common::File();
 		file->open((const char *)filename);
 		if (!file->isOpen())
-			delete f;
+			delete file;
 		else
 			f = file;
 	}


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