diff options
Diffstat (limited to 'lib/common/Guards.h')
-rw-r--r-- | lib/common/Guards.h | 29 |
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" |