aboutsummaryrefslogtreecommitdiff
path: root/src/buffer.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2015-08-05 21:47:08 -0700
committerAndrew Kelley <superjoe30@gmail.com>2015-08-05 21:47:08 -0700
commitd519ce87dd3c112dbaa087e2ef08514d5253f02a (patch)
tree9a75a21f87402147ef245fb37bcc4ea8105f2dee /src/buffer.cpp
parente71521335ac656f94892ee049cc4814ecb772b30 (diff)
downloadzig-d519ce87dd3c112dbaa087e2ef08514d5253f02a.tar.gz
zig-d519ce87dd3c112dbaa087e2ef08514d5253f02a.zip
preprocessor runs once
Diffstat (limited to 'src/buffer.cpp')
-rw-r--r--src/buffer.cpp25
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;
+}