From: Timo Sirainen Date: Tue, 14 Feb 2017 08:54:29 +0000 (+0200) Subject: lib: Clarify *_strsplit_spaces() and add unit test X-Git-Tag: 2.3.0.rc1~2124 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=833fd67ffe6a1832d72b3d310e07345a42a7b6ab;p=thirdparty%2Fdovecot%2Fcore.git lib: Clarify *_strsplit_spaces() and add unit test --- diff --git a/src/lib/strfuncs.h b/src/lib/strfuncs.h index eecbcc67a7..d52829befe 100644 --- a/src/lib/strfuncs.h +++ b/src/lib/strfuncs.h @@ -82,7 +82,8 @@ char **p_strsplit(pool_t pool, const char *data, const char *separators) const char **t_strsplit(const char *data, const char *separators) ATTR_MALLOC ATTR_RETURNS_NONNULL; /* like p_strsplit(), but treats multiple adjacent separators as a single - separator. */ + separator. separators at the beginning or at the end of the string are also + ignored, so it's not possible for the result to have any empty strings. */ char **p_strsplit_spaces(pool_t pool, const char *data, const char *separators) ATTR_MALLOC ATTR_RETURNS_NONNULL; const char **t_strsplit_spaces(const char *data, const char *separators) diff --git a/src/lib/test-strfuncs.c b/src/lib/test-strfuncs.c index 45d53e6089..8171714975 100644 --- a/src/lib/test-strfuncs.c +++ b/src/lib/test-strfuncs.c @@ -45,6 +45,27 @@ static void test_t_strsplit(void) test_end(); } +static void test_t_strsplit_spaces(void) +{ + const char *const *args; + + test_begin("t_strsplit_spaces"); + /* empty strings */ + args = t_strsplit_spaces("", "\n"); + test_assert(args[0] == NULL); + args = t_strsplit_spaces("\n", "\n"); + test_assert(args[0] == NULL); + args = t_strsplit_spaces("\n\n", "\n"); + test_assert(args[0] == NULL); + + /* multiple separators */ + args = t_strsplit_spaces(" , , ,str1 , ,,, , str2 , ", " ,"); + test_assert(strcmp(args[0], "str1") == 0); + test_assert(strcmp(args[1], "str2") == 0); + test_assert(args[2] == NULL); + test_end(); +} + static void test_t_str_replace(void) { test_begin("t_str_replace"); @@ -212,6 +233,7 @@ void test_strfuncs(void) { test_p_strarray_dup(); test_t_strsplit(); + test_t_strsplit_spaces(); test_t_str_replace(); test_t_str_trim(); test_t_str_ltrim();