[Scummvm-cvs-logs] SF.net SVN: scummvm: [28189] scummvm/trunk/engines/agos
Kirben at users.sourceforge.net
Kirben at users.sourceforge.net
Wed Jul 25 13:29:47 CEST 2007
Revision: 28189
http://scummvm.svn.sourceforge.net/scummvm/?rev=28189&view=rev
Author: Kirben
Date: 2007-07-25 04:29:47 -0700 (Wed, 25 Jul 2007)
Log Message:
-----------
Add eriktorbjorn's patch for bug #1498158 - AOGS: Itemheap overflow on 64bit systems.
Modified Paths:
--------------
scummvm/trunk/engines/agos/agos.cpp
scummvm/trunk/engines/agos/agos.h
scummvm/trunk/engines/agos/items.cpp
Modified: scummvm/trunk/engines/agos/agos.cpp
===================================================================
--- scummvm/trunk/engines/agos/agos.cpp 2007-07-25 04:52:12 UTC (rev 28188)
+++ scummvm/trunk/engines/agos/agos.cpp 2007-07-25 11:29:47 UTC (rev 28189)
@@ -148,10 +148,6 @@
_itemArraySize = 0;
_itemArrayInited = 0;
- _itemHeapPtr = 0;
- _itemHeapCurPos = 0;
- _itemHeapSize = 0;
-
_iconFilePtr = 0;
_codePtr = 0;
@@ -920,7 +916,11 @@
_midi.close();
- free(_itemHeapPtr - _itemHeapCurPos);
+ for (uint i = 0; i < _itemHeap.size(); i++) {
+ delete [] _itemHeap[i];
+ }
+ _itemHeap.clear();
+
free(_tablesHeapPtr - _tablesHeapCurPos);
free(_gameOffsetsPtr);
@@ -1054,7 +1054,11 @@
_midi.close();
- free(_itemHeapPtr - _itemHeapCurPos);
+ for (uint i = 0; i < _itemHeap.size(); i++) {
+ delete [] _itemHeap[i];
+ }
+ _itemHeap.clear();
+
free(_tablesHeapPtr - _tablesHeapCurPos);
free(_gameOffsetsPtr);
Modified: scummvm/trunk/engines/agos/agos.h
===================================================================
--- scummvm/trunk/engines/agos/agos.h 2007-07-25 04:52:12 UTC (rev 28188)
+++ scummvm/trunk/engines/agos/agos.h 2007-07-25 11:29:47 UTC (rev 28189)
@@ -28,6 +28,7 @@
#include "engines/engine.h"
+#include "common/array.h"
#include "common/keyboard.h"
#include "common/rect.h"
#include "common/util.h"
@@ -231,9 +232,7 @@
uint _itemArraySize;
uint _itemArrayInited;
- byte *_itemHeapPtr;
- uint _itemHeapCurPos;
- uint _itemHeapSize;
+ Common::Array<byte *> _itemHeap;
byte *_iconFilePtr;
Modified: scummvm/trunk/engines/agos/items.cpp
===================================================================
--- scummvm/trunk/engines/agos/items.cpp 2007-07-25 04:52:12 UTC (rev 28188)
+++ scummvm/trunk/engines/agos/items.cpp 2007-07-25 11:29:47 UTC (rev 28189)
@@ -42,24 +42,15 @@
}
byte *AGOSEngine::allocateItem(uint size) {
- byte *org = _itemHeapPtr;
- size = (size + sizeof(void*) - 1) & ~(sizeof(void*) - 1);
+ byte *item = new byte[size];
- _itemHeapPtr += size;
- _itemHeapCurPos += size;
-
- if (_itemHeapCurPos > _itemHeapSize)
- error("allocateItem: Itemheap overflow");
-
- return org;
+ memset(item, 0, size);
+ _itemHeap.push_back(item);
+ return item;
}
void AGOSEngine::allocItemHeap() {
- _itemHeapSize = _itemMemSize;
- _itemHeapCurPos = 0;
- _itemHeapPtr = (byte *)calloc(_itemMemSize, 1);
- if (!_itemHeapPtr)
- error("Out Of Memory - Items");
+ _itemHeap.clear();
}
bool AGOSEngine::hasIcon(Item *item) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list