Browse Source

deps: provide TXT chunk info in c-ares

Provide more information in `ares_txt_reply` to coalesce chunks from the
same record into one string.

fix #7367
v2.0.2
Fedor Indutny 11 years ago
committed by Ben Noordhuis
parent
commit
0f850f7ae7
  1. 2
      deps/cares/include/ares.h
  2. 5
      deps/cares/src/ares_parse_txt_reply.c

2
deps/cares/include/ares.h

@ -473,6 +473,8 @@ struct ares_txt_reply {
struct ares_txt_reply *next; struct ares_txt_reply *next;
unsigned char *txt; unsigned char *txt;
size_t length; /* length excludes null termination */ size_t length; /* length excludes null termination */
unsigned char record_start; /* 1 - if start of new record
* 0 - if a chunk in the same record */
}; };
struct ares_naptr_reply { struct ares_naptr_reply {

5
deps/cares/src/ares_parse_txt_reply.c

@ -133,8 +133,6 @@ ares_parse_txt_reply (const unsigned char *abuf, int alen,
break; break;
} }
++strptr;
/* Allocate storage for this TXT answer appending it to the list */ /* Allocate storage for this TXT answer appending it to the list */
txt_curr = ares_malloc_data(ARES_DATATYPE_TXT_REPLY); txt_curr = ares_malloc_data(ARES_DATATYPE_TXT_REPLY);
if (!txt_curr) if (!txt_curr)
@ -152,6 +150,7 @@ ares_parse_txt_reply (const unsigned char *abuf, int alen,
} }
txt_last = txt_curr; txt_last = txt_curr;
txt_curr->record_start = strptr == aptr;
txt_curr->length = substr_len; txt_curr->length = substr_len;
txt_curr->txt = malloc (substr_len + 1/* Including null byte */); txt_curr->txt = malloc (substr_len + 1/* Including null byte */);
if (txt_curr->txt == NULL) if (txt_curr->txt == NULL)
@ -159,6 +158,8 @@ ares_parse_txt_reply (const unsigned char *abuf, int alen,
status = ARES_ENOMEM; status = ARES_ENOMEM;
break; break;
} }
++strptr;
memcpy ((char *) txt_curr->txt, strptr, substr_len); memcpy ((char *) txt_curr->txt, strptr, substr_len);
/* Make sure we NULL-terminate */ /* Make sure we NULL-terminate */

Loading…
Cancel
Save