7pm_buffer_sizeof(
void) {
15pm_buffer_init_capacity(
pm_buffer_t *buffer,
size_t capacity) {
19 buffer->
value = (
char *) malloc(capacity);
20 return buffer->
value != NULL;
28 return pm_buffer_init_capacity(buffer, 1024);
51pm_buffer_append_length(
pm_buffer_t *buffer,
size_t length) {
52 size_t next_length = buffer->
length + length;
54 if (next_length > buffer->
capacity) {
59 while (next_length > buffer->
capacity) {
66 buffer->
length = next_length;
73pm_buffer_append(
pm_buffer_t *buffer,
const void *source,
size_t length) {
74 size_t cursor = buffer->
length;
75 pm_buffer_append_length(buffer, length);
76 memcpy(buffer->
value + cursor, source, length);
84 size_t cursor = buffer->
length;
85 pm_buffer_append_length(buffer, length);
86 memset(buffer->
value + cursor, 0, length);
93pm_buffer_append_format(
pm_buffer_t *buffer,
const char *format, ...) {
95 va_start(arguments, format);
96 int result = vsnprintf(NULL, 0, format, arguments);
99 if (result < 0)
return;
100 size_t length = (size_t) (result + 1);
102 size_t cursor = buffer->
length;
103 pm_buffer_append_length(buffer, length);
105 va_start(arguments, format);
106 vsnprintf(buffer->
value + cursor, length, format, arguments);
116pm_buffer_append_string(
pm_buffer_t *buffer,
const char *value,
size_t length) {
117 pm_buffer_append(buffer, value, length);
124pm_buffer_append_bytes(
pm_buffer_t *buffer,
const uint8_t *value,
size_t length) {
125 pm_buffer_append(buffer, (
const char *) value, length);
133 const void *source = &value;
134 pm_buffer_append(buffer, source,
sizeof(uint8_t));
143 pm_buffer_append_byte(buffer, (uint8_t) value);
147 pm_buffer_append_byte(buffer, (uint8_t) (n | 128));
150 pm_buffer_append_byte(buffer, (uint8_t) n);
159 uint32_t unsigned_int = ((uint32_t)(value) << 1) ^ ((uint32_t)(value >> 31));
160 pm_buffer_append_varuint(buffer, unsigned_int);
169 pm_buffer_append(destination, source->
value, source->
length);
A wrapper around a contiguous block of allocated memory.
A pm_buffer_t is a simple memory buffer that stores data in a contiguous block of memory.
size_t capacity
The capacity of the buffer in bytes that has been allocated.
size_t length
The length of the buffer in bytes.
char * value
A pointer to the start of the buffer.