[Scummvm-cvs-logs] SF.net SVN: scummvm:[33520] scummvm/branches/branch-0-12-0/engines/kyra
lordhoto at users.sourceforge.net
lordhoto at users.sourceforge.net
Sat Aug 2 13:57:55 CEST 2008
Revision: 33520
http://scummvm.svn.sourceforge.net/scummvm/?rev=33520&view=rev
Author: lordhoto
Date: 2008-08-02 11:57:54 +0000 (Sat, 02 Aug 2008)
Log Message:
-----------
Backport fix for bug #2035459 "KYRA1: long savegame names cause garbage".
Modified Paths:
--------------
scummvm/branches/branch-0-12-0/engines/kyra/gui_lok.cpp
scummvm/branches/branch-0-12-0/engines/kyra/gui_lok.h
scummvm/branches/branch-0-12-0/engines/kyra/gui_v2.cpp
scummvm/branches/branch-0-12-0/engines/kyra/gui_v2.h
scummvm/branches/branch-0-12-0/engines/kyra/saveload.cpp
Modified: scummvm/branches/branch-0-12-0/engines/kyra/gui_lok.cpp
===================================================================
--- scummvm/branches/branch-0-12-0/engines/kyra/gui_lok.cpp 2008-08-02 11:57:06 UTC (rev 33519)
+++ scummvm/branches/branch-0-12-0/engines/kyra/gui_lok.cpp 2008-08-02 11:57:54 UTC (rev 33520)
@@ -530,7 +530,7 @@
void GUI_LoK::setupSavegames(Menu &menu, int num) {
Common::InSaveFile *in;
- static char savenames[5][31];
+ static char savenames[5][35];
uint8 startSlot;
assert(num <= 5);
@@ -549,7 +549,8 @@
KyraEngine_v1::SaveHeader header;
for (int i = startSlot; i < num && uint(_savegameOffset + i) < _saveSlots.size(); i++) {
if ((in = _vm->openSaveForReading(_vm->getSavegameFilename(_saveSlots[i + _savegameOffset]), header))) {
- strncpy(savenames[i], header.description.c_str(), 31);
+ strncpy(savenames[i], header.description.c_str(), ARRAYSIZE(savenames[0]));
+ savenames[i][34] = 0;
menu.item[i].itemString = savenames[i];
menu.item[i].enabled = 1;
menu.item[i].saveSlot = _saveSlots[i + _savegameOffset];
@@ -673,7 +674,7 @@
length = strlen(_savegameName);
if (_keyPressed.ascii > 31 && _keyPressed.ascii < 127) {
- if (length < 31) {
+ if (length < ARRAYSIZE(_savegameName)-1) {
_savegameName[length] = _keyPressed.ascii;
_savegameName[length+1] = 0;
redrawTextfield();
Modified: scummvm/branches/branch-0-12-0/engines/kyra/gui_lok.h
===================================================================
--- scummvm/branches/branch-0-12-0/engines/kyra/gui_lok.h 2008-08-02 11:57:06 UTC (rev 33519)
+++ scummvm/branches/branch-0-12-0/engines/kyra/gui_lok.h 2008-08-02 11:57:54 UTC (rev 33520)
@@ -162,7 +162,7 @@
bool _menuRestoreScreen;
uint8 _toplevelMenu;
int _savegameOffset;
- char _savegameName[31];
+ char _savegameName[35];
const char *_specialSavegameString;
Common::KeyState _keyPressed;
int8 _mouseWheel;
Modified: scummvm/branches/branch-0-12-0/engines/kyra/gui_v2.cpp
===================================================================
--- scummvm/branches/branch-0-12-0/engines/kyra/gui_v2.cpp 2008-08-02 11:57:06 UTC (rev 33519)
+++ scummvm/branches/branch-0-12-0/engines/kyra/gui_v2.cpp 2008-08-02 11:57:54 UTC (rev 33520)
@@ -456,6 +456,7 @@
for (int i = startSlot; i < num && uint(_savegameOffset + i) < _saveSlots.size(); ++i) {
if ((in = _vm->openSaveForReading(_vm->getSavegameFilename(_saveSlots[i + _savegameOffset]), header)) != 0) {
strncpy(getTableString(menu.item[i].itemId), header.description.c_str(), 80);
+ getTableString(menu.item[i].itemId)[79] = 0;
menu.item[i].saveSlot = _saveSlots[i + _savegameOffset];
menu.item[i].enabled = true;
delete in;
Modified: scummvm/branches/branch-0-12-0/engines/kyra/gui_v2.h
===================================================================
--- scummvm/branches/branch-0-12-0/engines/kyra/gui_v2.h 2008-08-02 11:57:06 UTC (rev 33519)
+++ scummvm/branches/branch-0-12-0/engines/kyra/gui_v2.h 2008-08-02 11:57:54 UTC (rev 33520)
@@ -188,7 +188,7 @@
// save menu
bool _noSaveProcess;
int _saveSlot;
- char _saveDescription[0x50];
+ char _saveDescription[0x51];
int saveMenu(Button *caller);
int clickSaveSlot(Button *caller);
Modified: scummvm/branches/branch-0-12-0/engines/kyra/saveload.cpp
===================================================================
--- scummvm/branches/branch-0-12-0/engines/kyra/saveload.cpp 2008-08-02 11:57:06 UTC (rev 33519)
+++ scummvm/branches/branch-0-12-0/engines/kyra/saveload.cpp 2008-08-02 11:57:54 UTC (rev 33520)
@@ -95,6 +95,9 @@
if (header.version <= 8) {
char buffer[31];
in->read(buffer, 31);
+ // WORKAROUND: Old savegames could contain a missing termination 0 at the
+ // end so we manually add it.
+ buffer[30] = 0;
header.description = buffer;
} else {
header.description = "";
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