aboutsummaryrefslogtreecommitdiff
path: root/src/buffer.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2015-11-01 22:21:33 -0700
committerAndrew Kelley <superjoe30@gmail.com>2015-11-01 22:21:33 -0700
commit34f8d80eac87a5e3bdf495163d8bc0fbd80ae83f (patch)
treeedb9b9d81a0d6552a2ac7e7de0df0f5a85288535 /src/buffer.cpp
parent5f48463bdd843a9d8dfd55cfc389637b39fc1074 (diff)
downloadzig-34f8d80eac87a5e3bdf495163d8bc0fbd80ae83f.tar.gz
zig-34f8d80eac87a5e3bdf495163d8bc0fbd80ae83f.zip
tokenizing hello.zig
Diffstat (limited to 'src/buffer.cpp')
-rw-r--r--src/buffer.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/buffer.cpp b/src/buffer.cpp
index 7bcd1b3783..ab22a87afd 100644
--- a/src/buffer.cpp
+++ b/src/buffer.cpp
@@ -23,3 +23,24 @@ Buf *buf_sprintf(const char *format, ...) {
return buf;
}
+
+void buf_appendf(Buf *buf, 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;
+
+ int orig_len = buf_len(buf);
+
+ buf_resize(buf, orig_len + required_size);
+
+ int len2 = vsnprintf(buf_ptr(buf) + orig_len, required_size, format, ap2);
+ assert(len2 == len1);
+
+ va_end(ap2);
+ va_end(ap);
+}