Newer
Older
if (__builtin_expect(needed > mgr->space, 0)) {
size_t new_size = mgr->size * 2;
new_size *= 2;
if (add_string_pool(mgr, new_size))
return NULL;
}
result = mgr->pool->base + mgr->used;
mgr->used += needed;
mgr->space -= needed;
return result;
}
Kevin P. Fleming
committed
void __ast_string_field_index_build(struct ast_string_field_mgr *mgr,
Kevin P. Fleming
committed
ast_string_field *fields, int num_fields,
int index, const char *format, ...)
{
size_t needed;
va_list ap1, ap2;
va_start(ap1, format);
va_copy(ap2, ap1);
needed = vsnprintf(mgr->pool->base + mgr->used, mgr->space, format, ap1) + 1;
Kevin P. Fleming
committed
va_end(ap1);
if (needed > mgr->space) {
size_t new_size = mgr->size * 2;
while (new_size < needed)
new_size *= 2;
if (add_string_pool(mgr, new_size))
return;
vsprintf(mgr->pool->base + mgr->used, format, ap2);
}
fields[index] = mgr->pool->base + mgr->used;
mgr->used += needed;
mgr->space -= needed;
Kevin P. Fleming
committed
va_end(ap2);
}