From 1a7f7767b1e680e68cfdd085b95acf9a46a348e6 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Sun, 21 Feb 2016 18:32:03 +0200 Subject: [PATCH] lib: Move code from t_strarray_join() into a more generic p_strarray_join_n() --- src/lib/strfuncs.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/lib/strfuncs.c b/src/lib/strfuncs.c index b48b7f3036..de83565474 100644 --- a/src/lib/strfuncs.c +++ b/src/lib/strfuncs.c @@ -611,17 +611,21 @@ unsigned int str_array_length(const char *const *arr) return count; } -const char *t_strarray_join(const char *const *arr, const char *separator) +static char * +p_strarray_join_n(pool_t pool, const char *const *arr, unsigned int arr_len, + const char *separator) { size_t alloc_len, sep_len, len, pos, needed_space; + unsigned int i; char *str; sep_len = strlen(separator); alloc_len = 64; - str = t_buffer_get(alloc_len); + str = t_buffer_get(alloc_len); + pos = 0; - for (pos = 0; *arr != NULL; arr++) { - len = strlen(*arr); + for (i = 0; i < arr_len; i++) { + len = strlen(arr[i]); needed_space = pos + len + sep_len + 1; if (needed_space > alloc_len) { alloc_len = nearest_power(needed_space); @@ -633,14 +637,22 @@ const char *t_strarray_join(const char *const *arr, const char *separator) pos += sep_len; } - memcpy(str + pos, *arr, len); + memcpy(str + pos, arr[i], len); pos += len; } str[pos] = '\0'; + if (!pool->datastack_pool) + return p_memdup(pool, str, pos + 1); t_buffer_alloc(pos + 1); return str; } +const char *t_strarray_join(const char *const *arr, const char *separator) +{ + return p_strarray_join_n(unsafe_data_stack_pool, arr, + str_array_length(arr), separator); +} + bool str_array_remove(const char **arr, const char *value) { const char **dest;