*/
const char *strbuf_str(struct strbuf *buf);
-/*
- * Reserve enough space for @n bytes, ensuring additional pushes up to @n bytes
- * 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_pushmem(struct strbuf *buf, const char *src, size_t sz);
static inline size_t strbuf_pushchars(struct strbuf *buf, const char *str)
}
DEFINE_TEST(test_strbuf_with_heap, .description = "test strbuf with heap only");
-static int test_strbuf_reserve_extra(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;
- assert_return(size >= strlen(TEXT) + 1, EXIT_FAILURE);
-
- strbuf_pushchars(&buf, TEXT);
- strbuf_pushchar(&buf, '\0');
- assert_return(size == buf.size, EXIT_FAILURE);
-
- strbuf_clear(&buf);
- strbuf_pushchars(&buf, TEXT);
- assert_return(size == buf.size, EXIT_FAILURE);
-
- return 0;
-}
-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_pushmem(&buf, "", 0);
- 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;
}
strbuf_pushchars(&buf, TEXT);
assert_return(strbuf_used(&buf) == strlen(TEXT), EXIT_FAILURE);
- strbuf_reserve_extra(&buf, 1);
+ strbuf_pushchar(&buf, 'a');
+ strbuf_popchar(&buf);
assert_return(strbuf_used(&buf) == strlen(TEXT), EXIT_FAILURE);
assert_return(streq(TEXT, strbuf_str(&buf)), EXIT_FAILURE);