aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorMax Horn2009-03-05 20:37:53 +0000
committerMax Horn2009-03-05 20:37:53 +0000
commit05b4370c21b3abf7a1ff6aa83194cf95ab73579c (patch)
treea4d2cecedc5735d3205489e50610f85ca57be348 /common
parent2017d1c9ea12968e80a7aaeed1d9289f39c3a96e (diff)
downloadscummvm-rg350-05b4370c21b3abf7a1ff6aa83194cf95ab73579c.tar.gz
scummvm-rg350-05b4370c21b3abf7a1ff6aa83194cf95ab73579c.tar.bz2
scummvm-rg350-05b4370c21b3abf7a1ff6aa83194cf95ab73579c.zip
Fix for bug #2664460: Various SeekableReadStream::seek() implementations (as well as our unit tests, ouch) handled SEEK_END incorrectly (using -offset instead of offset), contrary to what the docs said and what fseek does. Hopefully I found and fixed all affected parts, but still watch out for regressions
svn-id: r39135
Diffstat (limited to 'common')
-rw-r--r--common/stream.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/common/stream.cpp b/common/stream.cpp
index 1cdcd50723..8614939e54 100644
--- a/common/stream.cpp
+++ b/common/stream.cpp
@@ -69,7 +69,7 @@ bool MemoryReadStream::seek(int32 offs, int whence) {
case SEEK_END:
// SEEK_END works just like SEEK_SET, only 'reversed',
// i.e. from the end.
- offs = _size - offs;
+ offs = _size + offs;
// Fall through
case SEEK_SET:
_ptr = _ptrOrig + offs;
@@ -204,7 +204,7 @@ bool SeekableSubReadStream::seek(int32 offset, int whence) {
switch(whence) {
case SEEK_END:
- offset = size() - offset;
+ offset = size() + offset;
// fallthrough
case SEEK_SET:
_pos = _begin + offset;