--- /dev/null
+_talloc: void *(const void *, size_t)
+_talloc_array: void *(const void *, size_t, unsigned int, const char *)
+_talloc_free: int (void *, const char *)
+_talloc_get_type_abort: void *(const void *, const char *, const char *)
+_talloc_memdup: void *(const void *, const void *, size_t, const char *)
+_talloc_move: void *(const void *, const void *)
+_talloc_pooled_object: void *(const void *, size_t, const char *, unsigned int, size_t)
+_talloc_realloc: void *(const void *, void *, size_t, const char *)
+_talloc_realloc_array: void *(const void *, void *, size_t, unsigned int, const char *)
+_talloc_realloc_array_zero: void *(const void *, void *, size_t, unsigned int, const char *)
+_talloc_reference_loc: void *(const void *, const void *, const char *)
+_talloc_set_destructor: void (const void *, int (*)(void *))
+_talloc_steal_loc: void *(const void *, const void *, const char *)
+_talloc_zero: void *(const void *, size_t, const char *)
+_talloc_zero_array: void *(const void *, size_t, unsigned int, const char *)
+talloc_asprintf: char *(const void *, const char *, ...)
+talloc_asprintf_addbuf: void (char **, const char *, ...)
+talloc_asprintf_addsep: void (char **, const char *, const char *, ...)
+talloc_asprintf_append: char *(char *, const char *, ...)
+talloc_asprintf_append_buffer: char *(char *, const char *, ...)
+talloc_autofree_context: void *(void)
+talloc_check_name: void *(const void *, const char *)
+talloc_disable_null_tracking: void (void)
+talloc_enable_leak_report: void (void)
+talloc_enable_leak_report_full: void (void)
+talloc_enable_null_tracking: void (void)
+talloc_enable_null_tracking_no_autofree: void (void)
+talloc_find_parent_byname: void *(const void *, const char *)
+talloc_free_children: void (void *)
+talloc_get_name: const char *(const void *)
+talloc_get_size: size_t (const void *)
+talloc_increase_ref_count: int (const void *)
+talloc_init: void *(const char *, ...)
+talloc_is_parent: int (const void *, const void *)
+talloc_named: void *(const void *, size_t, const char *, ...)
+talloc_named_const: void *(const void *, size_t, const char *)
+talloc_parent: void *(const void *)
+talloc_parent_name: const char *(const void *)
+talloc_pool: void *(const void *, size_t)
+talloc_realloc_fn: void *(const void *, void *, size_t)
+talloc_reference_count: size_t (const void *)
+talloc_reparent: void *(const void *, const void *, const void *)
+talloc_report: void (const void *, FILE *)
+talloc_report_depth_cb: void (const void *, int, int, void (*)(const void *, int, int, int, void *), void *)
+talloc_report_depth_file: void (const void *, int, int, FILE *)
+talloc_report_full: void (const void *, FILE *)
+talloc_set_abort_fn: void (void (*)(const char *))
+talloc_set_log_fn: void (void (*)(const char *))
+talloc_set_log_stderr: void (void)
+talloc_set_memlimit: int (const void *, size_t)
+talloc_set_name: const char *(const void *, const char *, ...)
+talloc_set_name_const: void (const void *, const char *)
+talloc_show_parents: void (const void *, FILE *)
+talloc_strdup: char *(const void *, const char *)
+talloc_strdup_append: char *(char *, const char *)
+talloc_strdup_append_buffer: char *(char *, const char *)
+talloc_strndup: char *(const void *, const char *, size_t)
+talloc_strndup_append: char *(char *, const char *, size_t)
+talloc_strndup_append_buffer: char *(char *, const char *, size_t)
+talloc_test_get_magic: int (void)
+talloc_total_blocks: size_t (const void *)
+talloc_total_size: size_t (const void *)
+talloc_unlink: int (const void *, void *)
+talloc_vasprintf: char *(const void *, const char *, va_list)
+talloc_vasprintf_append: char *(char *, const char *, va_list)
+talloc_vasprintf_append_buffer: char *(char *, const char *, va_list)
+talloc_version_major: int (void)
+talloc_version_minor: int (void)
return s;
}
-/*
- * Function to make string-building simple by handling intermediate
- * realloc failures. See for example commit a37ea9d750e1.
- */
-_PUBLIC_ void talloc_asprintf_addbuf(char **ps, const char *fmt, ...)
+static void talloc_vasprintf_addbuf(char **ps, const char *fmt, va_list ap)
{
- va_list ap;
char *s = *ps;
char *t = NULL;
return;
}
- va_start(ap, fmt);
t = talloc_vasprintf_append_buffer(s, fmt, ap);
- va_end(ap);
if (t == NULL) {
/* signal failure to the next caller */
}
}
+/*
+ * Function to make string-building simple by handling intermediate
+ * realloc failures. See for example commit a37ea9d750e1.
+ */
+_PUBLIC_ void talloc_asprintf_addbuf(char **ps, const char *fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ talloc_vasprintf_addbuf(ps, fmt, ap);
+ va_end(ap);
+}
+
+_PUBLIC_ void talloc_asprintf_addsep(char **ps,
+ const char *sep,
+ const char *fmt,
+ ...)
+{
+ va_list ap;
+ char *s = *ps;
+
+ if ((s != NULL) && (s[0] != '\0')) {
+ talloc_asprintf_addbuf(ps, "%s", sep);
+ }
+
+ va_start(ap, fmt);
+ talloc_vasprintf_addbuf(ps, fmt, ap);
+ va_end(ap);
+}
+
/*
alloc an array, checking for integer overflow in the array size
*/
*/
#define TALLOC_VERSION_MAJOR 2
-#define TALLOC_VERSION_MINOR 4
+#define TALLOC_VERSION_MINOR 5
_PUBLIC_ int talloc_version_major(void);
_PUBLIC_ int talloc_version_minor(void);
_PUBLIC_ void talloc_asprintf_addbuf(char **ps, const char *fmt, ...) \
PRINTF_ATTRIBUTE(2,3);
+/**
+ * @brief Build up a string buffer of multiple elements with a separator
+ *
+ * @param[in] ps Pointer to the talloc'ed string to be extended
+ * @param[in] fmt The format string
+ * @param[in] ... The parameters used to fill fmt.
+ *
+ * If you want to build up "a,b,c" from "a", "b" and "c" you have to
+ * take care of the "," with custom code. This function assumes that
+ * "*ps" is prepared with talloc_strdup(.., "") and adds "sep" before
+ * the asprintf if "*ps" is not an empty string.
+ *
+ * It inherits memory allocation behaviour from
+ * talloc_asprintf_addbuf().
+ */
+_PUBLIC_ void talloc_asprintf_addsep(char **ps,
+ const char *sep,
+ const char *fmt,
+ ...) PRINTF_ATTRIBUTE(3, 4);
+
/**
* @brief Format a string.
*