Mercurial > dovecot > original-hg > dovecot-1.2
changeset 3385:fe4a297379fc HEAD
If p_malloc() used data stack (with DEBUG enabled it might have written a
warning about growing memory pool), p_strconcat() gave corrupted reply. It
also didn't work correctly if the given pool was a data stack.
Also made i_strconcat() to be sure it doesn't break if default_pool's
p_malloc() for some reason would some day use data stack.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 17 May 2005 00:00:45 +0300 |
parents | 3b75956d20c4 |
children | e4b84d82c685 |
files | src/lib/imem.c src/lib/strfuncs.c src/lib/strfuncs.h |
diffstat | 3 files changed, 19 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/imem.c Sat May 14 23:32:03 2005 +0300 +++ b/src/lib/imem.c Tue May 17 00:00:45 2005 +0300 @@ -59,13 +59,16 @@ va_start(args, str1); + t_push(); temp = _vstrconcat(str1, args, &len); if (temp == NULL) ret = NULL; else { + t_buffer_alloc(len); ret = p_malloc(default_pool, len); memcpy(ret, temp, len); } + t_pop(); va_end(args); return ret;
--- a/src/lib/strfuncs.c Sat May 14 23:32:03 2005 +0300 +++ b/src/lib/strfuncs.c Tue May 17 00:00:45 2005 +0300 @@ -215,7 +215,7 @@ return ret; } -const char *_vstrconcat(const char *str1, va_list args, size_t *ret_len) +char *_vstrconcat(const char *str1, va_list args, size_t *ret_len) { const char *str; char *temp; @@ -254,20 +254,30 @@ char *p_strconcat(pool_t pool, const char *str1, ...) { va_list args; - const char *temp; - char *ret; + char *temp, *ret; size_t len; va_start(args, str1); + if (!pool->datastack_pool) + t_push(); + temp = _vstrconcat(str1, args, &len); if (temp == NULL) ret = NULL; else { - ret = p_malloc(pool, len); - memcpy(ret, temp, len); + t_buffer_alloc(len); + if (pool->datastack_pool) + ret = temp; + else { + ret = p_malloc(pool, len); + memcpy(ret, temp, len); + } } + if (!pool->datastack_pool) + t_pop(); + va_end(args); return ret; }
--- a/src/lib/strfuncs.h Sat May 14 23:32:03 2005 +0300 +++ b/src/lib/strfuncs.h Tue May 17 00:00:45 2005 +0300 @@ -71,6 +71,6 @@ const char *t_strarray_join(const char *const *arr, const char *separator); /* INTERNAL */ -const char *_vstrconcat(const char *str1, va_list args, size_t *ret_len); +char *_vstrconcat(const char *str1, va_list args, size_t *ret_len); #endif