#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <asr.h>
#include <errno.h>
#include <resolv.h>
#include <stdlib.h>
int
getrrsetbyname(const char *name, unsigned int class, unsigned int type,
unsigned int flags, struct rrsetinfo **res)
{
struct asr_query *as;
struct asr_result ar;
int r, saved_errno = errno;
res_init();
as = getrrsetbyname_async(name, class, type, flags, NULL);
if (as == NULL) {
r = (errno == ENOMEM) ? ERRSET_NOMEMORY : ERRSET_FAIL;
errno = saved_errno;
return (r);
}
asr_run_sync(as, &ar);
*res = ar.ar_rrsetinfo;
return (ar.ar_rrset_errno);
}
void
freerrset(struct rrsetinfo *rrset)
{
u_int16_t i;
if (rrset == NULL)
return;
if (rrset->rri_rdatas) {
for (i = 0; i < rrset->rri_nrdatas; i++) {
if (rrset->rri_rdatas[i].rdi_data == NULL)
break;
free(rrset->rri_rdatas[i].rdi_data);
}
free(rrset->rri_rdatas);
}
if (rrset->rri_sigs) {
for (i = 0; i < rrset->rri_nsigs; i++) {
if (rrset->rri_sigs[i].rdi_data == NULL)
break;
free(rrset->rri_sigs[i].rdi_data);
}
free(rrset->rri_sigs);
}
if (rrset->rri_name)
free(rrset->rri_name);
free(rrset);
}
DEF_WEAK(freerrset);