aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm/he/script_v60he.cpp
diff options
context:
space:
mode:
authorMax Horn2006-05-01 21:31:06 +0000
committerMax Horn2006-05-01 21:31:06 +0000
commit77c29d0ab20de8fbdd7954602f3759d110eea2dd (patch)
treee5691b97406ba519feb935d8fdc4a01a883c8c5a /engines/scumm/he/script_v60he.cpp
parent7e3df42510a2da4de6bc41a3d41ea1f8ddbcd54f (diff)
downloadscummvm-rg350-77c29d0ab20de8fbdd7954602f3759d110eea2dd.tar.gz
scummvm-rg350-77c29d0ab20de8fbdd7954602f3759d110eea2dd.tar.bz2
scummvm-rg350-77c29d0ab20de8fbdd7954602f3759d110eea2dd.zip
Some cleanup, and added a FIXME comment concerning the wrong usage of getSavePath()
svn-id: r22266
Diffstat (limited to 'engines/scumm/he/script_v60he.cpp')
-rw-r--r--engines/scumm/he/script_v60he.cpp24
1 files changed, 15 insertions, 9 deletions
diff --git a/engines/scumm/he/script_v60he.cpp b/engines/scumm/he/script_v60he.cpp
index d8fe03f702..da8f8fbad6 100644
--- a/engines/scumm/he/script_v60he.cpp
+++ b/engines/scumm/he/script_v60he.cpp
@@ -433,9 +433,12 @@ int ScummEngine_v60he::convertFilePath(byte *dst, bool setFilePath) {
if (setFilePath) {
char filePath[256];
- sprintf(filePath, "%s", dst + r);
+ strncpy(filePath, (char *)dst + r, sizeof(filePath));
if (!Common::File::exists(filePath)) {
- sprintf(filePath, "%s%s", _saveFileMan->getSavePath(), dst + r);
+ // FIXME: Using getSavePath() to generate filepaths used with
+ // File::open is not portable!
+ strncpy(filePath, _saveFileMan->getSavePath(), sizeof(filePath));
+ strncat(filePath, (char *)dst + r, sizeof(filePath));
}
strcpy((char *)dst, filePath);
debug(1, "convertFilePath: filePath is %s", dst);
@@ -986,17 +989,20 @@ void virtScreenSavePackByte(vsPackCtx *ctx, uint8 *&dst, int len, uint8 b) {
void ScummEngine_v60he::o60_openFile() {
int mode, len, slot, i, r;
- byte filename[100];
+ byte buffer[100];
+ const char *filename;
- convertMessageToString(_scriptPointer, filename, sizeof(filename));
+ convertMessageToString(_scriptPointer, buffer, sizeof(buffer));
len = resStrLen(_scriptPointer);
_scriptPointer += len + 1;
- for (r = strlen((char*)filename); r != 0; r--) {
- if (filename[r - 1] == '\\')
+ for (r = strlen((char*)buffer); r != 0; r--) {
+ if (buffer[r - 1] == '\\')
break;
}
+
+ filename = (char *)buffer + r;
mode = pop();
slot = -1;
@@ -1011,10 +1017,10 @@ void ScummEngine_v60he::o60_openFile() {
switch(mode) {
case 1:
// TODO / FIXME: Consider using listSavefiles to avoid unneccessary openForLoading calls
- _hInFileTable[slot] = _saveFileMan->openForLoading((char*)filename + r);
+ _hInFileTable[slot] = _saveFileMan->openForLoading(filename);
if (_hInFileTable[slot] == 0) {
Common::File *f = new Common::File();
- f->open((char*)filename + r, Common::File::kFileReadMode);
+ f->open(filename, Common::File::kFileReadMode);
if (!f->isOpen())
delete f;
else
@@ -1022,7 +1028,7 @@ void ScummEngine_v60he::o60_openFile() {
}
break;
case 2:
- _hOutFileTable[slot] = _saveFileMan->openForSaving((char*)filename + r);
+ _hOutFileTable[slot] = _saveFileMan->openForSaving(filename);
break;
default:
error("o60_openFile(): wrong open file mode %d", mode);