diff options
author | lloyd <[email protected]> | 2008-09-30 21:13:38 +0000 |
---|---|---|
committer | lloyd <[email protected]> | 2008-09-30 21:13:38 +0000 |
commit | 3f0d484096e1e782f72e3cdf43853c7d9f309ee9 (patch) | |
tree | 341f05d66128321304aafc72df28854650e13ef1 /src/core/defalloc.cpp | |
parent | b8115f4123a55510ab4f4840efb623de662a248f (diff) | |
parent | a2c9be1a6bf801aac4d6d32759d51608f536d14a (diff) |
propagate from branch 'net.randombit.botan' (head 9524e848cdacd0b56ded9bd6b51fd34b6a7d3fc4)
to branch 'net.randombit.botan.ecdsa' (head 8231f4285dce2d5ec754f7afa72e0d34807de061)
Diffstat (limited to 'src/core/defalloc.cpp')
-rw-r--r-- | src/core/defalloc.cpp | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/src/core/defalloc.cpp b/src/core/defalloc.cpp new file mode 100644 index 000000000..5fb8e1447 --- /dev/null +++ b/src/core/defalloc.cpp @@ -0,0 +1,98 @@ +/************************************************* +* Basic Allocators Source File * +* (C) 1999-2007 Jack Lloyd * +*************************************************/ + +#include <botan/defalloc.h> +#include <botan/libstate.h> +#include <botan/util.h> +#include <cstdlib> +#include <cstring> + +namespace Botan { + +namespace { + +/************************************************* +* Perform Memory Allocation * +*************************************************/ +void* do_malloc(u32bit n, bool do_lock) + { + void* ptr = std::malloc(n); + + if(!ptr) + return 0; + + if(do_lock) + lock_mem(ptr, n); + + std::memset(ptr, 0, n); + return ptr; + } + +/************************************************* +* Perform Memory Deallocation * +*************************************************/ +void do_free(void* ptr, u32bit n, bool do_lock) + { + if(!ptr) + return; + + std::memset(ptr, 0, n); + if(do_lock) + unlock_mem(ptr, n); + + std::free(ptr); + } + +} + +/************************************************* +* Malloc_Allocator's Allocation * +*************************************************/ +void* Malloc_Allocator::allocate(u32bit n) + { + return do_malloc(n, false); + } + +/************************************************* +* Malloc_Allocator's Deallocation * +*************************************************/ +void Malloc_Allocator::deallocate(void* ptr, u32bit n) + { + do_free(ptr, n, false); + } + +/************************************************* +* Locking_Allocator's Allocation * +*************************************************/ +void* Locking_Allocator::alloc_block(u32bit n) + { + return do_malloc(n, true); + } + +/************************************************* +* Locking_Allocator's Deallocation * +*************************************************/ +void Locking_Allocator::dealloc_block(void* ptr, u32bit n) + { + do_free(ptr, n, true); + } + +/************************************************* +* Get an allocator * +*************************************************/ +Allocator* Allocator::get(bool locking) + { + std::string type = ""; + if(!locking) + type = "malloc"; + + Allocator* alloc = global_state().get_allocator(type); + if(alloc) + return alloc; + + throw Exception("Couldn't find an allocator to use in get_allocator"); + } + +} |