Lines Matching refs:buf
91 ares__buf_t *buf = ares_malloc_zero(sizeof(*buf));
92 if (buf == NULL) {
96 buf->tag_offset = SIZE_MAX;
97 return buf;
102 ares__buf_t *buf;
108 buf = ares__buf_create();
109 if (buf == NULL) {
113 buf->data = data;
114 buf->data_len = data_len;
116 return buf;
119 void ares__buf_destroy(ares__buf_t *buf)
121 if (buf == NULL) {
124 ares_free(buf->alloc_buf);
125 ares_free(buf);
128 static ares_bool_t ares__buf_is_const(const ares__buf_t *buf)
130 if (buf == NULL) {
134 if (buf->data != NULL && buf->alloc_buf == NULL) {
141 void ares__buf_reclaim(ares__buf_t *buf)
146 if (buf == NULL) {
150 if (ares__buf_is_const(buf)) {
156 if (buf->alloc_buf == NULL) {
160 if (buf->tag_offset != SIZE_MAX && buf->tag_offset < buf->offset) {
161 prefix_size = buf->tag_offset;
163 prefix_size = buf->offset;
170 data_size = buf->data_len - prefix_size;
172 memmove(buf->alloc_buf, buf->alloc_buf + prefix_size, data_size);
173 buf->data = buf->alloc_buf;
174 buf->data_len = data_size;
175 buf->offset -= prefix_size;
176 if (buf->tag_offset != SIZE_MAX) {
177 buf->tag_offset -= prefix_size;
183 static ares_status_t ares__buf_ensure_space(ares__buf_t *buf,
190 if (buf == NULL) {
194 if (ares__buf_is_const(buf)) {
204 remaining_size = buf->alloc_buf_len - buf->data_len;
210 ares__buf_reclaim(buf);
212 remaining_size = buf->alloc_buf_len - buf->data_len;
217 alloc_size = buf->alloc_buf_len;
227 remaining_size = alloc_size - buf->data_len;
230 ptr = ares_realloc(buf->alloc_buf, alloc_size);
235 buf->alloc_buf = ptr;
236 buf->alloc_buf_len = alloc_size;
237 buf->data = ptr;
242 ares_status_t ares__buf_set_length(ares__buf_t *buf, size_t len)
244 if (buf == NULL || ares__buf_is_const(buf)) {
248 if (len >= buf->alloc_buf_len - buf->offset) {
252 buf->data_len = len;
256 ares_status_t ares__buf_append(ares__buf_t *buf, const unsigned char *data,
265 status = ares__buf_ensure_space(buf, data_len);
270 memcpy(buf->alloc_buf + buf->data_len, data, data_len);
271 buf->data_len += data_len;
275 ares_status_t ares__buf_append_byte(ares__buf_t *buf, unsigned char byte)
277 return ares__buf_append(buf, &byte, 1);
280 ares_status_t ares__buf_append_be16(ares__buf_t *buf, unsigned short u16)
284 status = ares__buf_append_byte(buf, (unsigned char)((u16 >> 8) & 0xff));
289 status = ares__buf_append_byte(buf, (unsigned char)(u16 & 0xff));
297 ares_status_t ares__buf_append_be32(ares__buf_t *buf, unsigned int u32)
301 status = ares__buf_append_byte(buf, ((unsigned char)(u32 >> 24) & 0xff));
306 status = ares__buf_append_byte(buf, ((unsigned char)(u32 >> 16) & 0xff));
311 status = ares__buf_append_byte(buf, ((unsigned char)(u32 >> 8) & 0xff));
316 status = ares__buf_append_byte(buf, ((unsigned char)u32 & 0xff));
324 unsigned char *ares__buf_append_start(ares__buf_t *buf, size_t *len)
332 status = ares__buf_ensure_space(buf, *len);
338 *len = buf->alloc_buf_len - buf->data_len - 1;
339 return buf->alloc_buf + buf->data_len;
342 void ares__buf_append_finish(ares__buf_t *buf, size_t len)
344 if (buf == NULL) {
348 buf->data_len += len;
351 unsigned char *ares__buf_finish_bin(ares__buf_t *buf, size_t *len)
354 if (buf == NULL || len == NULL || ares__buf_is_const(buf)) {
358 ares__buf_reclaim(buf);
361 if (buf->alloc_buf == NULL &&
362 ares__buf_ensure_space(buf, 1) != ARES_SUCCESS) {
365 ptr = buf->alloc_buf;
366 *len = buf->data_len;
367 ares_free(buf);
371 char *ares__buf_finish_str(ares__buf_t *buf, size_t *len)
376 ptr = (char *)ares__buf_finish_bin(buf, &mylen);
392 void ares__buf_tag(ares__buf_t *buf)
394 if (buf == NULL) {
398 buf->tag_offset = buf->offset;
401 ares_status_t ares__buf_tag_rollback(ares__buf_t *buf)
403 if (buf == NULL || buf->tag_offset == SIZE_MAX) {
407 buf->offset = buf->tag_offset;
408 buf->tag_offset = SIZE_MAX;
412 ares_status_t ares__buf_tag_clear(ares__buf_t *buf)
414 if (buf == NULL || buf->tag_offset == SIZE_MAX) {
418 buf->tag_offset = SIZE_MAX;
422 const unsigned char *ares__buf_tag_fetch(const ares__buf_t *buf, size_t *len)
424 if (buf == NULL || buf->tag_offset == SIZE_MAX || len == NULL) {
428 *len = buf->offset - buf->tag_offset;
429 return buf->data + buf->tag_offset;
432 size_t ares__buf_tag_length(const ares__buf_t *buf)
434 if (buf == NULL || buf->tag_offset == SIZE_MAX) {
437 return buf->offset - buf->tag_offset;
440 ares_status_t ares__buf_tag_fetch_bytes(const ares__buf_t *buf,
444 const unsigned char *ptr = ares__buf_tag_fetch(buf, &ptr_len);
462 ares_status_t ares__buf_tag_fetch_string(const ares__buf_t *buf, char *str,
476 status = ares__buf_tag_fetch_bytes(buf, (unsigned char *)str, &out_len);
494 static const unsigned char *ares__buf_fetch(const ares__buf_t *buf, size_t *len)
500 if (buf == NULL || len == NULL || buf->data == NULL) {
504 *len = buf->data_len - buf->offset;
509 return buf->data + buf->offset;
512 ares_status_t ares__buf_consume(ares__buf_t *buf, size_t len)
514 size_t remaining_len = ares__buf_len(buf);
520 buf->offset += len;
524 ares_status_t ares__buf_fetch_be16(ares__buf_t *buf, unsigned short *u16)
527 const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
530 if (buf == NULL || u16 == NULL || remaining_len < sizeof(*u16)) {
539 return ares__buf_consume(buf, sizeof(*u16));
542 ares_status_t ares__buf_fetch_be32(ares__buf_t *buf, unsigned int *u32)
545 const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
547 if (buf == NULL || u32 == NULL || remaining_len < sizeof(*u32)) {
554 return ares__buf_consume(buf, sizeof(*u32));
557 ares_status_t ares__buf_fetch_bytes(ares__buf_t *buf, unsigned char *bytes,
561 const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
563 if (buf == NULL || bytes == NULL || len == 0 || remaining_len < len) {
568 return ares__buf_consume(buf, len);
571 ares_status_t ares__buf_fetch_bytes_dup(ares__buf_t *buf, size_t len,
576 const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
578 if (buf == NULL || bytes == NULL || len == 0 || remaining_len < len) {
591 return ares__buf_consume(buf, len);
594 ares_status_t ares__buf_fetch_str_dup(ares__buf_t *buf, size_t len, char **str)
597 const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
599 if (buf == NULL || str == NULL || len == 0 || remaining_len < len) {
611 return ares__buf_consume(buf, len);
614 ares_status_t ares__buf_fetch_bytes_into_buf(ares__buf_t *buf,
618 const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
621 if (buf == NULL || dest == NULL || len == 0 || remaining_len < len) {
630 return ares__buf_consume(buf, len);
633 size_t ares__buf_consume_whitespace(ares__buf_t *buf,
637 const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
664 ares__buf_consume(buf, i);
669 size_t ares__buf_consume_nonwhitespace(ares__buf_t *buf)
672 const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
695 ares__buf_consume(buf, i);
700 size_t ares__buf_consume_line(ares__buf_t *buf, ares_bool_t include_linefeed)
703 const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
722 ares__buf_consume(buf, i);
727 size_t ares__buf_consume_until_charset(ares__buf_t *buf,
732 const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
756 ares__buf_consume(buf, i);
761 size_t ares__buf_consume_charset(ares__buf_t *buf, const unsigned char *charset,
765 const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
786 ares__buf_consume(buf, i);
805 const ares__buf_t *buf = ares__llist_node_val(node);
807 const unsigned char *ptr = ares__buf_peek(buf, &plen);
827 ares_status_t ares__buf_split(ares__buf_t *buf, const unsigned char *delims,
834 if (buf == NULL || delims == NULL || delims_len == 0 || list == NULL) {
844 while (ares__buf_len(buf)) {
847 ares__buf_tag(buf);
849 len = ares__buf_consume_until_charset(buf, delims, delims_len, ARES_FALSE);
857 const unsigned char *ptr = ares__buf_tag_fetch(buf, &len);
884 ares__buf_len(buf) != 0) {
886 ares__buf_consume(buf, 1);
901 ares_bool_t ares__buf_begins_with(const ares__buf_t *buf,
905 const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
922 size_t ares__buf_len(const ares__buf_t *buf)
924 if (buf == NULL) {
928 return buf->data_len - buf->offset;
931 const unsigned char *ares__buf_peek(const ares__buf_t *buf, size_t *len)
933 return ares__buf_fetch(buf, len);
936 size_t ares__buf_get_position(const ares__buf_t *buf)
938 if (buf == NULL) {
941 return buf->offset;
944 ares_status_t ares__buf_set_position(ares__buf_t *buf, size_t idx)
946 if (buf == NULL) {
950 if (idx > buf->data_len) {
954 buf->offset = idx;
958 ares_status_t ares__buf_parse_dns_binstr(ares__buf_t *buf, size_t remaining_len,
965 size_t orig_len = ares__buf_len(buf);
967 if (buf == NULL) {
980 while (orig_len - ares__buf_len(buf) < remaining_len) {
981 status = ares__buf_fetch_bytes(buf, &len, 1);
989 status = ares__buf_fetch_bytes_into_buf(buf, binbuf, len);
991 status = ares__buf_consume(buf, len);
1020 ares_status_t ares__buf_parse_dns_str(ares__buf_t *buf, size_t remaining_len,
1024 return ares__buf_parse_dns_binstr(buf, remaining_len, (unsigned char **)str,
1028 ares_status_t ares__buf_append_num_dec(ares__buf_t *buf, size_t num, size_t len)
1051 status = ares__buf_append_byte(buf, '0' + (unsigned char)(digit & 0xFF));
1059 ares_status_t ares__buf_append_num_hex(ares__buf_t *buf, size_t num, size_t len)
1070 status = ares__buf_append_byte(buf, hexbytes[(num >> ((i - 1) * 4)) & 0xF]);
1078 ares_status_t ares__buf_append_str(ares__buf_t *buf, const char *str)
1080 return ares__buf_append(buf, (const unsigned char *)str, ares_strlen(str));
1083 static ares_status_t ares__buf_hexdump_line(ares__buf_t *buf, size_t idx,
1091 status = ares__buf_append_num_hex(buf, idx, 6);
1097 status = ares__buf_append_str(buf, " | ");
1104 status = ares__buf_append_str(buf, " ");
1106 status = ares__buf_append_num_hex(buf, data[i], 2);
1112 status = ares__buf_append_byte(buf, ' ');
1119 status = ares__buf_append_str(buf, " | ");
1128 status = ares__buf_append_byte(buf, ares__isprint(data[i]) ? data[i] : '.');
1134 return ares__buf_append_byte(buf, '\n');
1137 ares_status_t ares__buf_hexdump(ares__buf_t *buf, const unsigned char *data,
1145 status = ares__buf_hexdump_line(buf, i, data + i, len - i);