diff options
author | lloyd <[email protected]> | 2008-11-08 19:59:19 +0000 |
---|---|---|
committer | lloyd <[email protected]> | 2008-11-08 19:59:19 +0000 |
commit | c0e3dc424479a09f9e320625d64d230cc952b22b (patch) | |
tree | e337c31a3d0c5b6a0d9839bfc01b89c41e3058f8 /src/alloc/system_alloc | |
parent | a91a427f69405aae9e662551472f7358ef9e4244 (diff) |
Continue to dismantle the core module (aka ball of mud), moving allocator
code to alloc/ subdirs
Diffstat (limited to 'src/alloc/system_alloc')
-rw-r--r-- | src/alloc/system_alloc/defalloc.cpp | 98 | ||||
-rw-r--r-- | src/alloc/system_alloc/defalloc.h | 41 |
2 files changed, 139 insertions, 0 deletions
diff --git a/src/alloc/system_alloc/defalloc.cpp b/src/alloc/system_alloc/defalloc.cpp new file mode 100644 index 000000000..5fb8e1447 --- /dev/null +++ b/src/alloc/system_alloc/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"); + } + +} diff --git a/src/alloc/system_alloc/defalloc.h b/src/alloc/system_alloc/defalloc.h new file mode 100644 index 000000000..dc01ee47f --- /dev/null +++ b/src/alloc/system_alloc/defalloc.h @@ -0,0 +1,41 @@ +/************************************************* +* Basic Allocators Header File * +* (C) 1999-2007 Jack Lloyd * +*************************************************/ + +#ifndef BOTAN_BASIC_ALLOC_H__ +#define BOTAN_BASIC_ALLOC_H__ + +#include <botan/mem_pool.h> + +namespace Botan { + +/************************************************* +* Malloc Allocator * +*************************************************/ +class BOTAN_DLL Malloc_Allocator : public Allocator + { + public: + void* allocate(u32bit); + void deallocate(void*, u32bit); + + std::string type() const { return "malloc"; } + }; + +/************************************************* +* Locking Allocator * +*************************************************/ +class BOTAN_DLL Locking_Allocator : public Pooling_Allocator + { + public: + Locking_Allocator(Mutex* m) : Pooling_Allocator(m) {} + + std::string type() const { return "locking"; } + private: + void* alloc_block(u32bit); + void dealloc_block(void*, u32bit); + }; + +} + +#endif |