summaryrefslogtreecommitdiff
path: root/prism/util/pm_buffer.c
diff options
context:
space:
mode:
authorKevin Newton <[email protected]>2023-10-24 12:28:53 -0400
committerKevin Newton <[email protected]>2023-10-26 15:19:43 -0400
commitd1bb858d476446ab82e6caa29c061a0da734c8eb (patch)
treecfc59d3f7e38c7295243a9bc29f9973f9d8d4896 /prism/util/pm_buffer.c
parente9aa2398b9d8eb04a0013fa5420214382ea3457a (diff)
[ruby/prism] Match existing Ruby prettyprint
https://github.com/ruby/prism/commit/6d8358c083
Diffstat (limited to 'prism/util/pm_buffer.c')
-rw-r--r--prism/util/pm_buffer.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/prism/util/pm_buffer.c b/prism/util/pm_buffer.c
index 9547df203a..db2415a807 100644
--- a/prism/util/pm_buffer.c
+++ b/prism/util/pm_buffer.c
@@ -70,6 +70,27 @@ pm_buffer_append_zeroes(pm_buffer_t *buffer, size_t length) {
memset(buffer->value + cursor, 0, length);
}
+// Append a formatted string to the buffer.
+void
+pm_buffer_append_format(pm_buffer_t *buffer, const char *format, ...) {
+ va_list arguments;
+ va_start(arguments, format);
+ int result = vsnprintf(NULL, 0, format, arguments);
+ va_end(arguments);
+
+ if (result < 0) return;
+ size_t length = (size_t) (result + 1);
+
+ size_t cursor = buffer->length;
+ pm_buffer_append_length(buffer, length);
+
+ va_start(arguments, format);
+ vsnprintf(buffer->value + cursor, length, format, arguments);
+ va_end(arguments);
+
+ buffer->length--;
+}
+
// Append a string to the buffer.
void
pm_buffer_append_string(pm_buffer_t *buffer, const char *value, size_t length) {