aboutsummaryrefslogtreecommitdiffstats
path: root/src/defalloc.cpp
diff options
context:
space:
mode:
authorlloyd <[email protected]>2006-05-18 18:33:19 +0000
committerlloyd <[email protected]>2006-05-18 18:33:19 +0000
commita2c99d3270eb73ef2db5704fc54356c6b75096f8 (patch)
treead3d6c4fcc8dd0f403f8105598943616246fe172 /src/defalloc.cpp
Initial checkin1.5.6
Diffstat (limited to 'src/defalloc.cpp')
-rw-r--r--src/defalloc.cpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/defalloc.cpp b/src/defalloc.cpp
new file mode 100644
index 000000000..ad54fb3ca
--- /dev/null
+++ b/src/defalloc.cpp
@@ -0,0 +1,81 @@
+/*************************************************
+* Basic Allocators Source File *
+* (C) 1999-2006 The Botan Project *
+*************************************************/
+
+#include <botan/defalloc.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::alloc_block(u32bit n)
+ {
+ return do_malloc(n, false);
+ }
+
+/*************************************************
+* Malloc_Allocator's Deallocation *
+*************************************************/
+void Malloc_Allocator::dealloc_block(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);
+ }
+
+}