X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftalloc%2Ftalloc.h;h=5263b9fed269261f833b2e9d55765a7242ca964b;hp=54790055ea8bf1c56f3452585596b744fd03c5f7;hb=c520b4adbbfba5a663b94e71216b90eddd0bf877;hpb=3adbb41d724fca10f9a4f11b56afc58091ba58f4 diff --git a/ccan/talloc/talloc.h b/ccan/talloc/talloc.h index 54790055..5263b9fe 100644 --- a/ccan/talloc/talloc.h +++ b/ccan/talloc/talloc.h @@ -78,6 +78,29 @@ */ #define talloc(ctx, type) (type *)talloc_named_const(ctx, sizeof(type), #type) +/** + * TALLOC_CTX - indicate that a pointer is used as a talloc parent. + * + * As talloc is a hierarchial memory allocator, every talloc chunk is a + * potential parent to other talloc chunks. So defining a separate type for a + * talloc chunk is not strictly necessary. TALLOC_CTX is defined nevertheless, + * as it provides an indicator for function arguments. + * + * Example: + * struct foo { + * int val; + * }; + * + * static struct foo *foo_new(TALLOC_CTX *mem_ctx) + * { + * struct foo *foo = talloc(mem_ctx, struct foo); + * if (foo) + * foo->val = 0; + * return foo; + * } + */ +typedef void TALLOC_CTX; + /** * talloc_set - allocate dynamic memory for a type, into a pointer * @ptr: pointer to the pointer to assign. @@ -557,7 +580,7 @@ char *talloc_strndup(const void *t, const char *p, size_t n); * * talloc_set_name_const(ptr, ptr) */ -char *talloc_asprintf(const void *t, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3); +char *talloc_asprintf(const void *t, const char *fmt, ...) PRINTF_FMT(2,3); /** * talloc_append_string - concatenate onto a tallocated string @@ -572,7 +595,7 @@ char *talloc_asprintf(const void *t, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3) * * talloc_set_name_const(ptr, ptr) */ -char *talloc_append_string(char *orig, const char *append); +char *WARN_UNUSED_RESULT talloc_append_string(char *orig, const char *append); /** * talloc_asprintf_append - sprintf onto the end of a talloc buffer. @@ -586,7 +609,8 @@ char *talloc_append_string(char *orig, const char *append); * equivalent to: * talloc_set_name_const(ptr, ptr) */ -char *talloc_asprintf_append(char *s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3); +char *WARN_UNUSED_RESULT talloc_asprintf_append(char *s, const char *fmt, ...) + PRINTF_FMT(2,3); /** * talloc_vasprintf - vsprintf into a talloc buffer. @@ -602,7 +626,8 @@ char *talloc_asprintf_append(char *s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3 * * talloc_set_name_const(ptr, ptr) */ -char *talloc_vasprintf(const void *t, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0); +char *talloc_vasprintf(const void *t, const char *fmt, va_list ap) + PRINTF_FMT(2,0); /** * talloc_vasprintf_append - sprintf onto the end of a talloc buffer. @@ -613,7 +638,8 @@ char *talloc_vasprintf(const void *t, const char *fmt, va_list ap) PRINTF_ATTRIB * The talloc_vasprintf_append() function is equivalent to * talloc_asprintf_append(), except it takes a va_list. */ -char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0); +char *WARN_UNUSED_RESULT talloc_vasprintf_append(char *s, const char *fmt, va_list ap) + PRINTF_FMT(2,0); /** * talloc_set_type - force the name of a pointer to a particular type @@ -689,7 +715,8 @@ int talloc_increase_ref_count(const void *ptr); * without releasing the name. All of the memory is released when the ptr is * freed using talloc_free(). */ -const char *talloc_set_name(const void *ptr, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3); +const char *talloc_set_name(const void *ptr, const char *fmt, ...) + PRINTF_FMT(2,3); /** * talloc_set_name_const - set a talloc pointer name to a string constant @@ -720,7 +747,7 @@ void talloc_set_name_const(const void *ptr, const char *name); * talloc_set_name(ptr, fmt, ....); */ void *talloc_named(const void *context, size_t size, - const char *fmt, ...) PRINTF_ATTRIBUTE(3,4); + const char *fmt, ...) PRINTF_FMT(3,4); /** * talloc_named_const - create a specifically-named talloc pointer @@ -763,7 +790,7 @@ void *talloc_check_name(const void *ptr, const char *name); * * talloc_named(NULL, 0, fmt, ...); */ -void *talloc_init(const char *fmt, ...) PRINTF_ATTRIBUTE(1,2); +void *talloc_init(const char *fmt, ...) PRINTF_FMT(1,2); /** * talloc_total_size - get the bytes used by the pointer and its children @@ -930,6 +957,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 @@ -962,7 +1002,7 @@ void _talloc_set_destructor(const void *ptr, int (*destructor)(void *)); size_t talloc_reference_count(const void *ptr); void *_talloc_reference(const void *context, const void *ptr); -void *_talloc_realloc(const void *context, void *ptr, size_t size, const char *name); +void *WARN_UNUSED_RESULT _talloc_realloc(const void *context, void *ptr, size_t size, const char *name); void *talloc_parent(const void *ptr); const char *talloc_parent_name(const void *ptr); void *_talloc_steal(const void *new_ctx, const void *ptr); @@ -971,7 +1011,7 @@ void *_talloc_zero(const void *ctx, size_t size, const char *name); void *_talloc_memdup(const void *t, const void *p, size_t size, const char *name); void *_talloc_array(const void *ctx, size_t el_size, unsigned count, const char *name); void *_talloc_zero_array(const void *ctx, size_t el_size, unsigned count, const char *name); -void *_talloc_realloc_array(const void *ctx, void *ptr, size_t el_size, unsigned count, const char *name); +void *WARN_UNUSED_RESULT _talloc_realloc_array(const void *ctx, void *ptr, size_t el_size, unsigned count, const char *name); void *talloc_realloc_fn(const void *context, void *ptr, size_t size); void talloc_show_parents(const void *context, FILE *file); int talloc_is_parent(const void *context, const void *ptr);