talloc: talloc_array_length()
[ccan] / ccan / talloc / talloc.h
index 58b406e54b8002b47fce9305725b07491868174e..59c132edc3a90021745f3be92a7807593cb38e65 100644 (file)
@@ -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)
 
@@ -580,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 
@@ -610,7 +610,7 @@ char *WARN_UNUSED_RESULT talloc_append_string(char *orig, const char *append);
  *   talloc_set_name_const(ptr, ptr)
  */
 char *WARN_UNUSED_RESULT talloc_asprintf_append(char *s, const char *fmt, ...)
-       PRINTF_ATTRIBUTE(2,3);
+       PRINTF_FMT(2,3);
 
 /**
  * talloc_vasprintf - vsprintf into a talloc buffer.
@@ -626,7 +626,8 @@ char *WARN_UNUSED_RESULT talloc_asprintf_append(char *s, const char *fmt, ...)
  *
  *   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.
@@ -638,7 +639,7 @@ char *talloc_vasprintf(const void *t, const char *fmt, va_list ap) PRINTF_ATTRIB
  * talloc_asprintf_append(), except it takes a va_list.
  */
 char *WARN_UNUSED_RESULT talloc_vasprintf_append(char *s, const char *fmt, va_list ap)
-       PRINTF_ATTRIBUTE(2,0);
+       PRINTF_FMT(2,0);
 
 /**
  * talloc_set_type - force the name of a pointer to a particular type
@@ -714,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
@@ -745,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
@@ -788,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
@@ -934,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);
 
@@ -955,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