object: string: add b_string_duplicate()

This commit is contained in:
2025-07-28 22:17:48 +01:00
parent 04f99a84d5
commit 15ae12aa2e
2 changed files with 18 additions and 0 deletions

View File

@@ -24,6 +24,7 @@ typedef enum b_strlen_flags {
BLUE_API b_string *b_string_create(void); 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_cstr(const char *s);
BLUE_API b_string *b_string_create_from_c(char c, size_t count); 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) static inline b_string *b_string_retain(b_string *str)
{ {

View File

@@ -170,6 +170,23 @@ struct b_string *b_string_create_from_c(char c, size_t count)
return str; 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 *b_string_steal(struct b_string *str)
{ {
char *dest = NULL; char *dest = NULL;