aboutsummaryrefslogtreecommitdiffstats
path: root/src/alloc/system_alloc
diff options
context:
space:
mode:
authorlloyd <[email protected]>2008-11-08 19:59:19 +0000
committerlloyd <[email protected]>2008-11-08 19:59:19 +0000
commitc0e3dc424479a09f9e320625d64d230cc952b22b (patch)
treee337c31a3d0c5b6a0d9839bfc01b89c41e3058f8 /src/alloc/system_alloc
parenta91a427f69405aae9e662551472f7358ef9e4244 (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.cpp98
-rw-r--r--src/alloc/system_alloc/defalloc.h41
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