summaryrefslogtreecommitdiffstats
path: root/old/botan/src/alloc/system_alloc/defalloc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'old/botan/src/alloc/system_alloc/defalloc.cpp')
-rw-r--r--old/botan/src/alloc/system_alloc/defalloc.cpp100
1 files changed, 100 insertions, 0 deletions
diff --git a/old/botan/src/alloc/system_alloc/defalloc.cpp b/old/botan/src/alloc/system_alloc/defalloc.cpp
new file mode 100644
index 0000000..8791c74
--- /dev/null
+++ b/old/botan/src/alloc/system_alloc/defalloc.cpp
@@ -0,0 +1,100 @@
+/*
+* Basic Allocators
+* (C) 1999-2007 Jack Lloyd
+*
+* Distributed under the terms of the Botan license
+*/
+
+#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");
+ }
+
+}