aboutsummaryrefslogtreecommitdiff
path: root/engines/saga/resource.cpp
diff options
context:
space:
mode:
authorAndrew Kurushin2010-10-24 22:17:44 +0000
committerAndrew Kurushin2010-10-24 22:17:44 +0000
commit67cc1b8a84e8cbc344e87fe0f4715cae96199b69 (patch)
treefddf53a8a74288676993025c5c1ad073982db740 /engines/saga/resource.cpp
parent859c1c2c08c39262de6b6ba6e1169bb03d14353a (diff)
downloadscummvm-rg350-67cc1b8a84e8cbc344e87fe0f4715cae96199b69.tar.gz
scummvm-rg350-67cc1b8a84e8cbc344e87fe0f4715cae96199b69.tar.bz2
scummvm-rg350-67cc1b8a84e8cbc344e87fe0f4715cae96199b69.zip
SAGA: replace Resource:loadResource malloc with ByteArray class
svn-id: r53779
Diffstat (limited to 'engines/saga/resource.cpp')
-rw-r--r--engines/saga/resource.cpp20
1 files changed, 9 insertions, 11 deletions
diff --git a/engines/saga/resource.cpp b/engines/saga/resource.cpp
index 7b61676ffe..0fb7327f0d 100644
--- a/engines/saga/resource.cpp
+++ b/engines/saga/resource.cpp
@@ -103,8 +103,6 @@ bool ResourceContext::load(SagaEngine *vm, Resource *resource) {
uint32 subjectResourceId;
uint32 patchResourceId;
ResourceData *subjectResourceData;
- byte *tableBuffer;
- size_t tableSize;
bool isMacBinary;
if (_fileName == NULL) { // IHNM special case
@@ -141,10 +139,12 @@ bool ResourceContext::load(SagaEngine *vm, Resource *resource) {
if (subjectContext == NULL) {
error("ResourceContext::load() Subject context not found");
}
- resource->loadResource(this, _table.size() - 1, tableBuffer, tableSize);
+ ByteArray tableBuffer;
- MemoryReadStreamEndian readS2(tableBuffer, tableSize, _isBigEndian);
- for (i = 0; i < tableSize / 8; i++) {
+ resource->loadResource(this, _table.size() - 1, tableBuffer);
+
+ ByteArrayReadStreamEndian readS2(tableBuffer, _isBigEndian);
+ for (i = 0; i < tableBuffer.size() / 8; i++) {
subjectResourceId = readS2.readUint32();
patchResourceId = readS2.readUint32();
subjectResourceData = subjectContext->getResourceData(subjectResourceId);
@@ -153,7 +153,6 @@ bool ResourceContext::load(SagaEngine *vm, Resource *resource) {
subjectResourceData->offset = resourceData->offset;
subjectResourceData->size = resourceData->size;
}
- free(tableBuffer);
}
//process external patch files
@@ -366,7 +365,7 @@ void Resource::clearContexts() {
}
}
-void Resource::loadResource(ResourceContext *context, uint32 resourceId, byte*&resourceBuffer, size_t &resourceSize) {
+void Resource::loadResource(ResourceContext *context, uint32 resourceId, ByteArray &resourceBuffer) {
Common::File *file;
uint32 resourceOffset;
ResourceData *resourceData;
@@ -377,15 +376,14 @@ void Resource::loadResource(ResourceContext *context, uint32 resourceId, byte*&r
file = context->getFile(resourceData);
resourceOffset = resourceData->offset;
- resourceSize = resourceData->size;
- debug(8, "loadResource %d 0x%X:0x%X", resourceId, resourceOffset, uint(resourceSize));
+ debug(8, "loadResource %d 0x%X:0x%X", resourceId, resourceOffset, uint(resourceData->size));
+ resourceBuffer.resize(resourceData->size);
- resourceBuffer = (byte*)malloc(resourceSize);
file->seek((long)resourceOffset, SEEK_SET);
- if (file->read(resourceBuffer, resourceSize) != resourceSize) {
+ if (file->read(resourceBuffer.getBuffer(), resourceBuffer.size()) != resourceBuffer.size()) {
error("Resource::loadResource() failed to read");
}