summaryrefslogtreecommitdiff
path: root/server/util/memory.c
diff options
context:
space:
mode:
Diffstat (limited to 'server/util/memory.c')
-rw-r--r--server/util/memory.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/server/util/memory.c b/server/util/memory.c
new file mode 100644
index 00000000..e73fd016
--- /dev/null
+++ b/server/util/memory.c
@@ -0,0 +1,26 @@
+#include "util/util.h"
+
+/*
+ * talloc_takeover
+ * This function will take a non-talloc pointer and add it to a talloc
+ * memory context. It will accept a destructor for the original pointer
+ * so that when the parent memory context is freed, the non-talloc
+ * pointer will also be freed properly.
+ */
+TALLOC_CTX *talloc_takeover(TALLOC_CTX *mem_ctx, void *ptr, int (*destructor)(void **)) {
+ void **handle;
+
+ if (ptr == NULL) {
+ return NULL;
+ }
+
+ handle = talloc_named_const(mem_ctx, sizeof(void *), "void *");
+ if (handle == NULL) {
+ return NULL;
+ }
+
+ *handle = ptr;
+ talloc_set_destructor(handle,destructor);
+
+ return handle;
+} \ No newline at end of file