diff options
author | Ondřej Surý <ondrej@sury.org> | 2012-06-13 15:30:30 +0200 |
---|---|---|
committer | Ondřej Surý <ondrej@sury.org> | 2012-06-13 15:30:30 +0200 |
commit | 4355eafde2b6a80d2b8feaba30b6a884aff070d9 (patch) | |
tree | caf5094e9fa899a889b3059e650e77529083cf33 /src/libknot/packet/packet.c | |
parent | 61aecee532a9da6d7acc277051142e393872eaa4 (diff) | |
download | knot-upstream/1.0.6.tar.gz |
Imported Upstream version 1.0.6upstream/1.0.6
Diffstat (limited to 'src/libknot/packet/packet.c')
-rw-r--r-- | src/libknot/packet/packet.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/libknot/packet/packet.c b/src/libknot/packet/packet.c index ed73afa..82b65c6 100644 --- a/src/libknot/packet/packet.c +++ b/src/libknot/packet/packet.c @@ -112,6 +112,18 @@ static void knot_packet_init_pointers_response(knot_packet_t *pkt) pkt->compression.max = DEFAULT_DOMAINS_IN_RESPONSE; pkt->compression.default_count = DEFAULT_DOMAINS_IN_RESPONSE; + // wildcard nodes and SNAMEs associated with them + pkt->wildcard_nodes.nodes = (const knot_node_t **)pos; + pos += DEFAULT_WILDCARD_NODES * sizeof(const knot_node_t *); + pkt->wildcard_nodes.snames = (const knot_dname_t **)pos; + pos += DEFAULT_WILDCARD_NODES * sizeof(knot_dname_t *); + + dbg_packet("Wildcard nodes: %p\n", pkt->wildcard_nodes.nodes); + dbg_packet("Wildcard SNAMEs: %p\n", pkt->wildcard_nodes.snames); + + pkt->wildcard_nodes.default_count = DEFAULT_WILDCARD_NODES; + pkt->wildcard_nodes.max = DEFAULT_WILDCARD_NODES; + pkt->tmp_rrsets = (const knot_rrset_t **)pos; pos += DEFAULT_TMP_RRSETS * sizeof(const knot_rrset_t *); @@ -639,6 +651,11 @@ static void knot_packet_free_allocated_space(knot_packet_t *pkt) free(pkt->compression.offsets); } + if (pkt->wildcard_nodes.max > pkt->wildcard_nodes.default_count) { + free(pkt->wildcard_nodes.nodes); + free(pkt->wildcard_nodes.snames); + } + if (pkt->tmp_rrsets_max > DEFAULT_RRSET_COUNT(TMP_RRSETS, pkt)) { free(pkt->tmp_rrsets); } @@ -1460,6 +1477,10 @@ void knot_packet_free(knot_packet_t **packet) dbg_packet("Freeing tmp RRSets...\n"); knot_packet_free_tmp_rrsets(*packet); + /*! \note The above code will free the domain names pointed to by + * the list of wildcard nodes. It should not matter, however. + */ + // check if some additional space was allocated for the packet dbg_packet("Freeing additional allocated space...\n"); knot_packet_free_allocated_space(*packet); |