From: Lucas De Marchi Date: Tue, 12 Nov 2024 19:45:33 +0000 (-0600) Subject: strbuf: Add strbuf_pushmem() X-Git-Tag: v34~87 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=68c0b9fb8c691a6d4b96aa2dcfe6627add6dc40b;p=thirdparty%2Fkmod.git strbuf: Add strbuf_pushmem() Wrapper for memcpy(). It's similar to strbuf_pushchars(), but push any char, including the NUL byte, relying on the size passed as argument. Signed-off-by: Lucas De Marchi Reviewed-by: Emil Velikov Link: https://github.com/kmod-project/kmod/pull/239 --- diff --git a/shared/strbuf.c b/shared/strbuf.c index 69d20db6..6a4c8d93 100644 --- a/shared/strbuf.c +++ b/shared/strbuf.c @@ -95,22 +95,18 @@ bool strbuf_pushchar(struct strbuf *buf, char ch) return true; } -size_t strbuf_pushchars(struct strbuf *buf, const char *str) +size_t strbuf_pushmem(struct strbuf *buf, const char *src, size_t sz) { - size_t len; - - assert(str != NULL); + assert(src != NULL); assert(buf != NULL); - len = strlen(str); - - if (!strbuf_reserve_extra(buf, len)) + if (!strbuf_reserve_extra(buf, sz)) return 0; - memcpy(buf->bytes + buf->used, str, len); - buf->used += len; + memcpy(buf->bytes + buf->used, src, sz); + buf->used += sz; - return len; + return sz; } void strbuf_popchar(struct strbuf *buf) diff --git a/shared/strbuf.h b/shared/strbuf.h index d916d0af..538f199e 100644 --- a/shared/strbuf.h +++ b/shared/strbuf.h @@ -2,6 +2,7 @@ #include #include +#include #include #include "macro.h" @@ -67,8 +68,13 @@ const char *strbuf_str(struct strbuf *buf); * don't cause re-allocations */ bool strbuf_reserve_extra(struct strbuf *buf, size_t n); + bool strbuf_pushchar(struct strbuf *buf, char ch); -size_t strbuf_pushchars(struct strbuf *buf, const char *str); +size_t strbuf_pushmem(struct strbuf *buf, const char *src, size_t sz); +static inline size_t strbuf_pushchars(struct strbuf *buf, const char *str) +{ + return strbuf_pushmem(buf, str, strlen(str)); +} /* * Remove the last char from buf. diff --git a/testsuite/test-strbuf.c b/testsuite/test-strbuf.c index 45c9eec7..a9da0ec4 100644 --- a/testsuite/test-strbuf.c +++ b/testsuite/test-strbuf.c @@ -185,4 +185,22 @@ static int test_strbuf_reserve_extra(const struct test *t) } DEFINE_TEST(test_strbuf_reserve_extra, .description = "test strbuf_reserve_extra"); +static int test_strbuf_pushmem(const struct test *t) +{ + _cleanup_strbuf_ struct strbuf buf; + size_t size; + + strbuf_init(&buf); + strbuf_reserve_extra(&buf, strlen(TEXT) + 1); + size = buf.size; + strbuf_pushmem(&buf, TEXT, strlen(TEXT) + 1); + + assert_return(size == buf.size, EXIT_FAILURE); + assert_return(streq(TEXT, strbuf_str(&buf)), EXIT_FAILURE); + assert_return(size == buf.size, EXIT_FAILURE); + + return 0; +} +DEFINE_TEST(test_strbuf_pushmem, .description = "test strbuf_reserve"); + TESTSUITE_MAIN();