100 int result = vsnprintf(NULL, 0, format, arguments);
146 pm_buffer_append_byte(buffer, (uint8_t) value);
150 pm_buffer_append_byte(buffer, (uint8_t) (n | 128));
153 pm_buffer_append_byte(buffer, (uint8_t) n);
162 uint32_t unsigned_int = ((uint32_t)(value) << 1) ^ ((uint32_t)(value >> 31));
163 pm_buffer_append_varuint(buffer, unsigned_int);
180 for (
size_t index = 0; index < length; index++) {
181 const uint8_t
byte = source[index];
183 if ((
byte <= 0x06) || (
byte >= 0x0E &&
byte <= 0x1F) || (
byte >= 0x7F)) {
184 if (escaping == PM_BUFFER_ESCAPING_RUBY) {
185 pm_buffer_append_format(buffer,
"\\x%02X",
byte);
187 pm_buffer_append_format(buffer,
"\\u%04X",
byte);
192 if (escaping == PM_BUFFER_ESCAPING_RUBY) {
193 pm_buffer_append_string(buffer,
"\\a", 2);
195 pm_buffer_append_format(buffer,
"\\u%04X",
byte);
199 pm_buffer_append_string(buffer,
"\\b", 2);
202 pm_buffer_append_string(buffer,
"\\t", 2);
205 pm_buffer_append_string(buffer,
"\\n", 2);
208 if (escaping == PM_BUFFER_ESCAPING_RUBY) {
209 pm_buffer_append_string(buffer,
"\\v", 2);
211 pm_buffer_append_format(buffer,
"\\u%04X",
byte);
215 pm_buffer_append_string(buffer,
"\\f", 2);
218 pm_buffer_append_string(buffer,
"\\r", 2);
221 pm_buffer_append_string(buffer,
"\\\"", 2);
224 if (escaping == PM_BUFFER_ESCAPING_RUBY && index + 1 < length) {
225 const uint8_t next_byte = source[index + 1];
226 if (next_byte ==
'{' || next_byte ==
'@' || next_byte ==
'$') {
227 pm_buffer_append_byte(buffer,
'\\');
231 pm_buffer_append_byte(buffer,
'#');
235 pm_buffer_append_string(buffer,
"\\\\", 2);
238 pm_buffer_append_byte(buffer,
byte);
299pm_buffer_insert(
pm_buffer_t *buffer,
size_t index,
const char *value,
size_t length) {
300 assert(index <= buffer->length);
302 if (index == buffer->
length) {
303 pm_buffer_append_string(buffer, value, length);
305 pm_buffer_append_zeroes(buffer, length);
306 memmove(buffer->
value + index + length, buffer->
value + index, buffer->
length - length - index);
307 memcpy(buffer->
value + index, value, length);