X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftal%2Ftal.h;h=a4c69f405f297421f34882d05a208c6253a772b4;hb=38ec541c4fd76d971a4959e31cd2a9ff113237ca;hp=200c2b161fc60916de8fb8954b27c293d2c0e84e;hpb=58277ab6c8b4dd6bb66638b88bd8505f46fdcb07;p=ccan diff --git a/ccan/tal/tal.h b/ccan/tal/tal.h index 200c2b16..a4c69f40 100644 --- a/ccan/tal/tal.h +++ b/ccan/tal/tal.h @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -32,7 +33,7 @@ typedef void tal_t; * *p = 1; */ #define tal(ctx, type) \ - ((type *)tal_alloc_((ctx), sizeof(type), false, false, TAL_LABEL(type, ""))) + tal_label(ctx, type, TAL_LABEL(type, "")) /** * talz - zeroing allocator function @@ -46,7 +47,7 @@ typedef void tal_t; * assert(*p == 0); */ #define talz(ctx, type) \ - ((type *)tal_alloc_((ctx), sizeof(type), true, false, TAL_LABEL(type, ""))) + talz_label(ctx, type, TAL_LABEL(type, "")) /** * tal_free - free a tal-allocated pointer. @@ -79,8 +80,7 @@ void *tal_free(const tal_t *p); * p[1] = 1; */ #define tal_arr(ctx, type, count) \ - ((type *)tal_alloc_arr_((ctx), sizeof(type), (count), false, \ - true, TAL_LABEL(type, "[]"))) + tal_arr_label(ctx, type, count, TAL_LABEL(type, "[]")) /** * tal_arrz - allocate an array of zeroed objects. @@ -96,8 +96,7 @@ void *tal_free(const tal_t *p); * assert(p[0] == 0 && p[1] == 0); */ #define tal_arrz(ctx, type, count) \ - ((type *)tal_alloc_arr_((ctx), sizeof(type), (count), true, \ - true, TAL_LABEL(type, "[]"))) + tal_arrz_label(ctx, type, count, TAL_LABEL(type, "[]")) /** * tal_resize - enlarge or reduce a tal_arr[z]. @@ -304,21 +303,21 @@ const char *tal_name(const tal_t *ptr); /** * tal_count - get the count of objects in a tal_arr. - * @ptr: The tal allocated object array. + * @ptr: The tal allocated object array (or NULL) * - * Returns 0 if @ptr has no length property, but be aware that that is - * also a valid size! + * Returns 0 if @ptr has no length property or is NULL, but be aware + * that that is also a valid size! */ -#define tal_count(p) (tal_len(p) / sizeof(*p)) +#define tal_count(p) (tal_bytelen(p) / sizeof(*p)) /** - * tal_len - get the count of bytes in a tal_arr. - * @ptr: The tal allocated object array. + * tal_bytelen - get the count of bytes in a tal_arr. + * @ptr: The tal allocated object array (or NULL) * - * Returns 0 if @ptr has no length property, but be aware that that is + * Returns 0 if @ptr has no length property or NULL, but be aware that that is * also a valid size! */ -size_t tal_len(const tal_t *ptr); +size_t tal_bytelen(const tal_t *ptr); /** * tal_first - get the first immediate tal object child. @@ -351,10 +350,8 @@ tal_t *tal_parent(const tal_t *ctx); * @type: the type (should match type of @p!) * @p: the object to copy (or reparented if take()) */ -#define tal_dup(ctx, type, p) \ - ((type *)tal_dup_((ctx), tal_typechk_(p, type *), \ - sizeof(type), 1, 0, \ - false, TAL_LABEL(type, ""))) +#define tal_dup(ctx, type, p) \ + tal_dup_label(ctx, type, p, TAL_LABEL(type, "")) /** * tal_dup_arr - duplicate an array. @@ -365,10 +362,27 @@ tal_t *tal_parent(const tal_t *ctx); * @extra: the number of extra sizeof(type) entries to allocate. */ #define tal_dup_arr(ctx, type, p, n, extra) \ + tal_dup_arr_label(ctx, type, p, n, extra, TAL_LABEL(type, "[]")) + + + +/* Lower-level interfaces, where you want to supply your own label string. */ +#define tal_label(ctx, type, label) \ + ((type *)tal_alloc_((ctx), sizeof(type), false, false, label)) +#define talz_label(ctx, type, label) \ + ((type *)tal_alloc_((ctx), sizeof(type), true, false, label)) +#define tal_arr_label(ctx, type, count, label) \ + ((type *)tal_alloc_arr_((ctx), sizeof(type), (count), false, true, label)) +#define tal_arrz_label(ctx, type, count, label) \ + ((type *)tal_alloc_arr_((ctx), sizeof(type), (count), true, true, label)) +#define tal_dup_label(ctx, type, p, label) \ + ((type *)tal_dup_((ctx), tal_typechk_(p, type *), \ + sizeof(type), 1, 0, \ + false, label)) +#define tal_dup_arr_label(ctx, type, p, n, extra, label) \ ((type *)tal_dup_((ctx), tal_typechk_(p, type *), \ sizeof(type), (n), (extra), \ - true, TAL_LABEL(type, "[]"))) - + true, label)) /** * tal_set_backend - set the allocation or error functions to use @@ -487,14 +501,14 @@ void *tal_alloc_(const tal_t *ctx, size_t bytes, bool clear, void *tal_alloc_arr_(const tal_t *ctx, size_t bytes, size_t count, bool clear, bool add_length, const char *label); -void *tal_dup_(const tal_t *ctx, const void *p, size_t size, +void *tal_dup_(const tal_t *ctx, const void *p TAKES, size_t size, size_t n, size_t extra, bool add_length, const char *label); tal_t *tal_steal_(const tal_t *new_parent, const tal_t *t); bool tal_resize_(tal_t **ctxp, size_t size, size_t count, bool clear); -bool tal_expand_(tal_t **ctxp, const void *src, size_t size, size_t count); +bool tal_expand_(tal_t **ctxp, const void *src TAKES, size_t size, size_t count); bool tal_add_destructor_(const tal_t *ctx, void (*destroy)(void *me)); bool tal_add_destructor2_(const tal_t *ctx, void (*destroy)(void *me, void *arg),