summaryrefslogtreecommitdiff
path: root/lib/common/Guards.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/common/Guards.h')
-rw-r--r--lib/common/Guards.h29
1 files changed, 25 insertions, 4 deletions
diff --git a/lib/common/Guards.h b/lib/common/Guards.h
index cd2e4628..46b6d2bd 100644
--- a/lib/common/Guards.h
+++ b/lib/common/Guards.h
@@ -37,9 +37,8 @@ public:
{
if(mOSFileHandle < 0)
{
- BOX_LOG_SYS_ERROR("FileHandleGuard: failed to open "
- "file '" << rFilename << "'");
- THROW_EXCEPTION(CommonException, OSFileOpenError)
+ THROW_SYS_FILE_ERROR("Failed to open file", rFilename,
+ CommonException, OSFileOpenError);
}
}
@@ -78,7 +77,17 @@ class MemoryBlockGuard
{
public:
MemoryBlockGuard(int BlockSize)
- : mpBlock(::malloc(BlockSize))
+ : mpBlock(::malloc(BlockSize)),
+ mBlockSize(BlockSize)
+ {
+ if(mpBlock == 0)
+ {
+ throw std::bad_alloc();
+ }
+ }
+
+ MemoryBlockGuard(void *pBlock)
+ : mpBlock(pBlock)
{
if(mpBlock == 0)
{
@@ -110,9 +119,21 @@ public:
}
mpBlock = ptrn;
}
+
+ void* Release()
+ {
+ void* pBlock = mpBlock;
+ mpBlock = ::malloc(mBlockSize);
+ if(mpBlock == 0)
+ {
+ throw std::bad_alloc();
+ }
+ return pBlock;
+ }
private:
void *mpBlock;
+ int mBlockSize;
};
#include "MemLeakFindOff.h"