aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicola Mettifogo2007-03-04 15:00:50 +0000
committerNicola Mettifogo2007-03-04 15:00:50 +0000
commit1eb2d6f6253c578735da81a6e7671ae7773d05e0 (patch)
tree03a158de2b1452dbf91d4e3e2e3bdc11a306cd7a
parentb440bc1a0357503c6edec22ea1182613040de41c (diff)
downloadscummvm-rg350-1eb2d6f6253c578735da81a6e7671ae7773d05e0.tar.gz
scummvm-rg350-1eb2d6f6253c578735da81a6e7671ae7773d05e0.tar.bz2
scummvm-rg350-1eb2d6f6253c578735da81a6e7671ae7773d05e0.zip
made Script optionally take ownership and dispose input text
svn-id: r25973
-rw-r--r--engines/parallaction/parser.cpp9
-rw-r--r--engines/parallaction/parser.h7
2 files changed, 12 insertions, 4 deletions
diff --git a/engines/parallaction/parser.cpp b/engines/parallaction/parser.cpp
index c41452481a..ee420b2e5f 100644
--- a/engines/parallaction/parser.cpp
+++ b/engines/parallaction/parser.cpp
@@ -29,8 +29,13 @@ namespace Parallaction {
char _tokens[20][40];
-Script::Script(const char* s) : _src(s) {
+Script::Script(const char* s, bool disposeSource) : _src(s), _disposeSource(disposeSource) {
+ _pos = const_cast<char*>(_src);
+}
+Script::~Script() {
+ if (_disposeSource)
+ free(const_cast<char*>(_src));
}
char *Script::readLine(char *buf, size_t bufSize) {
@@ -39,7 +44,7 @@ char *Script::readLine(char *buf, size_t bufSize) {
char v2 = 0;
for ( _si = 0; _si<bufSize; _si++) {
- v2 = *_src++;
+ v2 = *_pos++;
if (v2 == 0xA || v2 == -1) break;
if (v2 != -1 && _si < bufSize) buf[_si] = v2;
}
diff --git a/engines/parallaction/parser.h b/engines/parallaction/parser.h
index c0d8613d3c..fa633676e0 100644
--- a/engines/parallaction/parser.h
+++ b/engines/parallaction/parser.h
@@ -37,10 +37,13 @@ extern char _tokens[][40];
class Script : public Common::SeekableReadStream {
- const char* _src;
+ const char* const _src;
+ bool _disposeSource;
+ char* _pos;
public:
- Script(const char* s);
+ Script(const char* s, bool _disposeSource = false);
+ ~Script();
uint32 read(void *dataPtr, uint32 dataSize);