diff options
| -rw-r--r-- | engines/sci/engine/game.cpp | 4 | ||||
| -rw-r--r-- | engines/sci/engine/savegame.cpp | 2 | ||||
| -rw-r--r-- | engines/sci/engine/segment.cpp | 4 | ||||
| -rw-r--r-- | engines/sci/engine/segment.h | 12 | 
4 files changed, 11 insertions, 11 deletions
| 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; | 
