#include "lib.h"
#include "printf-format-fix.h"
#include "strfuncs.h"
+#include "array.h"
#include <stdio.h>
#include <limits.h>
i_assert(pos >= 0);
return buffer + pos;
}
+
+char *p_array_const_string_join(pool_t pool, const ARRAY_TYPE(const_string) *arr,
+ const char *separator)
+{
+ if (array_count(arr) == 0)
+ return "";
+ return p_strarray_join_n(pool, array_idx(arr, 0), array_count(arr), separator);
+}
const char **p_strarray_dup(pool_t pool, const char *const *arr)
ATTR_MALLOC ATTR_RETURNS_NONNULL;
+/* Join ARRAY_TYPE(const_string) to a string, similar to t_strarray_join() */
+char *p_array_const_string_join(pool_t pool, const ARRAY_TYPE(const_string) *arr,
+ const char *separator);
+#define t_array_const_string_join(arr, separator) \
+ ((const char *)p_array_const_string_join(unsafe_data_stack_pool, arr, separator))
+
/* FIXME: v2.3 - sort and search APIs belong into their own header, not here */
#include "sort.h"
/* Copyright (c) 2009-2016 Dovecot authors, see the included COPYING file */
#include "test-lib.h"
-
+#include "array.h"
static void test_p_strarray_dup(void)
{
test_end();
}
+static void test_p_array_const_string_join(void)
+{
+ ARRAY_TYPE(const_string) arr;
+ unsigned int i;
+ char *res;
+
+ test_begin("p_array_const_string_join()");
+
+ i_array_init(&arr, 2);
+ /* empty array -> empty string */
+ test_assert(strcmp(t_array_const_string_join(&arr, " "), "") == 0);
+
+ array_append(&arr, test_strarray_input,
+ str_array_length(test_strarray_input));
+ for (i = 0; i < N_ELEMENTS(test_strarray_outputs); i++) {
+ res = p_array_const_string_join(default_pool, &arr,
+ test_strarray_outputs[i].separator);
+ test_assert_idx(strcmp(res, test_strarray_outputs[i].output) == 0, i);
+ i_free(res);
+ }
+
+ array_free(&arr);
+ test_end();
+}
+
void test_strfuncs(void)
{
test_p_strarray_dup();
test_t_str_ltrim();
test_t_str_rtrim();
test_t_strarray_join();
+ test_p_array_const_string_join();
}