From 0590fc09abc1b787d04704c560abb51302cb8d4e Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Wed, 28 Nov 2018 17:56:49 +0100 Subject: [PATCH] add a str_adopt constructor for sbstring. --- src/util/strings.c | 12 +++++++++++- src/util/strings.h | 1 + src/util/strings.test.c | 4 ++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/util/strings.c b/src/util/strings.c index 2f766fc5d..0ee0bd79c 100644 --- a/src/util/strings.c +++ b/src/util/strings.c @@ -263,13 +263,23 @@ char *str_strdup(const char *s) { void sbs_init(struct sbstring *sbs, char *buffer, size_t size) { assert(sbs); - assert(size>0); + assert(size > 0); sbs->begin = buffer; sbs->size = size; sbs->end = buffer; buffer[0] = '\0'; } +void sbs_adopt(struct sbstring *sbs, char *buffer, size_t size) +{ + size_t len = strlen(buffer); + assert(sbs); + assert(size > len); + sbs->begin = buffer; + sbs->size = size; + sbs->end = buffer + len; +} + void sbs_strncat(struct sbstring *sbs, const char *str, size_t size) { size_t len; diff --git a/src/util/strings.h b/src/util/strings.h index 0b22f1b4a..1e98a0968 100644 --- a/src/util/strings.h +++ b/src/util/strings.h @@ -50,6 +50,7 @@ extern "C" { } sbstring; void sbs_init(struct sbstring *sbs, char *buffer, size_t size); + void sbs_adopt(struct sbstring *sbs, char *buffer, size_t size); void sbs_strcat(struct sbstring *sbs, const char *str); void sbs_strncat(struct sbstring *sbs, const char *str, size_t size); void sbs_strcpy(struct sbstring *sbs, const char *str); diff --git a/src/util/strings.test.c b/src/util/strings.test.c index 1c1ea8d72..5b8db0473 100644 --- a/src/util/strings.test.c +++ b/src/util/strings.test.c @@ -157,6 +157,10 @@ static void test_sbstring(CuTest * tc) CuAssertStrEquals(tc, "12345678901234", sbs.begin); sbs_strncat(&sbs, "567890", 6); CuAssertStrEquals(tc, "123456789012345", sbs.begin); + + sbs_adopt(&sbs, buffer + 2, sizeof(buffer) - 2); + CuAssertStrEquals(tc, "3456789012345", sbs.begin); + CuAssertIntEquals(tc, 13, sbs_length(&sbs)); } static void test_sbs_strcat(CuTest * tc)