From 866e1e0b7a8bf4863a1e518bb07e674f3e2060aa Mon Sep 17 00:00:00 2001 From: Patrick Pelissier Date: Mon, 14 Aug 2017 23:30:20 +0200 Subject: [PATCH] Add new function string_set_n to extract a sub-string from a string. --- m-string.h | 17 +++++++++++++++++ tests/test-mstring.c | 5 +++++ 2 files changed, 22 insertions(+) diff --git a/m-string.h b/m-string.h index 38bb23f5..ad99f25a 100644 --- a/m-string.h +++ b/m-string.h @@ -242,6 +242,23 @@ string_set (string_t v1, const string_t v2) STRING_CONTRACT (v1); } +static inline void +string_set_n(string_t v, const string_t ref, size_t offset, size_t length) +{ + STRING_CONTRACT (v); + STRING_CONTRACT (ref); + assert (v != ref); // Not supported yet + if (M_UNLIKELY (ref->size == 0)) { + v->size = 0; + if (v->ptr) { + v->ptr[0] = 0; + } + } else { + assert (ref->ptr != NULL); + string_set_strn(v, ref->ptr + offset, length); + } +} + static inline void string_init_set(string_t v1, const string_t v2) { diff --git a/tests/test-mstring.c b/tests/test-mstring.c index aa3d9844..689e28df 100644 --- a/tests/test-mstring.c +++ b/tests/test-mstring.c @@ -50,6 +50,11 @@ int main(void) assert (strcmp(string_get_cstr(s1), "Hello") == 0); string_clean(s1); + string_set_str (s1, "Hello"); + string_set_str (s2, "Hello, world!"); + string_set_n (s1, s2, 7, 5); + assert (strcmp(string_get_cstr(s1), "world") == 0); + string_set_str (s1, "Hello beautiful world!"); assert (string_size(s1) == 22); assert (strcmp(string_get_cstr(s1), "Hello beautiful world!") == 0);