Just like the existing virBufferTrim, but only does one thing at a time. Signed-off-by: Ján Tomko <jtomko@xxxxxxxxxx> --- src/libvirt_private.syms | 1 + src/util/virbuffer.c | 19 +++++++++++++++++++ src/util/virbuffer.h | 1 + 3 files changed, 21 insertions(+) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index ebf830791e..7dfb2458eb 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1646,6 +1646,7 @@ virBufferStrcat; virBufferStrcatVArgs; virBufferTrim; virBufferTrimChars; +virBufferTrimLen; virBufferURIEncodeString; virBufferUse; virBufferVasprintf; diff --git a/src/util/virbuffer.c b/src/util/virbuffer.c index 914c386b18..b76d99b56f 100644 --- a/src/util/virbuffer.c +++ b/src/util/virbuffer.c @@ -700,6 +700,25 @@ virBufferTrimChars(virBufferPtr buf, const char *trim) g_string_truncate(buf->str, i + 1); } +/** + * virBufferTrimLen: + * @buf: the buffer to trim + * @len: the number of bytes to trim + * + * Trim the tail of a buffer. + */ +void +virBufferTrimLen(virBufferPtr buf, int len) +{ + if (!buf || !buf->str) + return; + + if (len > buf->str->len) + return; + + g_string_truncate(buf->str, buf->str->len - len); +} + /** * virBufferAddStr: * @buf: the buffer to append to diff --git a/src/util/virbuffer.h b/src/util/virbuffer.h index 183f78f279..7b068075b2 100644 --- a/src/util/virbuffer.h +++ b/src/util/virbuffer.h @@ -93,4 +93,5 @@ size_t virBufferGetEffectiveIndent(const virBuffer *buf); void virBufferTrim(virBufferPtr buf, const char *trim, int len); void virBufferTrimChars(virBufferPtr buf, const char *trim); +void virBufferTrimLen(virBufferPtr buf, int len); void virBufferAddStr(virBufferPtr buf, const char *str); -- 2.19.2