summaryrefslogtreecommitdiff
path: root/source3/lib/talloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/lib/talloc.c')
-rw-r--r--source3/lib/talloc.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/source3/lib/talloc.c b/source3/lib/talloc.c
index a04bd2561b..854a230a0e 100644
--- a/source3/lib/talloc.c
+++ b/source3/lib/talloc.c
@@ -47,6 +47,7 @@ TALLOC_CTX *talloc_init(void)
if (!t) return NULL;
t->list = NULL;
+ t->total_alloc_size = 0;
return t;
}
@@ -82,6 +83,7 @@ void *talloc(TALLOC_CTX *t, size_t size)
c->alloc_size = 0;
c->total_size = asize;
t->list = c;
+ t->total_alloc_size += asize;
}
p = ((char *)t->list->ptr) + t->list->alloc_size;
@@ -107,6 +109,7 @@ void talloc_destroy_pool(TALLOC_CTX *t)
}
t->list = NULL;
+ t->total_alloc_size = 0;
}
/* destroy a whole pool including the context */
@@ -117,3 +120,22 @@ void talloc_destroy(TALLOC_CTX *t)
talloc_destroy_pool(t);
free(t);
}
+
+/* return the current total size of the pool. */
+size_t talloc_pool_size(TALLOC_CTX *t)
+{
+ if (!t->list)
+ return 0;
+ return t->total_alloc_size;
+}
+
+/* talloc and zero memory. */
+void *talloc_zero(TALLOC_CTX *t, size_t size)
+{
+ void *p = talloc(t, size);
+
+ if (p)
+ memset(p, '\0', size);
+
+ return p;
+}