From 97d1f79e2d0c23dc337e85888ffa67aca98f7358 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Tue, 22 Sep 2009 00:36:05 +0000 Subject: SCI: Change SystemString::name from char* to Common::String svn-id: r44243 --- engines/sci/engine/game.cpp | 4 ++-- engines/sci/engine/savegame.cpp | 2 +- engines/sci/engine/segment.cpp | 4 ++-- engines/sci/engine/segment.h | 12 ++++++------ 4 files changed, 11 insertions(+), 11 deletions(-) (limited to 'engines/sci') diff --git a/engines/sci/engine/game.cpp b/engines/sci/engine/game.cpp index 1c94b540a0..f77cff4b95 100644 --- a/engines/sci/engine/game.cpp +++ b/engines/sci/engine/game.cpp @@ -335,7 +335,7 @@ int script_init_engine(EngineState *s) { // Allocate static buffer for savegame and CWD directories SystemString *str = &s->sys_strings->strings[SYS_STRING_SAVEDIR]; - str->name = strdup("savedir"); + str->_name = "savedir"; str->max_size = MAX_SAVE_DIR_SIZE; str->value = (reg_t *)calloc(MAX_SAVE_DIR_SIZE, sizeof(reg_t)); // FIXME -- sizeof(char) or sizeof(reg_t) ?? str->value[0].segment = s->string_frag_segment; // Set to empty string @@ -439,7 +439,7 @@ int game_init(EngineState *s) { s->status_bar_background = !s->resMan->isVGA() ? 15 : 255; SystemString *str = &s->sys_strings->strings[SYS_STRING_PARSER_BASE]; - str->name = strdup("parser-base"); + str->_name = "parser-base"; str->max_size = MAX_PARSER_BASE; str->value = (reg_t *)calloc(MAX_PARSER_BASE + 1, sizeof(char)); // FIXME -- sizeof(char) or sizeof(reg_t) ?? str->value[0].segment = s->string_frag_segment; // Set to empty string diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp index 03f249c20a..c779e32fa9 100644 --- a/engines/sci/engine/savegame.cpp +++ b/engines/sci/engine/savegame.cpp @@ -437,7 +437,7 @@ void Script::saveLoadWithSerializer(Common::Serializer &s) { } static void sync_SystemString(Common::Serializer &s, SystemString &obj) { - syncCStr(s, &obj.name); + s.syncString(obj._name); s.syncAsSint32LE(obj.max_size); // FIXME: This is a *WEIRD* hack: We sync a reg_t* as if it was a string. diff --git a/engines/sci/engine/segment.cpp b/engines/sci/engine/segment.cpp index 036d0f6979..80027dbb39 100644 --- a/engines/sci/engine/segment.cpp +++ b/engines/sci/engine/segment.cpp @@ -275,13 +275,13 @@ byte *DynMem::dereference(reg_t pointer, int *size) { } bool SystemStrings::isValidOffset(uint16 offset) const { - return offset < SYS_STRINGS_MAX && strings[offset].name; + return offset < SYS_STRINGS_MAX && !strings[offset]._name.empty(); } byte *SystemStrings::dereference(reg_t pointer, int *size) { if (size) *size = strings[pointer.offset].max_size; - if (pointer.offset < SYS_STRINGS_MAX && strings[pointer.offset].name) + if (isValidOffset(pointer.offset)) return (byte *)(strings[pointer.offset].value); // This occurs in KQ5CD when interacting with certain objects diff --git a/engines/sci/engine/segment.h b/engines/sci/engine/segment.h index 9e6e27dd85..81da9c2488 100644 --- a/engines/sci/engine/segment.h +++ b/engines/sci/engine/segment.h @@ -133,7 +133,7 @@ enum { }; struct SystemString { - char *name; + Common::String _name; int max_size; reg_t *value; }; @@ -143,15 +143,15 @@ struct SystemStrings : public SegmentObj { public: SystemStrings() : SegmentObj(SEG_TYPE_SYS_STRINGS) { - memset(strings, 0, sizeof(strings)); + for (int i = 0; i < SYS_STRINGS_MAX; i++) { + strings[i].max_size = 0; + strings[i].value = 0; + } } ~SystemStrings() { for (int i = 0; i < SYS_STRINGS_MAX; i++) { SystemString *str = &strings[i]; - if (str->name) { - free(str->name); - str->name = NULL; - + if (!str->_name.empty()) { free(str->value); str->value = NULL; -- cgit v1.2.3