static atf_error_t normalize_ap(atf_dynstr_t *d, const char *p, va_list ap) { char *str; atf_error_t err; va_list ap2; err = atf_dynstr_init(d); if (atf_is_error(err)) goto out; va_copy(ap2, ap); err = atf_text_format_ap(&str, p, ap2); va_end(ap2); if (atf_is_error(err)) atf_dynstr_fini(d); else { err = normalize(d, str); free(str); } out: return err; }
atf_error_t atf_text_format(char **dest, const char *fmt, ...) { atf_error_t err; va_list ap; va_start(ap, fmt); err = atf_text_format_ap(dest, fmt, ap); va_end(ap); return err; }