Lines Matching refs:buffer

2  * buffer.c -- generic memory buffer .
13 #include <ldns/buffer.h>
18 ldns_buffer *buffer = LDNS_MALLOC(ldns_buffer);
20 if (!buffer) {
24 buffer->_data = (uint8_t *) LDNS_XMALLOC(uint8_t, capacity);
25 if (!buffer->_data) {
26 LDNS_FREE(buffer);
30 buffer->_position = 0;
31 buffer->_limit = buffer->_capacity = capacity;
32 buffer->_fixed = 0;
33 buffer->_status = LDNS_STATUS_OK;
35 ldns_buffer_invariant(buffer);
37 return buffer;
41 ldns_buffer_new_frm_data(ldns_buffer *buffer, void *data, size_t size)
45 buffer->_position = 0;
46 buffer->_limit = buffer->_capacity = size;
47 buffer->_fixed = 0;
48 buffer->_data = LDNS_XMALLOC(uint8_t, size);
49 if(!buffer->_data) {
50 buffer->_status = LDNS_STATUS_MEM_ERR;
53 memcpy(buffer->_data, data, size);
54 buffer->_status = LDNS_STATUS_OK;
56 ldns_buffer_invariant(buffer);
60 ldns_buffer_set_capacity(ldns_buffer *buffer, size_t capacity)
64 ldns_buffer_invariant(buffer);
65 assert(buffer->_position <= capacity);
67 data = (uint8_t *) LDNS_XREALLOC(buffer->_data, uint8_t, capacity);
69 buffer->_status = LDNS_STATUS_MEM_ERR;
72 buffer->_data = data;
73 buffer->_limit = buffer->_capacity = capacity;
79 ldns_buffer_reserve(ldns_buffer *buffer, size_t amount)
81 ldns_buffer_invariant(buffer);
82 assert(!buffer->_fixed);
83 if (buffer->_capacity < buffer->_position + amount) {
84 size_t new_capacity = buffer->_capacity * 3 / 2;
86 if (new_capacity < buffer->_position + amount) {
87 new_capacity = buffer->_position + amount;
89 if (!ldns_buffer_set_capacity(buffer, new_capacity)) {
90 buffer->_status = LDNS_STATUS_MEM_ERR;
94 buffer->_limit = buffer->_capacity;
99 ldns_buffer_printf(ldns_buffer *buffer, const char *format, ...)
105 if (ldns_buffer_status_ok(buffer)) {
106 ldns_buffer_invariant(buffer);
107 assert(buffer->_limit == buffer->_capacity);
109 remaining = ldns_buffer_remaining(buffer);
111 written = vsnprintf((char *) ldns_buffer_current(buffer), remaining,
115 buffer->_status = LDNS_STATUS_INTERNAL_ERR;
118 if (!ldns_buffer_reserve(buffer, (size_t) written + 1)) {
119 buffer->_status = LDNS_STATUS_MEM_ERR;
123 written = vsnprintf((char *) ldns_buffer_current(buffer),
124 ldns_buffer_remaining(buffer), format, args);
127 buffer->_status = LDNS_STATUS_INTERNAL_ERR;
131 buffer->_position += written;
137 ldns_buffer_free(ldns_buffer *buffer)
139 if (!buffer) {
143 if (!buffer->_fixed)
144 LDNS_FREE(buffer->_data);
146 LDNS_FREE(buffer);
150 ldns_buffer_export(ldns_buffer *buffer)
152 buffer->_fixed = 1;
153 return buffer->_data;
157 ldns_bgetc(ldns_buffer *buffer)
159 if (!ldns_buffer_available_at(buffer, buffer->_position, sizeof(uint8_t))) {
160 ldns_buffer_set_position(buffer, ldns_buffer_limit(buffer));
161 /* ldns_buffer_rewind(buffer);*/
164 return (int)ldns_buffer_read_u8(buffer);