X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftalloc%2Ftalloc.h;h=0ca338b72fdaac64d0d766a4c8bb05019aee5884;hp=d27c68922c9c8f0d98a0b5fe76d3ea4b8093d3fb;hb=838db0d7ea37fc2a21d03d159b55b042f8144cb3;hpb=1c005e1223d2f8f664ce4b3be6cd7eb4dd449844 diff --git a/ccan/talloc/talloc.h b/ccan/talloc/talloc.h index d27c6892..0ca338b7 100644 --- a/ccan/talloc/talloc.h +++ b/ccan/talloc/talloc.h @@ -210,7 +210,7 @@ int talloc_free(const void *ptr); * talloc, talloc_free */ #define talloc_set_destructor(ptr, function) \ - _talloc_set_destructor((ptr), typesafe_cb_def(int, (function), (ptr))) + _talloc_set_destructor((ptr), typesafe_cb(int, void *, (function), (ptr))) /** * talloc_zero - allocate zeroed dynamic memory for a type @@ -252,7 +252,7 @@ int talloc_free(const void *ptr); * b = talloc_array(a, unsigned int, 100); * * See Also: - * talloc, talloc_zero_array + * talloc, talloc_zero_array, talloc_array_length */ #define talloc_array(ctx, type, count) (type *)_talloc_array(ctx, sizeof(type), count, #type) @@ -276,7 +276,7 @@ int talloc_free(const void *ptr); */ #define talloc_size(ctx, size) talloc_named_const(ctx, size, __location__) -#ifdef HAVE_TYPEOF +#if HAVE_TYPEOF /** * talloc_steal - change/set the parent context of a talloc pointer * @ctx: the new parent @@ -936,12 +936,25 @@ void talloc_enable_leak_report_full(void); void *talloc_autofree_context(void); /** - * talloc_get_size - get the size of an allocation + * talloc_array_length - get the number of elements in a talloc array + * @p: the talloc pointer whose allocation to measure. + * + * This assumes that @p has been allocated as the same type. NULL returns 0. + * + * See Also: + * talloc_get_size + */ +#define talloc_array_length(p) (talloc_get_size(p) / sizeof((*p))) + +/** + * talloc_get_size - get the requested size of an allocation * @ctx: the talloc pointer whose allocation to measure. * * This function lets you know the amount of memory alloced so far by this - * context. It does NOT account for subcontext memory. This can be used to - * calculate the size of an array. + * context. It does NOT account for subcontext memory. + * + * See Also: + * talloc_array_length */ size_t talloc_get_size(const void *ctx); @@ -957,6 +970,19 @@ size_t talloc_get_size(const void *ctx); */ void *talloc_find_parent_byname(const void *ctx, const char *name); +/** + * talloc_set_allocator - set the allocations function(s) for talloc. + * @malloc: the malloc function + * @free: the free function + * @realloc: the realloc function + * + * Instead of using the standard malloc, free and realloc, talloc will use + * these replacements. @realloc will never be called with size 0 or ptr NULL. + */ +void talloc_set_allocator(void *(*malloc)(size_t size), + void (*free)(void *ptr), + void *(*realloc)(void *ptr, size_t size)); + /** * talloc_add_external - create an externally allocated node * @ctx: the parent