From 94ce36f81616cef027ce7ddda331bb78ea2bd128 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 6 May 2021 12:56:32 +0200 Subject: [PATCH] strbuf: make nm_str_buf_append_c() a variadic macro We already have nm_str_buf_append_c2() and nm_str_buf_append_c4() to support 2 or 4 characters. I'd like to also have one for 3 characters. At this point, just make it a variadic macro. This now supports 1 up to 4 characters, and it will be easy to extend further. --- src/libnm-glib-aux/nm-str-buf.h | 47 ++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/src/libnm-glib-aux/nm-str-buf.h b/src/libnm-glib-aux/nm-str-buf.h index cb0d3fb189..8f226dac57 100644 --- a/src/libnm-glib-aux/nm-str-buf.h +++ b/src/libnm-glib-aux/nm-str-buf.h @@ -167,29 +167,40 @@ nm_str_buf_append_c_repeated(NMStrBuf *strbuf, char ch, guint len) } static inline void -nm_str_buf_append_c(NMStrBuf *strbuf, char ch) +_nm_str_buf_append_c_1(NMStrBuf *strbuf, char ch) { - nm_str_buf_maybe_expand(strbuf, 2, FALSE); strbuf->_priv_str[strbuf->_priv_len++] = ch; } -static inline void -nm_str_buf_append_c2(NMStrBuf *strbuf, char ch0, char ch1) -{ - nm_str_buf_maybe_expand(strbuf, 3, FALSE); - strbuf->_priv_str[strbuf->_priv_len++] = ch0; - strbuf->_priv_str[strbuf->_priv_len++] = ch1; -} +#define _nm_str_buf_append_c_2(strbuf, ch0, ch1) \ + _nm_str_buf_append_c_1(strbuf, (ch0)); \ + _nm_str_buf_append_c_1(strbuf, (ch1)) +#define _nm_str_buf_append_c_3(strbuf, ch0, ...) \ + _nm_str_buf_append_c_1(strbuf, (ch0)); \ + _nm_str_buf_append_c_2(strbuf, __VA_ARGS__) +#define _nm_str_buf_append_c_4(strbuf, ch0, ...) \ + _nm_str_buf_append_c_1(strbuf, (ch0)); \ + _nm_str_buf_append_c_3(strbuf, __VA_ARGS__) -static inline void -nm_str_buf_append_c4(NMStrBuf *strbuf, char ch0, char ch1, char ch2, char ch3) -{ - nm_str_buf_maybe_expand(strbuf, 5, FALSE); - strbuf->_priv_str[strbuf->_priv_len++] = ch0; - strbuf->_priv_str[strbuf->_priv_len++] = ch1; - strbuf->_priv_str[strbuf->_priv_len++] = ch2; - strbuf->_priv_str[strbuf->_priv_len++] = ch3; -} +#define _nm_str_buf_append_c_n2(strbuf, n, ...) \ + G_STMT_START \ + { \ + NMStrBuf *_strbuf = strbuf; \ + \ + nm_str_buf_maybe_expand(_strbuf, (n) + 1, FALSE); \ + { \ + _nm_str_buf_append_c_##n(_strbuf, __VA_ARGS__); \ + }; \ + } \ + G_STMT_END + +#define _nm_str_buf_append_c_n1(strbuf, n, ...) _nm_str_buf_append_c_n2(strbuf, n, __VA_ARGS__) + +#define nm_str_buf_append_c(strbuf, ...) \ + _nm_str_buf_append_c_n1((strbuf), NM_NARG(__VA_ARGS__), __VA_ARGS__) + +#define nm_str_buf_append_c2(strbuf, ...) nm_str_buf_append_c(strbuf, __VA_ARGS__) +#define nm_str_buf_append_c4(strbuf, ...) nm_str_buf_append_c(strbuf, __VA_ARGS__) static inline void nm_str_buf_append_c_hex(NMStrBuf *strbuf, char ch, gboolean upper_case)