mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-06 10:18:03 +02:00
glib-aux: add nm_str_buf_append_printfv()
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1321 (cherry picked from commitd5b31a05e6) (cherry picked from commit6c2c3fdfcc)
This commit is contained in:
parent
dfbdf3d477
commit
bfcc6a7537
2 changed files with 29 additions and 9 deletions
|
|
@ -5828,9 +5828,9 @@ _nm_str_buf_ensure_size(NMStrBuf *strbuf, gsize new_size, gboolean reserve_exact
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
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;
|
gsize available;
|
||||||
int l;
|
int l;
|
||||||
|
|
||||||
|
|
@ -5840,12 +5840,12 @@ nm_str_buf_append_printf(NMStrBuf *strbuf, const char *format, ...)
|
||||||
|
|
||||||
nm_assert(available < G_MAXULONG);
|
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,
|
l = g_vsnprintf(strbuf->_priv_allocated > 0 ? &strbuf->_priv_str[strbuf->_priv_len] : NULL,
|
||||||
available,
|
available,
|
||||||
format,
|
format,
|
||||||
args);
|
args_copy);
|
||||||
va_end(args);
|
va_end(args_copy);
|
||||||
|
|
||||||
nm_assert(l >= 0);
|
nm_assert(l >= 0);
|
||||||
nm_assert(l < G_MAXINT);
|
nm_assert(l < G_MAXINT);
|
||||||
|
|
@ -5860,9 +5860,9 @@ nm_str_buf_append_printf(NMStrBuf *strbuf, const char *format, ...)
|
||||||
|
|
||||||
nm_str_buf_maybe_expand(strbuf, l2, FALSE);
|
nm_str_buf_maybe_expand(strbuf, l2, FALSE);
|
||||||
|
|
||||||
va_start(args, format);
|
va_copy(args_copy, args);
|
||||||
l = g_vsnprintf(&strbuf->_priv_str[strbuf->_priv_len], l2, format, args);
|
l = g_vsnprintf(&strbuf->_priv_str[strbuf->_priv_len], l2, format, args_copy);
|
||||||
va_end(args);
|
va_end(args_copy);
|
||||||
|
|
||||||
nm_assert(l >= 0);
|
nm_assert(l >= 0);
|
||||||
nm_assert((gsize) l == l2 - 1u);
|
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));
|
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
|
static inline void
|
||||||
nm_str_buf_ensure_trailing_c(NMStrBuf *strbuf, char ch)
|
nm_str_buf_ensure_trailing_c(NMStrBuf *strbuf, char ch)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue