mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-19 07:40:42 +01:00
glib-aux: add nm_str_buf_append_printfv()
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1321
This commit is contained in:
parent
fba856f204
commit
d5b31a05e6
2 changed files with 29 additions and 9 deletions
|
|
@ -5907,9 +5907,9 @@ _nm_str_buf_ensure_size(NMStrBuf *strbuf, gsize new_size, gboolean reserve_exact
|
|||
}
|
||||
|
||||
void
|
||||
nm_str_buf_append_printf(NMStrBuf *strbuf, const char *format, ...)
|
||||
nm_str_buf_append_printfv(NMStrBuf *strbuf, const char *format, va_list args)
|
||||
{
|
||||
va_list args;
|
||||
va_list args_copy;
|
||||
gsize available;
|
||||
int l;
|
||||
|
||||
|
|
@ -5919,12 +5919,12 @@ nm_str_buf_append_printf(NMStrBuf *strbuf, const char *format, ...)
|
|||
|
||||
nm_assert(available < G_MAXULONG);
|
||||
|
||||
va_start(args, format);
|
||||
va_copy(args_copy, args);
|
||||
l = g_vsnprintf(strbuf->_priv_allocated > 0 ? &strbuf->_priv_str[strbuf->_priv_len] : NULL,
|
||||
available,
|
||||
format,
|
||||
args);
|
||||
va_end(args);
|
||||
args_copy);
|
||||
va_end(args_copy);
|
||||
|
||||
nm_assert(l >= 0);
|
||||
nm_assert(l < G_MAXINT);
|
||||
|
|
@ -5939,9 +5939,9 @@ nm_str_buf_append_printf(NMStrBuf *strbuf, const char *format, ...)
|
|||
|
||||
nm_str_buf_maybe_expand(strbuf, l2, FALSE);
|
||||
|
||||
va_start(args, format);
|
||||
l = g_vsnprintf(&strbuf->_priv_str[strbuf->_priv_len], l2, format, args);
|
||||
va_end(args);
|
||||
va_copy(args_copy, args);
|
||||
l = g_vsnprintf(&strbuf->_priv_str[strbuf->_priv_len], l2, format, args_copy);
|
||||
va_end(args_copy);
|
||||
|
||||
nm_assert(l >= 0);
|
||||
nm_assert((gsize) l == l2 - 1u);
|
||||
|
|
|
|||
|
|
@ -291,7 +291,27 @@ nm_str_buf_append0(NMStrBuf *strbuf, const char *str)
|
|||
return nm_str_buf_append_len0(strbuf, str, strlen(str));
|
||||
}
|
||||
|
||||
void nm_str_buf_append_printf(NMStrBuf *strbuf, const char *format, ...) _nm_printf(2, 3);
|
||||
void nm_str_buf_append_printfv(NMStrBuf *strbuf, const char *format, va_list args) _nm_printf(2, 0);
|
||||
|
||||
/* Warning, this is not a function-like macro. That is, you must
|
||||
* evaluate it in a place where you would otherwise call va_start(). */
|
||||
#define nm_str_buf_append_printfv_eval(strbuf, format, va_start_last) \
|
||||
({ \
|
||||
NMStrBuf *const _strbuf = (strbuf); \
|
||||
va_list _ap; \
|
||||
\
|
||||
va_start(_ap, (va_start_last)); \
|
||||
nm_str_buf_append_printfv(_strbuf, (format), _ap); \
|
||||
va_end(_ap); \
|
||||
\
|
||||
_strbuf; \
|
||||
})
|
||||
|
||||
static inline void _nm_printf(2, 3)
|
||||
nm_str_buf_append_printf(NMStrBuf *strbuf, const char *format, ...)
|
||||
{
|
||||
nm_str_buf_append_printfv_eval(strbuf, format, format);
|
||||
}
|
||||
|
||||
static inline void
|
||||
nm_str_buf_ensure_trailing_c(NMStrBuf *strbuf, char ch)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue