X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftalloc%2Ftalloc.h;h=8b0f8a38bc82d6782dbe29c2a56c4d3c1daaab63;hp=7da8d975d5bdfd7eda86dc2246987d923c6683cb;hb=0f126c41cd2e9ccaff5fb7633c079db0bb0e14c3;hpb=650c775ff00cccd03fc84e7789a03c51d9839004 diff --git a/ccan/talloc/talloc.h b/ccan/talloc/talloc.h index 7da8d975..8b0f8a38 100644 --- a/ccan/talloc/talloc.h +++ b/ccan/talloc/talloc.h @@ -442,12 +442,12 @@ void talloc_free_children(void *ptr); #define talloc_zero_array(ctx, type, count) (type *)_talloc_zero_array(ctx, sizeof(type), count, #type) /** - * talloc_zero_array - allocate an array of zeroed types + * talloc_array_size - allocate an array of elements of the given size * @ctx: context to be parent of this allocation, or NULL. - * @type: the type to be allocated. + * @size: the size of each element * @count: the number of elements to be allocated. * - * Just like talloc_array, but zeroes the memory. + * Typeless form of talloc_array. */ #define talloc_array_size(ctx, size, count) _talloc_array(ctx, size, count, __location__) @@ -928,6 +928,32 @@ size_t talloc_get_size(const void *ctx); */ void *talloc_find_parent_byname(const void *ctx, const char *name); +/** + * talloc_external_enable - set external allocators for some nodes + * @alloc: the malloc() equivalent + * @free: the free() equivalent + * @realloc: the realloc() equivalent + * + * talloc_mark_external() can be used to mark nodes whose children should + * use separate allocators. Currently the set of allocators is global, not + * per-node, and is set with this function. + * + * The parent pointers is the talloc pointer of the parent. + */ +void talloc_external_enable(void *(*alloc)(void *parent, size_t size), + void (*free)(void *ptr, void *parent), + void *(*realloc)(void *ptr, void *parent, size_t)); + +/** + * talloc_mark_external - children of this note must use external allocators + * @p: the talloc pointer + * + * This function indicates that all children (and children's children etc) + * should use the allocators set up wth talloc_external_enable() rather than + * normal malloc/free. + */ +void talloc_mark_external(void *ptr); + /* The following definitions come from talloc.c */ void *_talloc(const void *context, size_t size); void _talloc_set_destructor(const void *ptr, int (*destructor)(void *));