char *p_strconcat(pool_t pool, const char *str1, ...) { va_list args; char *temp, *ret; size_t len; i_assert(str1 != NULL); va_start(args, str1); if (pool->datastack_pool) { ret = vstrconcat(str1, args, &len); t_buffer_alloc(len); } else { T_BEGIN { temp = vstrconcat(str1, args, &len); t_buffer_alloc(len); ret = p_malloc(pool, len); memcpy(ret, temp, len); } T_END; } va_end(args); return ret; }
const char *t_strconcat(const char *str1, ...) { va_list args; const char *ret; size_t len; va_start(args, str1); ret = vstrconcat(str1, args, &len); if (ret != NULL) t_buffer_alloc(len); va_end(args); return ret; }
char *i_strconcat(const char *str1, ...) { va_list args; char *ret; size_t len; va_start(args, str1); T_BEGIN { const char *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_END; va_end(args); return ret; }