aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Sandulenko2009-11-25 20:43:49 +0000
committerEugene Sandulenko2009-11-25 20:43:49 +0000
commit12828d3aafb5c235b47644e1bed4063651dc114b (patch)
treeb3c1ef5e31a4e6fc70ddfc05e6afb5a93053fec1
parent413a048a0605a4d43b33dddd0883face5e2c257c (diff)
downloadscummvm-rg350-12828d3aafb5c235b47644e1bed4063651dc114b.tar.gz
scummvm-rg350-12828d3aafb5c235b47644e1bed4063651dc114b.tar.bz2
scummvm-rg350-12828d3aafb5c235b47644e1bed4063651dc114b.zip
Cache resource file size to avoid excess file->size() calls.
svn-id: r46138
-rw-r--r--engines/saga/resource.cpp5
-rw-r--r--engines/saga/resource.h1
-rw-r--r--engines/saga/resource_rsc.cpp6
3 files changed, 7 insertions, 5 deletions
diff --git a/engines/saga/resource.cpp b/engines/saga/resource.cpp
index 9590a99272..3bdd8e00db 100644
--- a/engines/saga/resource.cpp
+++ b/engines/saga/resource.cpp
@@ -95,7 +95,7 @@ bool Resource::loadResContext_v1(ResourceContext *context, uint32 contextOffset,
resourceData->offset = contextOffset + readS1.readUint32();
resourceData->size = readS1.readUint32();
//sanity check
- if ((resourceData->offset > (uint)context->file->size()) || (resourceData->size > contextSize)) {
+ if ((resourceData->offset > (uint)context->fileSize) || (resourceData->size > contextSize)) {
result = false;
break;
}
@@ -123,6 +123,7 @@ bool Resource::loadContext(ResourceContext *context) {
return false;
}
+ context->fileSize = context->file->size();
context->isBigEndian = _vm->isBigEndian();
if (context->fileType & GAME_SWAPENDIAN)
@@ -132,7 +133,7 @@ bool Resource::loadContext(ResourceContext *context) {
context->fileType &= ~GAME_MACBINARY;
if (!isMacBinary) {
- if (!loadResContext(context, 0, context->file->size())) {
+ if (!loadResContext(context, 0, context->fileSize)) {
return false;
}
} else {
diff --git a/engines/saga/resource.h b/engines/saga/resource.h
index c3554cf7ce..c7d7eb9126 100644
--- a/engines/saga/resource.h
+++ b/engines/saga/resource.h
@@ -69,6 +69,7 @@ struct ResourceContext {
const char *fileName;
uint16 fileType;
Common::File *file;
+ int32 fileSize;
int serial; // IHNM speech files
bool isCompressed;
diff --git a/engines/saga/resource_rsc.cpp b/engines/saga/resource_rsc.cpp
index 17b330ea5e..035db7723a 100644
--- a/engines/saga/resource_rsc.cpp
+++ b/engines/saga/resource_rsc.cpp
@@ -98,7 +98,7 @@ bool Resource_RSC::loadMacContext(ResourceContext *context) {
byte macNameLen;
bool notSagaContext = false;
- if (context->file->size() < RSC_MIN_FILESIZE + MAC_BINARY_HEADER_SIZE) {
+ if (context->fileSize < RSC_MIN_FILESIZE + MAC_BINARY_HEADER_SIZE) {
return false;
}
@@ -128,8 +128,8 @@ bool Resource_RSC::loadMacContext(ResourceContext *context) {
macDataLength = context->file->readUint32BE();
macMapLength = context->file->readUint32BE();
- if (macDataOffset >= (uint)context->file->size() || macMapOffset >= (uint)context->file->size() ||
- macDataLength + macMapLength > (uint)context->file->size()) {
+ if (macDataOffset >= (uint)context->fileSize || macMapOffset >= (uint)context->fileSize ||
+ macDataLength + macMapLength > (uint)context->fileSize) {
return false;
}