[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