-char *tal_asprintf(const tal_t *ctx, const char *fmt, ...)
-{
- va_list ap;
- char *ret;
-
- va_start(ap, fmt);
- ret = tal_vasprintf(ctx, fmt, ap);
- va_end(ap);
-
- return ret;
-}
-
-char *tal_vasprintf(const tal_t *ctx, const char *fmt, va_list ap)
-{
- size_t max;
- char *buf;
- int ret;
-
- if (!fmt && taken(fmt))
- return NULL;
-
- /* A decent guess to start. */
- max = strlen(fmt) * 2;
- buf = tal_arr(ctx, char, max);
- while (buf) {
- va_list ap2;
-
- va_copy(ap2, ap);
- ret = vsnprintf(buf, max, fmt, ap2);
- va_end(ap2);
-
- if (ret < max)
- break;
- if (!tal_resize(&buf, max *= 2))
- buf = tal_free(buf);
- }
- if (taken(fmt))
- tal_free(fmt);
- return buf;
-}
-