From: Volker Lendecke Date: Wed, 15 Jul 2026 09:58:55 +0000 (+0200) Subject: talloc: Add talloc_asprintf_addsep() X-Git-Tag: talloc-2.5.0^0 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d227642a01bbfef7fa883b61357960357afa0938;p=thirdparty%2Fsamba.git talloc: Add talloc_asprintf_addsep() See the comment in talloc.h for an explanation. Signed-off-by: Volker Lendecke Reviewed-by: Stefan Metzmacher --- diff --git a/lib/talloc/ABI/pytalloc-util-2.5.0.sigs b/lib/talloc/ABI/pytalloc-util-2.5.0.sigs new file mode 100644 index 00000000000..6056577960d --- /dev/null +++ b/lib/talloc/ABI/pytalloc-util-2.5.0.sigs @@ -0,0 +1,16 @@ +_pytalloc_check_type: int (PyObject *, const char *) +_pytalloc_get_mem_ctx: TALLOC_CTX *(PyObject *) +_pytalloc_get_name: const char *(PyObject *) +_pytalloc_get_ptr: void *(PyObject *) +_pytalloc_get_type: void *(PyObject *, const char *) +pytalloc_BaseObject_PyType_Ready: int (PyTypeObject *) +pytalloc_BaseObject_check: int (PyObject *) +pytalloc_BaseObject_size: size_t (void) +pytalloc_Check: int (PyObject *) +pytalloc_GenericObject_reference_ex: PyObject *(TALLOC_CTX *, void *) +pytalloc_GenericObject_steal_ex: PyObject *(TALLOC_CTX *, void *) +pytalloc_GetBaseObjectType: PyTypeObject *(void) +pytalloc_GetObjectType: PyTypeObject *(void) +pytalloc_reference_ex: PyObject *(PyTypeObject *, TALLOC_CTX *, void *) +pytalloc_steal: PyObject *(PyTypeObject *, void *) +pytalloc_steal_ex: PyObject *(PyTypeObject *, TALLOC_CTX *, void *) diff --git a/lib/talloc/ABI/talloc-2.5.0.sigs b/lib/talloc/ABI/talloc-2.5.0.sigs new file mode 100644 index 00000000000..6c6f5eebbe0 --- /dev/null +++ b/lib/talloc/ABI/talloc-2.5.0.sigs @@ -0,0 +1,68 @@ +_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) diff --git a/lib/talloc/talloc.c b/lib/talloc/talloc.c index 2f13a2c64a9..329c97ed1c8 100644 --- a/lib/talloc/talloc.c +++ b/lib/talloc/talloc.c @@ -2750,13 +2750,8 @@ _PUBLIC_ char *talloc_asprintf_append_buffer(char *s, const char *fmt, ...) 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; @@ -2764,9 +2759,7 @@ _PUBLIC_ void talloc_asprintf_addbuf(char **ps, const char *fmt, ...) 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 */ @@ -2777,6 +2770,35 @@ _PUBLIC_ void talloc_asprintf_addbuf(char **ps, const char *fmt, ...) } } +/* + * 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 */ diff --git a/lib/talloc/talloc.h b/lib/talloc/talloc.h index 62142d188f1..c7370c11b02 100644 --- a/lib/talloc/talloc.h +++ b/lib/talloc/talloc.h @@ -56,7 +56,7 @@ extern "C" { */ #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); @@ -1625,6 +1625,26 @@ _PUBLIC_ char *talloc_vasprintf_append_buffer(char *s, const char *fmt, va_list _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. * diff --git a/lib/talloc/wscript b/lib/talloc/wscript index d36d3587480..26ec73a601a 100644 --- a/lib/talloc/wscript +++ b/lib/talloc/wscript @@ -1,7 +1,7 @@ #!/usr/bin/env python APPNAME = 'talloc' -VERSION = '2.4.4' +VERSION = '2.5.0' import os import sys