From 00148467ef9ca5dbc6f44212e736796ccdeef939 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Barnab=C3=A1s=20P=C5=91cze?= Date: Thu, 12 Mar 2026 00:17:18 +0100 Subject: [PATCH] spa: utils: string: add `spa_strbuf_appendv()` Add a function that makes it possible to pass a `va_list` when printing into a `spa_strbuf`. --- spa/include/spa/utils/string.h | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/spa/include/spa/utils/string.h b/spa/include/spa/utils/string.h index bab60de2b..35e4ea026 100644 --- a/spa/include/spa/utils/string.h +++ b/spa/include/spa/utils/string.h @@ -380,17 +380,26 @@ SPA_API_STRING void spa_strbuf_init(struct spa_strbuf *buf, char *buffer, size_t buf->buffer[0] = '\0'; } +SPA_PRINTF_FUNC(2, 0) +SPA_API_STRING int spa_strbuf_appendv(struct spa_strbuf *buf, const char *fmt, va_list args) +{ + size_t remain = buf->maxsize - buf->pos; + int written = vsnprintf(&buf->buffer[buf->pos], remain, fmt, args); + if (written > 0) + buf->pos += SPA_MIN(remain, (size_t)written); + return written; +} + SPA_PRINTF_FUNC(2, 3) SPA_API_STRING int spa_strbuf_append(struct spa_strbuf *buf, const char *fmt, ...) { - size_t remain = buf->maxsize - buf->pos; - ssize_t written; va_list args; + int written; + va_start(args, fmt); - written = vsnprintf(&buf->buffer[buf->pos], remain, fmt, args); + written = spa_strbuf_appendv(buf, fmt, args); va_end(args); - if (written > 0) - buf->pos += SPA_MIN(remain, (size_t)written); + return written; }