From 7ed4df59787aa8dac92d64360c598b8bc54a8648 Mon Sep 17 00:00:00 2001
From: Marek Vavrusa <marek.vavrusa@nic.cz>
Date: Mon, 17 Dec 2012 15:35:47 +0100
Subject: [PATCH] Compiler uses rdata memory instead of constant alloc/copying.

---
 src/zcompile/zcompile.c | 19 +++++++------------
 1 file changed, 7 insertions(+), 12 deletions(-)

diff --git a/src/zcompile/zcompile.c b/src/zcompile/zcompile.c
index 40ba583a1..7b20a6b8f 100644
--- a/src/zcompile/zcompile.c
+++ b/src/zcompile/zcompile.c
@@ -275,9 +275,14 @@ static int add_rdata_to_rr(knot_rrset_t *rrset, const scanner_t *scanner)
 	dbg_zp_detail("zp: add_rdata_to_rr: Adding type %d, RRSet has %d RRs.\n",
 	              rrset->type, rrset->rdata_count);
 	
-	uint8_t *rdata = malloc(calculate_item_size(rrset, scanner));
-	assert(rdata);
+	size_t rdlen = calculate_item_size(rrset, scanner);
 	size_t offset = 0;
+	uint8_t *rdata = knot_rrset_create_rdata(rrset, rdlen);
+	if (rdata == NULL) {
+		dbg_zp("zp: create_rdata: Could not create RR. Reason: %s.\n",
+		       knot_strerror(ret));
+		return KNOT_ENOMEM;
+	}
 	
 	for (int i = 0; desc->block_types[i] != KNOT_RDATA_WF_END; i++) {
 		int item = desc->block_types[i];
@@ -326,16 +331,6 @@ dbg_zp_exec_detail(
 		}
 	}
 	
-	int ret = knot_rrset_add_rdata(rrset, rdata, offset);
-	if (ret != KNOT_EOK) {
-		dbg_zp("zp: add_rdat_to_rr: Could not add RR. Reason: %s.\n",
-		       knot_strerror(ret));
-		return ret;
-	}
-	
-	/* RDATA are safely added to RRSet now. */
-	free(rdata);
-	
 	return KNOT_EOK;
 }
 
-- 
GitLab