diff --git a/src/knot/zone/node.c b/src/knot/zone/node.c index 2f4ffd7cfc41441259a9302ed41981896e232a7a..fd669c3ac94aface78e1e76a70ce053d0b59ccdf 100644 --- a/src/knot/zone/node.c +++ b/src/knot/zone/node.c @@ -97,39 +97,6 @@ int rr_data_from(const knot_rrset_t *rrset, struct rr_data *data, mm_ctx_t *mm) return KNOT_EOK; } -static knot_rrset_t *rrset_from_rr_data(const knot_node_t *n, size_t pos, - mm_ctx_t *mm) -{ - struct rr_data data = n->rrs[pos]; - knot_dname_t *dname_copy = knot_dname_copy(n->owner, mm); - if (dname_copy == NULL) { - return NULL; - } - knot_rrset_t *rrset = knot_rrset_new(dname_copy, data.type, KNOT_CLASS_IN, mm); - if (rrset == NULL) { - knot_dname_free(&dname_copy, mm); - return NULL; - } - - int ret = knot_rrs_copy(&rrset->rrs, &data.rrs, mm); - if (ret != KNOT_EOK) { - knot_rrset_free(&rrset, mm); - return NULL; - } - - if (data.additional) { - size_t alloc_size = data.rrs.rr_count * sizeof(knot_node_t *); - rrset->additional = malloc(alloc_size); - if (rrset->additional == NULL) { - knot_rrset_free(&rrset, mm); - return NULL; - } - memcpy(rrset->additional, data.additional, alloc_size); - } - - return rrset; -} - /*----------------------------------------------------------------------------*/ /* API functions */ /*----------------------------------------------------------------------------*/ @@ -190,23 +157,8 @@ int knot_node_add_rrset(knot_node_t *node, const knot_rrset_t *rrset) for (uint16_t i = 0; i < node->rrset_count; ++i) { if (node->rrs[i].type == rrset->type) { - - // TODO this is obviously a workaround - knot_rrset_t *node_rrset = rrset_from_rr_data(node, i, NULL); - if (node_rrset == NULL) { - return KNOT_ENOMEM; - } - int ret = knot_rrset_merge(node_rrset, - rrset, NULL); - if (ret != KNOT_EOK) { - knot_rrset_free(&node_rrset, NULL); - return ret; - } else { - rr_data_clear(&node->rrs[i], NULL); - rr_data_from(node_rrset, &node->rrs[i], NULL); - knot_rrset_free(&node_rrset, NULL); - return KNOT_EOK; - } + struct rr_data *node_data = &node->rrs[i]; + return knot_rrs_merge(&node_data->rrs, &rrset->rrs, NULL); } } @@ -246,7 +198,8 @@ knot_rrset_t *knot_node_create_rrset(const knot_node_t *node, uint16_t type) for (uint16_t i = 0; i < node->rrset_count; ++i) { if (node->rrs[i].type == type) { - return rrset_from_rr_data(node, i, NULL); + knot_rrset_t rrset = RRSET_INIT_N(node, i); + return knot_rrset_cpy(&rrset, NULL); } }