1 void
wdns_clear_rr(wdns_rr_t * rr)2 wdns_clear_rr(wdns_rr_t *rr)
3 {
4 	my_free(rr->name.data);
5 	my_free(rr->rdata);
6 }
7 
8 void
wdns_clear_rrset(wdns_rrset_t * rrset)9 wdns_clear_rrset(wdns_rrset_t *rrset)
10 {
11 	for (unsigned i = 0; i < rrset->n_rdatas; i++)
12 		my_free(rrset->rdatas[i]);
13 	my_free(rrset->name.data);
14 	my_free(rrset->rdatas);
15 	rrset->n_rdatas = 0;
16 }
17 
18 void
wdns_clear_rrset_array(wdns_rrset_array_t * a)19 wdns_clear_rrset_array(wdns_rrset_array_t *a)
20 {
21 	for (unsigned i = 0; i < a->n_rrs; i++)
22 		wdns_clear_rr(&a->rrs[i]);
23 	my_free(a->rrs);
24 	a->n_rrs = 0;
25 
26 	for (unsigned i = 0; i < a->n_rrsets; i++)
27 		wdns_clear_rrset(&a->rrsets[i]);
28 	my_free(a->rrsets);
29 	a->n_rrsets = 0;
30 }
31 
32 void
wdns_clear_message(wdns_message_t * m)33 wdns_clear_message(wdns_message_t *m)
34 {
35 	my_free(m->edns.options);
36 	m->edns.present = false;
37 	for (unsigned i = 0; i < WDNS_MSG_SEC_MAX; i++)
38 		wdns_clear_rrset_array(&m->sections[i]);
39 }
40