libobs/util: Reduce allocations in dstr_vcatf

This commit is contained in:
Palana 2015-07-10 11:26:32 +02:00
parent 14b27a4cc7
commit 95e19cb7ba

View File

@ -526,11 +526,23 @@ void dstr_vprintf(struct dstr *dst, const char *format, va_list args)
void dstr_vcatf(struct dstr *dst, const char *format, va_list args)
{
struct dstr temp;
dstr_init(&temp);
dstr_vprintf(&temp, format, args);
dstr_cat_dstr(dst, &temp);
dstr_free(&temp);
va_list args_cp;
va_copy(args_cp, args);
int len = vsnprintf(NULL, 0, format, args_cp);
va_end(args_cp);
if (len < 0) len = 4095;
dstr_ensure_capacity(dst, dst->len + ((size_t)len) + 1);
len = vsnprintf(dst->array + dst->len, ((size_t)len) + 1, format, args);
if (!*dst->array) {
dstr_free(dst);
return;
}
dst->len += len < 0 ? strlen(dst->array + dst->len) : (size_t)len;
}
void dstr_safe_printf(struct dstr *dst, const char *format,