From 2a28f8d407d075d4ca6999c81fb4d7738e2e19e4 Mon Sep 17 00:00:00 2001 From: Patrick Pelissier Date: Wed, 25 Nov 2020 22:41:11 +0100 Subject: [PATCH] Add string_init_printf --- README.md | 11 ++++++++--- m-string.h | 28 ++++++++++++++-------------- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 5645bb5f..09f2542c 100644 --- a/README.md +++ b/README.md @@ -4952,16 +4952,16 @@ Swap the content of both strings. ##### void string\_push\_back (string\_t v, char c) -Append the string with the character 'c' +Append the character 'c' to the string 'v' ##### void string\_cat\_str(string\_t v, const char str[]) -Append the string 'v' with the array of char 'str'. +Append the array of char 'str' to the string 'v'. The array of char shall be terminated with 0. ##### void string\_cat(string\_t v, const string\_t v2) -Append the string 'v' with the string 'v2'. +Append the string 'v2' to the string 'v'. ##### int string\_cmp\_str(const string\_t v1, const char str[]) ##### int string\_cmp(const string\_t v1, const string\_t str) @@ -5083,6 +5083,11 @@ Replace in the string 'v' the sub-string defined as starting from 'pos' and of size 'len' by the string str2. It assumes that pos+len is before the end of the string of 'v'. +##### void string\_init\_printf(string\_t v, const char format[], ...) + +Initialize 'v' to the formatted string 'format'. +'format' is like the printf function family. + ##### int string\_printf (string\_t v, const char format[], ...) Set the string 'v' to the formatted string 'format'. diff --git a/m-string.h b/m-string.h index 09eeb5b2..21380562 100644 --- a/m-string.h +++ b/m-string.h @@ -142,7 +142,7 @@ string_capacity(const string_t s) /* Return a writable pointer to the array of char of the string */ static inline char* -stringi_get_str(string_t v) +stringi_get_cstr(string_t v) { // Function can be called when contract is not fullfilled char *const ptr_stack = &v->u.stack.buffer[0]; @@ -223,7 +223,7 @@ string_clean(string_t v) { STRINGI_CONTRACT (v); stringi_set_size(v, 0); - stringi_get_str(v)[0] = 0; + stringi_get_cstr(v)[0] = 0; STRINGI_CONTRACT (v); } @@ -282,7 +282,7 @@ stringi_fit2size (string_t v, size_t size_alloc) v->u.heap.alloc = alloc; return ptr; } - return stringi_get_str(v); + return stringi_get_cstr(v); } /* Modify the string capacity to be able to handle at least 'alloc' @@ -677,7 +677,7 @@ string_left(string_t v, size_t index) const size_t size = string_size(v); if (index >= size) return; - stringi_get_str(v)[index] = 0; + stringi_get_cstr(v)[index] = 0; stringi_set_size(v,index); STRINGI_CONTRACT (v); } @@ -687,7 +687,7 @@ static inline void string_right(string_t v, size_t index) { STRINGI_CONTRACT (v); - char *ptr = stringi_get_str(v); + char *ptr = stringi_get_cstr(v); const size_t size = string_size(v); if (index >= size) { ptr[0] = 0; @@ -768,7 +768,7 @@ string_replace_at (string_t v, size_t pos, size_t len, const char str2[]) memmove(&ptr[pos+str2_l], &ptr[pos+str1_l], size - pos - str1_l + 1); stringi_set_size(v, size + str2_l - str1_l); } else { - ptr = stringi_get_str(v); + ptr = stringi_get_cstr(v); } memcpy (&ptr[pos], str2, str2_l); STRINGI_CONTRACT (v); @@ -783,7 +783,7 @@ stringi_replace_all_str_1ge2 (string_t v, const char str1[], size_t str1len, con /* str1len < str2len so the string doesn't need to be resized */ size_t vlen = string_size(v); - char *org = stringi_get_str(v); + char *org = stringi_get_cstr(v); char *src = org; char *dst = org; @@ -916,7 +916,7 @@ string_printf (string_t v, const char format[], ...) M_ASSERT (format != NULL); va_list args; int size; - char *ptr = stringi_get_str(v); + char *ptr = stringi_get_cstr(v); size_t alloc = string_capacity(v); va_start (args, format); size = vsnprintf (ptr, alloc, format, args); @@ -951,7 +951,7 @@ string_cat_printf (string_t v, const char format[], ...) va_list args; int size; size_t old_size = string_size(v); - char *ptr = stringi_get_str(v); + char *ptr = stringi_get_cstr(v); size_t alloc = string_capacity(v); va_start (args, format); size = vsnprintf (&ptr[old_size], alloc - old_size, format, args); @@ -1041,7 +1041,7 @@ string_fget_word (string_t v, const char separator[], FILE *f) ungetc(d, f); size_t alloc = string_capacity(v); - char *ptr = stringi_get_str(v); + char *ptr = stringi_get_cstr(v); ptr[0] = 0; /* NOTE: We generate a buffer which we give to scanf to parse the string, @@ -1161,7 +1161,7 @@ static inline void string_strim(string_t v, const char charac[]) { STRINGI_CONTRACT (v); - char *ptr = stringi_get_str(v); + char *ptr = stringi_get_cstr(v); char *b = ptr; size_t size = string_size(v); while (size > 0 && stringi_strim_char(b[size-1], charac)) @@ -1745,7 +1745,7 @@ namespace m_string { #endif /* Initialize and set a string to the given formatted value. */ -#define STRINGI_INIT_PRINTF(v, ...) \ +#define string_init_printf(v, ...) \ (string_init (v), string_printf (v, __VA_ARGS__) ) /* Initialize a string with the given list of arguments. @@ -1756,10 +1756,10 @@ namespace m_string { C string and string. */ #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) #define STRINGI_INIT_WITH(v, ...) \ - M_IF_NARGS_EQ1(__VA_ARGS__)(string_init_set, STRINGI_INIT_PRINTF)(v, __VA_ARGS__) + M_IF_NARGS_EQ1(__VA_ARGS__)(string_init_set, string_init_printf)(v, __VA_ARGS__) #else #define STRINGI_INIT_WITH(v, ...) \ - M_IF_NARGS_EQ1(__VA_ARGS__)(string_init_set_str, STRINGI_INIT_PRINTF)(v, __VA_ARGS__) + M_IF_NARGS_EQ1(__VA_ARGS__)(string_init_set_str, string_init_printf)(v, __VA_ARGS__) #endif /* NOTE: Use GCC extension (OBSOLETE) */