From e0aa57b845956e744ff82bc0d72829aeec259793 Mon Sep 17 00:00:00 2001 From: Patrick Pelissier Date: Tue, 11 Jul 2017 09:21:03 +0200 Subject: [PATCH] Replace string_shrink2fit by string_reserve (More generic). --- m-string.h | 16 ++++++++++++---- tests/test-mstring.c | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/m-string.h b/m-string.h index fc6a887b..2148151a 100644 --- a/m-string.h +++ b/m-string.h @@ -146,13 +146,21 @@ stringi_fit2size (string_t v, size_t size) } static inline void -string_shrink2fit(string_t v) +string_reserve(string_t v, size_t alloc) { STRING_CONTRACT (v); - char *ptr = M_MEMORY_REALLOC (char, v->ptr, v->size+1); - M_ASSUME (ptr != NULL); + /* NOTE: Reserve below needed size, perform a shrink to fit */ + if (v->size + 1 > alloc) { + alloc = v->size+1; + } + assert (alloc > 0); + char *ptr = M_MEMORY_REALLOC (char, v->ptr, alloc); + if (M_UNLIKELY (ptr == NULL) ) { + M_MEMORY_FULL(sizeof (char) * alloc); + return; + } v->ptr = ptr; // Can be != ptr if v->ptr was NULL before. - v->alloc = v->size+1; + v->alloc = alloc; STRING_CONTRACT (v); } diff --git a/tests/test-mstring.c b/tests/test-mstring.c index 76a774c5..bc6038c5 100644 --- a/tests/test-mstring.c +++ b/tests/test-mstring.c @@ -221,7 +221,7 @@ int main(void) string_clear (s2); string_init_move(s2, s1); assert (string_equal_str_p(s2, "RESTART")); - string_shrink2fit(s2); + string_reserve(s2, 0); assert (string_equal_str_p(s2, "RESTART")); string_init(s1); string_move(s1, s2);