diff options
author | Kevin Newton <[email protected]> | 2023-10-24 12:28:53 -0400 |
---|---|---|
committer | Kevin Newton <[email protected]> | 2023-10-26 15:19:43 -0400 |
commit | d1bb858d476446ab82e6caa29c061a0da734c8eb (patch) | |
tree | cfc59d3f7e38c7295243a9bc29f9973f9d8d4896 /prism/util/pm_buffer.c | |
parent | e9aa2398b9d8eb04a0013fa5420214382ea3457a (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.c | 21 |
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) { |