Mercurial > dovecot > core-2.2
changeset 18468:90298bc1a481
lib: Added t_str_replace() to replace one character with another one
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 24 Apr 2015 13:07:39 +0300 |
parents | 3905d7fce3ba |
children | cf3c7bcbbdd9 |
files | src/lib/strfuncs.c src/lib/strfuncs.h src/lib/test-strfuncs.c |
diffstat | 3 files changed, 37 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/strfuncs.c Thu Apr 23 21:32:43 2015 +0300 +++ b/src/lib/strfuncs.c Fri Apr 24 13:07:39 2015 +0300 @@ -289,6 +289,26 @@ return str; } +const char *t_str_replace(const char *str, char from, char to) +{ + char *out; + unsigned int i, len; + + if (strchr(str, from) == NULL) + return str; + + len = strlen(str); + out = t_malloc(len + 1); + for (i = 0; i < len; i++) { + if (str[i] == from) + out[i] = to; + else + out[i] = str[i]; + } + out[i] = '\0'; + return out; +} + int i_strocpy(char *dest, const char *src, size_t dstsize) { if (dstsize == 0)
--- a/src/lib/strfuncs.h Thu Apr 23 21:32:43 2015 +0300 +++ b/src/lib/strfuncs.h Fri Apr 24 13:07:39 2015 +0300 @@ -41,6 +41,8 @@ /* Like t_strdup(), but stop at cutchar. */ const char *t_strcut(const char *str, char cutchar); +/* Replace all from->to chars in the string. */ +const char *t_str_replace(const char *str, char from, char to); /* Like strlcpy(), but return -1 if buffer was overflown, 0 if not. */ int i_strocpy(char *dest, const char *src, size_t dstsize);
--- a/src/lib/test-strfuncs.c Thu Apr 23 21:32:43 2015 +0300 +++ b/src/lib/test-strfuncs.c Fri Apr 24 13:07:39 2015 +0300 @@ -96,9 +96,24 @@ test_end(); } +static void test_t_str_replace(void) +{ + test_begin("t_str_replace"); + test_assert(strcmp(t_str_replace("foo", 'a', 'b'), "foo") == 0); + test_assert(strcmp(t_str_replace("fooa", 'a', 'b'), "foob") == 0); + test_assert(strcmp(t_str_replace("afooa", 'a', 'b'), "bfoob") == 0); + test_assert(strcmp(t_str_replace("", 'a', 'b'), "") == 0); + test_assert(strcmp(t_str_replace("a", 'a', 'b'), "b") == 0); + test_assert(strcmp(t_str_replace("aaa", 'a', 'b'), "bbb") == 0); + test_assert(strcmp(t_str_replace("bbb", 'a', 'b'), "bbb") == 0); + test_assert(strcmp(t_str_replace("aba", 'a', 'b'), "bbb") == 0); + test_end(); +} + void test_strfuncs(void) { test_p_strarray_dup(); test_t_strsplit(); test_t_strsplit_tab(); + test_t_str_replace(); }