aboutsummaryrefslogtreecommitdiff
path: root/queen
diff options
context:
space:
mode:
authorGregory Montoir2004-01-19 22:31:21 +0000
committerGregory Montoir2004-01-19 22:31:21 +0000
commit95891f95c728cdcf8bbd66d42a4c2b08c735b4fc (patch)
tree262095890794d6b528fa55f6c23a071156475b97 /queen
parent392940e7dd396c932dfba946642f0e567f656dc9 (diff)
downloadscummvm-rg350-95891f95c728cdcf8bbd66d42a4c2b08c735b4fc.tar.gz
scummvm-rg350-95891f95c728cdcf8bbd66d42a4c2b08c735b4fc.tar.bz2
scummvm-rg350-95891f95c728cdcf8bbd66d42a4c2b08c735b4fc.zip
*temporary* fix for LineReader to handle files not terminated by an empty string (*.crd)
svn-id: r12527
Diffstat (limited to 'queen')
-rw-r--r--queen/credits.cpp3
-rw-r--r--queen/logic.cpp4
-rw-r--r--queen/resource.cpp14
-rw-r--r--queen/resource.h5
4 files changed, 16 insertions, 10 deletions
diff --git a/queen/credits.cpp b/queen/credits.cpp
index 6d81839dd9..2ccc4055a7 100644
--- a/queen/credits.cpp
+++ b/queen/credits.cpp
@@ -31,7 +31,8 @@ namespace Queen {
Credits::Credits(QueenEngine *vm, const char* filename) :
_vm(vm), _running(true), _count(0), _pause(0), _justify(0), _fontSize(0), _color(0), _zone(0) {
_credits = new LineReader(
- (char*)_vm->resource()->loadFile(filename));
+ (char *)_vm->resource()->loadFile(filename),
+ _vm->resource()->fileSize(filename));
}
Credits::~Credits() {
diff --git a/queen/logic.cpp b/queen/logic.cpp
index 5bd080d763..7c7197ce3e 100644
--- a/queen/logic.cpp
+++ b/queen/logic.cpp
@@ -187,7 +187,9 @@ void Logic::initialise() {
// Step 2 : read queen2.jas and grab all description texts
- _queen2jas = new LineReader((char*)_vm->resource()->loadFile("QUEEN2.JAS"));
+ _queen2jas = new LineReader(
+ (char *)_vm->resource()->loadFile("QUEEN2.JAS"),
+ _vm->resource()->fileSize("QUEEN2.JAS"));
_objDescription = new char*[_numDescriptions + 1];
_objDescription[0] = 0;
diff --git a/queen/resource.cpp b/queen/resource.cpp
index da92f94836..156d21eda0 100644
--- a/queen/resource.cpp
+++ b/queen/resource.cpp
@@ -246,20 +246,22 @@ File *Resource::giveCompressedSound(const char *filename) {
return _resourceFile;
}
-LineReader::LineReader(char *buffer) : _buffer(buffer), _current(0) {
+LineReader::LineReader(char *buffer, uint32 bufsize) : _buffer(buffer), _bufSize(bufsize), _current(0) {
}
LineReader::~LineReader() {
delete[] _buffer;
}
-char* LineReader::nextLine() {
+char *LineReader::nextLine() {
char *startOfLine = _buffer + _current;
char *curPos = startOfLine;
- while (*curPos++ != 0xd) ;
- *(curPos - 1) = '\0'; // '\r'
- *curPos = '\0'; // '\n'
- _current = (curPos - _buffer) + 1;
+ while (curPos < _buffer + _bufSize && *curPos++ != 0xd) ;
+ *(curPos - 1) = '\0'; // '\r'
+ if (curPos < _buffer + _bufSize) {
+ *curPos = '\0'; // '\n'
+ _current = (curPos - _buffer) + 1;
+ }
return startOfLine;
}
diff --git a/queen/resource.h b/queen/resource.h
index 59f50885ef..1e97444463 100644
--- a/queen/resource.h
+++ b/queen/resource.h
@@ -64,12 +64,13 @@ struct GameVersion {
class LineReader {
public:
- LineReader(char *buffer);
+ LineReader(char *buffer, uint32 bufsize);
~LineReader();
- char* nextLine();
+ char *nextLine();
private:
char *_buffer;
+ uint32 _bufSize;
int _current;
};