diff options
| author | Xavier Del Campo Romero <xavier.delcampo@orain.io> | 2020-10-06 09:20:57 +0200 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavier.delcampo@orain.io> | 2020-10-06 09:20:57 +0200 |
| commit | 8bd1123857aef03c9aefb0658e3a8a562984a52e (patch) | |
| tree | bb7055daa7f1123d45c30890c10bb4bfc130ab81 /dynstr.c | |
| parent | e0eaf50fdc4a334a59cfa6447d68e7ba9aed6f45 (diff) | |
| download | dynstr-8bd1123857aef03c9aefb0658e3a8a562984a52e.tar.gz | |
Add dynstr_vappend
Diffstat (limited to 'dynstr.c')
| -rw-r--r-- | dynstr.c | 41 |
1 files changed, 21 insertions, 20 deletions
@@ -30,33 +30,34 @@ void dynstr_init(struct dynstr *const d) memset(d, 0, sizeof *d); } -enum dynstr_err dynstr_append(struct dynstr *const d, const char *const format, ...) +enum dynstr_err dynstr_vappend(struct dynstr *const d, const char *const format, va_list ap) { - va_list ap; + enum dynstr_err err = DYNSTR_OK; + const size_t src_len = vsnprintf(NULL, 0, format, ap); + const size_t new_len = d->len + src_len + 1; - va_start(ap, format); + d->str = realloc(d->str, new_len * sizeof *d->str); + if (d->str) { - const size_t src_len = vsnprintf(NULL, 0, format, ap); - const size_t new_len = d->len + src_len + 1; - va_end(ap); + vsprintf(d->str + d->len, format, ap); + d->len += src_len; + } + else + { + err = DYNSTR_ERR_ALLOC; + } - d->str = realloc(d->str, new_len * sizeof *d->str); + va_end(ap); + return err; +} - if (d->str) - { - va_start(ap, format); - vsprintf(d->str + d->len, format, ap); - va_end(ap); - d->len += src_len; - } - else - { - return DYNSTR_ERR_ALLOC; - } - } +enum dynstr_err dynstr_append(struct dynstr *const d, const char *const format, ...) +{ + va_list ap; - return DYNSTR_OK; + va_start(ap, format); + return dynstr_vappend(d, format, ap); } enum dynstr_err dynstr_prepend(struct dynstr *const d, const char *const format, ...) |
