From 15ae12aa2ee2ecb10ab309e7f524bd16bd7c66e4 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Mon, 28 Jul 2025 22:17:48 +0100 Subject: [PATCH] object: string: add b_string_duplicate() --- object/include/blue/object/string.h | 1 + object/string.c | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/object/include/blue/object/string.h b/object/include/blue/object/string.h index 836d305..c8853e2 100644 --- a/object/include/blue/object/string.h +++ b/object/include/blue/object/string.h @@ -24,6 +24,7 @@ typedef enum b_strlen_flags { BLUE_API b_string *b_string_create(void); BLUE_API b_string *b_string_create_from_cstr(const char *s); BLUE_API b_string *b_string_create_from_c(char c, size_t count); +BLUE_API b_string *b_string_duplicate(const b_string *str); static inline b_string *b_string_retain(b_string *str) { diff --git a/object/string.c b/object/string.c index a75c313..d948a29 100644 --- a/object/string.c +++ b/object/string.c @@ -170,6 +170,23 @@ struct b_string *b_string_create_from_c(char c, size_t count) return str; } +struct b_string *b_string_duplicate(const struct b_string *str) +{ + struct b_string *new_str = b_string_create(); + if (!str) { + return NULL; + } + + string_change_capacity(new_str, str->s_len); + const char *src = b_string_ptr(str); + char *dst = string_ptr(new_str); + + memcpy(dst, src, str->s_len); + new_str->s_len = str->s_len; + + return new_str; +} + char *b_string_steal(struct b_string *str) { char *dest = NULL;