Skip to content

Commit

Permalink
lib: Move code from t_strarray_join() into a more generic p_strarray_…
Browse files Browse the repository at this point in the history
…join_n()
  • Loading branch information
sirainen committed Feb 21, 2016
1 parent 1f35f54 commit 1a7f776
Showing 1 changed file with 17 additions and 5 deletions.
22 changes: 17 additions & 5 deletions src/lib/strfuncs.c
Expand Up @@ -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);
Expand All @@ -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;
Expand Down

0 comments on commit 1a7f776

Please sign in to comment.