From 040863cf72fd843cf90bcddbe116dbfb8e423b78 Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Thu, 12 Nov 2020 19:07:30 +0100 Subject: [PATCH] lib: buffer - Add buffer_clone/t_buffer_clone() --- src/lib/buffer.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/lib/buffer.h b/src/lib/buffer.h index 6a016ebad6..c5eef4bf5f 100644 --- a/src/lib/buffer.h +++ b/src/lib/buffer.h @@ -96,6 +96,26 @@ void buffer_copy(buffer_t *dest, size_t dest_pos, void buffer_append_buf(buffer_t *dest, const buffer_t *src, size_t src_pos, size_t copy_size); +/* Clone source buffer onto specified pool. Allocate extra_space extra space. */ +static inline buffer_t * +buffer_clone(pool_t pool, const buffer_t *src, size_t extra_space) +{ + buffer_t *buf = buffer_create_dynamic(pool, src->used + extra_space); + + buffer_append_buf(buf, src, 0, SIZE_MAX); + return buf; +} +/* Clone source buffer onto datastack. Allocate extra_space extra space. */ +static inline buffer_t * +t_buffer_clone(const buffer_t *src, size_t extra_space) +{ + buffer_t *buf = buffer_create_dynamic(pool_datastack_create(), + src->used + extra_space); + + buffer_append_buf(buf, src, 0, SIZE_MAX); + return buf; +} + /* Returns pointer to specified position in buffer. WARNING: The returned address may become invalid if you add more data to buffer. */ void *buffer_get_space_unsafe(buffer_t *buf, size_t pos, size_t size); -- 2.47.3