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/vbprintf.c | |
download | skalibs-3534b428629be185e096be99e3bd5fdfe32d5544.tar.xz |
initial commit with rc for skalibs-2.0.0.0
Diffstat (limited to 'src/libstddjb/vbprintf.c')
-rw-r--r-- | src/libstddjb/vbprintf.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/libstddjb/vbprintf.c b/src/libstddjb/vbprintf.c new file mode 100644 index 0000000..a6a75f3 --- /dev/null +++ b/src/libstddjb/vbprintf.c @@ -0,0 +1,25 @@ +/* ISC license. */ + +#include <stdarg.h> +#include <stdio.h> +#include <skalibs/buffer.h> +#include <skalibs/lolstdio.h> + +int vbprintf (buffer *b, 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 ; + { + char buf[(unsigned int)r + 1] ; + r = vsnprintf(buf, (unsigned int)r + 1, format, args) ; + if (r < 0) return r ; + if (buffer_put(b, buf, r) < r) return -1 ; + } + return r ; +} |