]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
talloc: Add talloc_asprintf_addsep() talloc-2.5.0
authorVolker Lendecke <vl@samba.org>
Wed, 15 Jul 2026 09:58:55 +0000 (11:58 +0200)
committerVolker Lendecke <vl@samba.org>
Thu, 30 Jul 2026 13:11:31 +0000 (13:11 +0000)
See the comment in talloc.h for an explanation.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
lib/talloc/ABI/pytalloc-util-2.5.0.sigs [new file with mode: 0644]
lib/talloc/ABI/talloc-2.5.0.sigs [new file with mode: 0644]
lib/talloc/talloc.c
lib/talloc/talloc.h
lib/talloc/wscript

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 (file)
index 0000000..6056577
--- /dev/null
@@ -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 (file)
index 0000000..6c6f5ee
--- /dev/null
@@ -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)
index 2f13a2c64a9fe4f30195272d63fafc6941d842ed..329c97ed1c8125e01dece594ff83d326b7d9a4db 100644 (file)
@@ -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
 */
index 62142d188f1fbcef45b387249607f67e1304e7a2..c7370c11b0207874d1664976f9f15a0cad34507f 100644 (file)
@@ -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.
  *
index d36d3587480ed9d72d729475478b998d254faa2e..26ec73a601a17a252de1bb58ffd0ae3675adb3fa 100644 (file)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 APPNAME = 'talloc'
-VERSION = '2.4.4'
+VERSION = '2.5.0'
 
 import os
 import sys