Alien-cares
view release on metacpan or search on metacpan
libcares/ares_parse_txt_reply.c view on Meta::CPAN
status = ARES_ENOMEM;
break;
}
if (txt_last)
{
txt_last->next = txt_curr;
}
else
{
txt_head = txt_curr;
}
txt_last = txt_curr;
if (ex)
txt_curr->record_start = (strptr == aptr);
txt_curr->length = substr_len;
txt_curr->txt = ares_malloc (substr_len + 1/* Including null byte */);
if (txt_curr->txt == NULL)
{
status = ARES_ENOMEM;
break;
}
++strptr;
memcpy ((char *) txt_curr->txt, strptr, substr_len);
/* Make sure we NULL-terminate */
txt_curr->txt[substr_len] = 0;
strptr += substr_len;
}
}
/* Propagate any failures */
if (status != ARES_SUCCESS)
{
break;
}
/* Don't lose memory in the next iteration */
ares_free (rr_name);
rr_name = NULL;
/* Move on to the next record */
aptr += rr_len;
}
if (hostname)
ares_free (hostname);
if (rr_name)
ares_free (rr_name);
/* clean up on error */
if (status != ARES_SUCCESS)
{
if (txt_head)
ares_free_data (txt_head);
return status;
}
/* everything looks fine, return the data */
*txt_out = txt_head;
return ARES_SUCCESS;
}
int
ares_parse_txt_reply (const unsigned char *abuf, int alen,
struct ares_txt_reply **txt_out)
{
return ares__parse_txt_reply(abuf, alen, 0, (void **) txt_out);
}
int
ares_parse_txt_reply_ext (const unsigned char *abuf, int alen,
struct ares_txt_ext **txt_out)
{
return ares__parse_txt_reply(abuf, alen, 1, (void **) txt_out);
}
( run in 0.957 second using v1.01-cache-2.11-cpan-2398b32b56e )