diff options
author | Laurent Bercot <ska-skaware@skarnet.org> | 2014-09-18 18:55:44 +0000 |
---|---|---|
committer | Laurent Bercot <ska-skaware@skarnet.org> | 2014-09-18 18:55:44 +0000 |
commit | 3534b428629be185e096be99e3bd5fdfe32d5544 (patch) | |
tree | 210ef3198ed66bc7f7b7bf6a85e4579f455e5a36 /src/libstddjb/vbaprintf.c | |
download | skalibs-3534b428629be185e096be99e3bd5fdfe32d5544.tar.xz |
initial commit with rc for skalibs-2.0.0.0
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 ; +} |