diff options
Diffstat (limited to 'src/libstddjb/vbaprintf.c')
-rw-r--r-- | src/libstddjb/vbaprintf.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/libstddjb/vbaprintf.c b/src/libstddjb/vbaprintf.c new file mode 100644 index 0000000..efc2bd1 --- /dev/null +++ b/src/libstddjb/vbaprintf.c @@ -0,0 +1,23 @@ +/* ISC license. */ + +#include <stdarg.h> +#include <stdio.h> +#include <skalibs/stralloc.h> +#include <skalibs/bufalloc.h> +#include <skalibs/lolstdio.h> + +int vbaprintf (bufalloc *ba, char const *format, va_list args) +{ + int r ; + { + va_list ugly ; + va_copy(ugly, args) ; + r = vsnprintf(0, 0, format, ugly) ; + va_end(ugly) ; + } + if (r < 0) return r ; + if (!stralloc_readyplus(&ba->x, (unsigned int)r + 1)) return -1 ; + r = vsnprintf(ba->x.s + ba->x.len, (unsigned int)r + 1, format, args) ; + if (r > 0) ba->x.len += r ; + return r ; +} |