diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2015-08-05 21:47:08 -0700 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2015-08-05 21:47:08 -0700 |
| commit | d519ce87dd3c112dbaa087e2ef08514d5253f02a (patch) | |
| tree | 9a75a21f87402147ef245fb37bcc4ea8105f2dee /src/buffer.cpp | |
| parent | e71521335ac656f94892ee049cc4814ecb772b30 (diff) | |
| download | zig-d519ce87dd3c112dbaa087e2ef08514d5253f02a.tar.gz zig-d519ce87dd3c112dbaa087e2ef08514d5253f02a.zip | |
preprocessor runs once
Diffstat (limited to 'src/buffer.cpp')
| -rw-r--r-- | src/buffer.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/buffer.cpp b/src/buffer.cpp new file mode 100644 index 0000000000..7bcd1b3783 --- /dev/null +++ b/src/buffer.cpp @@ -0,0 +1,25 @@ +#include "buffer.hpp" +#include <stdarg.h> +#include <stdlib.h> +#include <stdio.h> + +Buf *buf_sprintf(const char *format, ...) { + va_list ap, ap2; + va_start(ap, format); + va_copy(ap2, ap); + + int len1 = vsnprintf(nullptr, 0, format, ap); + assert(len1 >= 0); + + size_t required_size = len1 + 1; + + Buf *buf = buf_alloc_fixed(len1); + + int len2 = vsnprintf(buf_ptr(buf), required_size, format, ap2); + assert(len2 == len1); + + va_end(ap2); + va_end(ap); + + return buf; +} |
