PARALLACTION: Replace use of strdup with Common::String & malloc

This commit is contained in:
Colin Snover 2017-12-19 19:27:13 -06:00 committed by Eugene Sandulenko
parent bc3c8bd8d2
commit 481b608c51
12 changed files with 39 additions and 74 deletions

View file

@ -72,7 +72,7 @@ typedef Common::Functor1Mem<ProgramContext&, void, ProgramExec_br> OpcodeV2;
extern const char *_instructionNamesRes_br[];
void Parallaction_br::setupSubtitles(char *s, char *s2, int y) {
void Parallaction_br::setupSubtitles(const char *s, const char *s2, int y) {
debugC(5, kDebugExec, "setupSubtitles(%s, %s, %i)", s, s2, y);
clearSubtitles();
@ -123,7 +123,7 @@ DECLARE_COMMAND_OPCODE(location) {
_vm->_location._followerStartPosition = ctxt._cmd->_startPos2;
_vm->_location._followerStartFrame = 0;
_vm->scheduleLocationSwitch(ctxt._cmd->_string);
_vm->scheduleLocationSwitch(ctxt._cmd->_string.c_str());
}
@ -172,8 +172,8 @@ DECLARE_COMMAND_OPCODE(stop) {
DECLARE_COMMAND_OPCODE(character) {
debugC(9, kDebugExec, "Parallaction_br::cmdOp_character(%s)", ctxt._cmd->_string);
_vm->changeCharacter(ctxt._cmd->_string);
debugC(9, kDebugExec, "Parallaction_br::cmdOp_character(%s)", ctxt._cmd->_string.c_str());
_vm->changeCharacter(ctxt._cmd->_string.c_str());
}
@ -291,7 +291,7 @@ DECLARE_COMMAND_OPCODE(give) {
DECLARE_COMMAND_OPCODE(text) {
_vm->setupSubtitles(ctxt._cmd->_string, ctxt._cmd->_string2, ctxt._cmd->_zeta0);
_vm->setupSubtitles(ctxt._cmd->_string.c_str(), ctxt._cmd->_string2.c_str(), ctxt._cmd->_zeta0);
}
@ -492,7 +492,7 @@ DECLARE_INSTRUCTION_OPCODE(print) {
DECLARE_INSTRUCTION_OPCODE(text) {
InstructionPtr inst = ctxt._inst;
_vm->setupSubtitles(inst->_text, inst->_text2, inst->_y);
_vm->setupSubtitles(inst->_text.c_str(), inst->_text2.c_str(), inst->_y);
}

View file

@ -234,7 +234,7 @@ DECLARE_COMMAND_OPCODE(get) {
DECLARE_COMMAND_OPCODE(location) {
_vm->scheduleLocationSwitch(ctxt._cmd->_string);
_vm->scheduleLocationSwitch(ctxt._cmd->_string.c_str());
}

View file

@ -31,20 +31,12 @@
namespace Parallaction {
GfxObj::GfxObj(uint objType, Frames *frames, const char* name) :
_frames(frames), x(0), y(0), z(0), _prog(0), _flags(0),
_name(name), _frames(frames), x(0), y(0), z(0), _prog(0), _flags(0),
type(objType), frame(0), layer(3), scale(100), _hasMask(false), _hasPath(false),
transparentKey(0), _maskId(0), _pathId(0) {
if (name) {
_name = strdup(name);
} else {
_name = 0;
}
}
transparentKey(0), _maskId(0), _pathId(0) {}
GfxObj::~GfxObj() {
delete _frames;
free(_name);
}
void GfxObj::release() {
@ -53,7 +45,7 @@ void GfxObj::release() {
}
const char *GfxObj::getName() const {
return _name;
return _name.c_str();
}
uint GfxObj::getNum() {

View file

@ -27,6 +27,7 @@
#include "common/rect.h"
#include "common/hashmap.h"
#include "common/hash-str.h"
#include "common/str.h"
#include "common/stream.h"
#include "common/array.h"
@ -286,7 +287,7 @@ enum {
};
class GfxObj {
char *_name;
Common::String _name;
Frames *_frames;
public:

View file

@ -36,7 +36,6 @@ Command::Command() {
_valid = false;
_flags = 0;
_string = 0;
_callable = 0;
_object = 0;
_counterValue = 0;
@ -44,26 +43,17 @@ Command::Command() {
_zeta1 = 0;
_zeta2 = 0;
_characterId = 0;
_string2 = 0;
_musicCommand = 0;
_musicParm = 0;
}
Command::~Command() {
free(_string);
free(_string2);
}
Animation::Animation() {
gfxobj = NULL;
_scriptName = 0;
_frame = 0;
_z = 0;
}
Animation::~Animation() {
free(_scriptName);
if (gfxobj) {
gfxobj->release();
}
@ -307,16 +297,9 @@ Instruction::Instruction() {
_endif = 0;
// BRA specific
_text = 0;
_text2 = 0;
_y = 0;
}
Instruction::~Instruction() {
free(_text);
free(_text2);
}
int16 ScriptVar::getValue() {
if (_flags & kParaImmediate) {
@ -415,8 +398,9 @@ void Table::addData(const char* s) {
if (!(_used < _size))
error("Table overflow");
_data[_used++] = strdup(s);
char *data = (char *)malloc(strlen(s) + 1);
strcpy(data, s);
_data[_used++] = data;
}
uint16 Table::lookup(const char* s) {

View file

@ -112,13 +112,12 @@ struct Command {
bool _valid;
Command();
~Command();
// Common fields
uint32 _flags;
ZonePtr _zone;
Common::String _zoneName;
char* _string;
Common::String _string;
uint16 _callable;
uint16 _object;
Common::Point _move;
@ -132,7 +131,7 @@ struct Command {
int _zeta1;
int _zeta2;
int _characterId;
char* _string2;
Common::String _string2;
int _musicCommand;
int _musicParm;
};
@ -428,14 +427,12 @@ struct Instruction {
// BRA specific
byte _colors[3];
ScriptVar _opC;
char *_text;
char *_text2;
Common::String _text;
Common::String _text2;
int _y;
uint32 _endif;
Instruction();
~Instruction();
};
enum {
@ -474,7 +471,7 @@ protected:
public:
GfxObj *gfxobj;
char *_scriptName;
Common::String _scriptName;
Animation();
virtual ~Animation();

View file

@ -526,7 +526,7 @@ public:
virtual DialogueManager *createDialogueManager(ZonePtr z);
virtual bool processGameEvent(int event);
void setupSubtitles(char *s, char *s2, int y);
void setupSubtitles(const char *s, const char *s2, int y);
void clearSubtitles();
void testCounterCondition(const Common::String &name, int op, int value);

View file

@ -430,8 +430,8 @@ void Parallaction_br::parseLocation(const char *filename) {
restoreOrSaveZoneFlags(*ait, visited);
// load the script
if ((*ait)->_scriptName) {
loadProgram(*ait, (*ait)->_scriptName);
if (!(*ait)->_scriptName.empty()) {
loadProgram(*ait, (*ait)->_scriptName.c_str());
}
}

View file

@ -46,19 +46,14 @@ class LocationName {
bool _hasCharacter;
bool _hasSlide;
char *_buf;
Common::String _buf;
public:
LocationName() {
_buf = 0;
_hasSlide = false;
_hasCharacter = false;
}
~LocationName() {
free(_buf);
}
void bind(const char*);
const char *location() const {
@ -82,7 +77,7 @@ public:
}
const char *c_str() const {
return _buf;
return _buf.c_str();
}
};
@ -106,15 +101,12 @@ public:
is commented out, and would definitely crash the current implementation.
*/
void LocationName::bind(const char *s) {
free(_buf);
_buf = strdup(s);
_buf = s;
_hasSlide = false;
_hasCharacter = false;
Common::StringArray list;
char *tok = strtok(_buf, ".");
char *tok = strtok(_buf.begin(), ".");
while (tok) {
list.push_back(tok);
tok = strtok(NULL, ".");
@ -139,8 +131,7 @@ void LocationName::bind(const char *s) {
}
_location = list[0];
strcpy(_buf, s); // kept as reference
_buf = s; // kept as reference
}
Parallaction_ns::Parallaction_ns(OSystem* syst, const PARALLACTIONGameDescription *gameDesc) : Parallaction(syst, gameDesc),
@ -454,8 +445,8 @@ void Parallaction_ns::parseLocation(const char *filename) {
// this loads animation scripts
AnimationList::iterator it = _location._animations.begin();
for ( ; it != _location._animations.end(); ++it) {
if ((*it)->_scriptName) {
loadProgram(*it, (*it)->_scriptName);
if (!(*it)->_scriptName.empty()) {
loadProgram(*it, (*it)->_scriptName.c_str());
}
}

View file

@ -519,7 +519,7 @@ DECLARE_COMMAND_PARSER(location) {
createCommand(_parser->_lookup);
ctxt.cmd->_string = strdup(_tokens[1]);
ctxt.cmd->_string = _tokens[1];
ctxt.nextToken++;
ctxt.cmd->_startPos.x = -1000;
@ -550,7 +550,7 @@ DECLARE_COMMAND_PARSER(string) {
createCommand(_parser->_lookup);
ctxt.cmd->_string = strdup(_tokens[1]);
ctxt.cmd->_string = _tokens[1];
ctxt.nextToken++;
parseCommandFlags();
@ -685,11 +685,11 @@ DECLARE_COMMAND_PARSER(text) {
ctxt.cmd->_zeta0 = -1;
}
ctxt.cmd->_string = strdup(_tokens[ctxt.nextToken]);
ctxt.cmd->_string = _tokens[ctxt.nextToken];
ctxt.nextToken++;
if (_tokens[ctxt.nextToken][0] != '\0' && scumm_stricmp("flags", _tokens[ctxt.nextToken])) {
ctxt.cmd->_string2 = strdup(_tokens[ctxt.nextToken]);
ctxt.cmd->_string2 = _tokens[ctxt.nextToken];
ctxt.nextToken++;
}
@ -1011,11 +1011,11 @@ DECLARE_INSTRUCTION_PARSER(text) {
ctxt.inst->_y = -1;
}
ctxt.inst->_text = strdup(_tokens[_si]);
ctxt.inst->_text = _tokens[_si];
_si++;
if (_tokens[_si][0] != '\0' && scumm_stricmp("flags", _tokens[_si])) {
ctxt.inst->_text2 = strdup(_tokens[_si]);
ctxt.inst->_text2 = _tokens[_si];
}
ctxt.inst->_index = _parser->_lookup;

View file

@ -195,7 +195,7 @@ void LocationParser_ns::warning_unexpected() {
DECLARE_ANIM_PARSER(script) {
debugC(7, kDebugParser, "ANIM_PARSER(script) ");
ctxt.a->_scriptName = strdup(_tokens[1]);
ctxt.a->_scriptName = _tokens[1];
}
@ -643,7 +643,7 @@ DECLARE_COMMAND_PARSER(location) {
createCommand(_parser->_lookup);
ctxt.cmd->_string = strdup(_tokens[ctxt.nextToken]);
ctxt.cmd->_string = _tokens[ctxt.nextToken];
ctxt.nextToken++;
parseCommandFlags();

View file

@ -585,7 +585,7 @@ void PathWalker_BR::doWalk(State &s) {
if (s._walkDelay > 0) {
s._walkDelay--;
if (s._walkDelay == 0 && s._a->_scriptName) {
if (s._walkDelay == 0 && !s._a->_scriptName.empty()) {
// stop script and reset
s._a->_flags &= ~kFlagsActing;
// _vm->_programExec->resetProgram(s._a->_scriptName);