From 6a4a9377a3e54ac05a3e842b2b6b6c4fb623f98e Mon Sep 17 00:00:00 2001
From: Marek Vavrusa <marek.vavrusa@nic.cz>
Date: Fri, 14 Jun 2013 18:15:15 +0200
Subject: [PATCH] Updated usage of the removed functions.

---
 src/knot/ctl/remote.c                |  4 +--
 src/knot/zone/semantic-check.c       |  6 ++--
 src/libknot/nameserver/name-server.c | 14 +++++----
 src/libknot/packet/response.c        | 42 +++++++++----------------
 src/libknot/sign/key.c               |  2 +-
 src/libknot/util/wire.h              |  2 +-
 src/libknot/zone/zone-contents.c     |  9 +++---
 src/libknot/zone/zone-tree.c         | 47 ----------------------------
 src/utils/common/params.c            |  2 +-
 src/utils/nsupdate/nsupdate_exec.c   |  2 +-
 10 files changed, 36 insertions(+), 94 deletions(-)

diff --git a/src/knot/ctl/remote.c b/src/knot/ctl/remote.c
index f8aadc8eac..ac5440315f 100644
--- a/src/knot/ctl/remote.c
+++ b/src/knot/ctl/remote.c
@@ -772,7 +772,7 @@ knot_rrset_t* remote_build_rr(const char *k, uint16_t t)
 	}
 
 	/* Assert K is FQDN. */
-	knot_dname_t *key = knot_dname_new_from_nonfqdn_str(k, strlen(k), 0);
+	knot_dname_t *key = knot_dname_new_from_str(k, strlen(k), 0);
 	if (!key) {
 		return NULL;
 	}
@@ -820,7 +820,7 @@ int remote_create_ns(knot_rrset_t *rr, const char *d)
 	}
 
 	/* Create dname. */
-	knot_dname_t *dn = knot_dname_new_from_nonfqdn_str(d, strlen(d), NULL);
+	knot_dname_t *dn = knot_dname_new_from_str(d, strlen(d), NULL);
 	if (!dn) {
 		return KNOT_ERROR;
 	}
diff --git a/src/knot/zone/semantic-check.c b/src/knot/zone/semantic-check.c
index 1d3c5c4e0b..24f1973c60 100644
--- a/src/knot/zone/semantic-check.c
+++ b/src/knot/zone/semantic-check.c
@@ -308,7 +308,7 @@ static int check_rrsig_rdata(err_handler_t *handler,
 	/* label number at the 2nd index should be same as owner's */
 	uint8_t labels_rdata = knot_rrset_rdata_rrsig_labels(rrsig, rr_pos);
 
-	int tmp = knot_dname_label_count(knot_rrset_owner(rrset)) -
+	int tmp = knot_dname_wire_labels(knot_rrset_owner(rrset)->name, NULL) -
 		  labels_rdata;
 
 	if (tmp != 0) {
@@ -899,7 +899,9 @@ static int sem_check_node_optional(knot_zone_contents_t *zone,
 					return KNOT_ENOMEM;
 				}
 				
-				knot_dname_left_chop_no_copy(ns_dname);
+				knot_dname_t *old_ns_dname = ns_dname;
+				ns_dname = knot_dname_left_chop(ns_dname);
+				knot_dname_free(&old_ns_dname);
 		
 				if (knot_dname_cat(wildcard,
 				                   ns_dname) == NULL) {
diff --git a/src/libknot/nameserver/name-server.c b/src/libknot/nameserver/name-server.c
index 81d02ee353..198fc2c5d3 100644
--- a/src/libknot/nameserver/name-server.c
+++ b/src/libknot/nameserver/name-server.c
@@ -933,8 +933,8 @@ static int ns_put_authority_soa(const knot_zone_contents_t *zone,
 static knot_dname_t *ns_next_closer(const knot_dname_t *closest_encloser,
                                       const knot_dname_t *name)
 {
-	int ce_labels = knot_dname_label_count(closest_encloser);
-	int qname_labels = knot_dname_label_count(name);
+	int ce_labels = knot_dname_wire_labels(closest_encloser->name, NULL);
+	int qname_labels = knot_dname_wire_labels(name->name, NULL);
 
 	assert(ce_labels < qname_labels);
 
@@ -949,7 +949,9 @@ static knot_dname_t *ns_next_closer(const knot_dname_t *closest_encloser,
 	}
 
 	for (int i = 0; i < (qname_labels - ce_labels - 1); ++i) {
-		knot_dname_left_chop_no_copy(next_closer);
+		knot_dname_t *old_next_closer = next_closer;
+		next_closer = knot_dname_left_chop(next_closer);
+		knot_dname_free(&old_next_closer);
 	}
 
 	return next_closer;
@@ -2011,9 +2013,9 @@ static int ns_dname_is_too_long(const knot_rrset_t *rrset,
                                 const knot_dname_t *qname)
 {
 	// TODO: add function for getting DNAME target
-	if (knot_dname_label_count(qname)
-	        - knot_dname_label_count(knot_rrset_owner(rrset))
-	        + knot_dname_label_count(knot_rrset_rdata_dname_target(rrset))
+	if (knot_dname_wire_labels(qname->name, NULL)
+	        - knot_dname_wire_labels(knot_rrset_owner(rrset)->name, NULL)
+	        + knot_dname_wire_labels(knot_rrset_rdata_dname_target(rrset)->name, NULL)
 	        > KNOT_MAX_DNAME_LENGTH) {
 		return 1;
 	} else {
diff --git a/src/libknot/packet/response.c b/src/libknot/packet/response.c
index 25691d0492..422454ecf8 100644
--- a/src/libknot/packet/response.c
+++ b/src/libknot/packet/response.c
@@ -33,7 +33,8 @@
  *
  * Update current best score.
  */
-static bool knot_response_compr_score(uint8_t *n, uint8_t *p, uint8_t labels,
+static bool knot_response_compr_score(const uint8_t *n, const uint8_t *p,
+                                      uint8_t labels,
                                       uint8_t *wire, knot_compr_ptr_t *match)
 {
 	uint16_t score = 0;
@@ -65,22 +66,6 @@ static bool knot_response_compr_score(uint8_t *n, uint8_t *p, uint8_t labels,
 	return false;
 }
 
-/*!
- * \brief Align name and reference to a common number of suffix labels.
- */
-static uint8_t knot_response_compr_align(uint8_t **name, uint8_t nlabels,
-                                         uint8_t **ref, uint8_t reflabels,
-                                         uint8_t *wire)
-{
-	for (unsigned j = nlabels; j < reflabels; ++j)
-		*ref = knot_wire_next_label(*ref, wire);
-
-	for (unsigned j = reflabels; j < nlabels; ++j)
-		*name = knot_wire_next_label(*name, wire);
-
-	return (nlabels < reflabels) ? nlabels : reflabels;
-}
-
 int knot_response_compress_dname(const knot_dname_t *dname, knot_compr_t *compr,
                                  uint8_t *dst, size_t max)
 {
@@ -90,6 +75,7 @@ int knot_response_compress_dname(const knot_dname_t *dname, knot_compr_t *compr,
 
 	/* Do not compress small dnames. */
 	uint8_t *name = dname->name;
+	unsigned name_labels = knot_dname_wire_labels(name, NULL);
 	if (dname->size <= 2) {
                 if (dname->size > max)
                         return KNOT_ESPACE;
@@ -103,28 +89,28 @@ int knot_response_compress_dname(const knot_dname_t *dname, knot_compr_t *compr,
 	unsigned match_id = 0;
 	knot_compr_ptr_t match = { 0, 0 };
 	for (; i < COMPR_MAXLEN && compr->table[i].off > 0; ++i) {
-		uint8_t *name = dname->name;
-		uint8_t *ref = compr->wire + compr->table[i].off;
-		lbcount = knot_response_compr_align(&name, dname->label_count,
-		                                    &ref, compr->table[i].lbcount,
-		                                    compr->wire);
+		const uint8_t *sample = dname->name;
+		const uint8_t *ref = compr->wire + compr->table[i].off;
+		lbcount = knot_dname_align(&sample, name_labels,
+		                           &ref, compr->table[i].lbcount,
+		                           compr->wire);
 
-		if (knot_response_compr_score(name, ref, lbcount, compr->wire,
+		if (knot_response_compr_score(sample, ref, lbcount, compr->wire,
 		                              &match)) {
 			match_id = i;
-			if (match.lbcount == dname->label_count)
+			if (match.lbcount == name_labels)
 				break; /* Best match, break. */
 		}
 	}
 
 	/* Write non-matching prefix. */
 	unsigned written = 0;
-	for (unsigned j = match.lbcount; j < dname->label_count; ++j) {
+	for (unsigned j = match.lbcount; j < name_labels; ++j) {
 		if (written + *name + 1 > max)
 			return KNOT_ESPACE;
 		memcpy(dst + written, name, *name + 1);
 		written += *name + 1;
-		name = knot_wire_next_label(name, compr->wire);
+		name = (uint8_t *)knot_wire_next_label(name, compr->wire);
 	}
 
 	/* Write out pointer covering suffix. */
@@ -149,7 +135,7 @@ int knot_response_compress_dname(const knot_dname_t *dname, knot_compr_t *compr,
 	}
 
 	/* Do not insert if exceeds bounds or full match. */
-	if (match.lbcount == dname->label_count ||
+	if (match.lbcount == name_labels ||
 	    compr->wire_pos > KNOT_WIRE_PTR_MAX)
 		return written;
 
@@ -163,7 +149,7 @@ int knot_response_compress_dname(const knot_dname_t *dname, knot_compr_t *compr,
 	/* Store in dname table. */
 	if (compr->table[i].off == 0) {
 		compr->table[i].off = (uint16_t)compr->wire_pos;
-		compr->table[i].lbcount = dname->label_count;
+		compr->table[i].lbcount = name_labels;
 	}
 
 	return written;
diff --git a/src/libknot/sign/key.c b/src/libknot/sign/key.c
index d721e642d7..742c5ef2a4 100644
--- a/src/libknot/sign/key.c
+++ b/src/libknot/sign/key.c
@@ -518,7 +518,7 @@ int knot_tsig_create_key(const char *name, int algorithm,
                          const char *b64secret, knot_tsig_key_t *key)
 {
 	knot_dname_t *dname;
-	dname = knot_dname_new_from_nonfqdn_str(name, strlen(name), NULL);
+	dname = knot_dname_new_from_str(name, strlen(name), NULL);
 	if (!dname)
 		return KNOT_ENOMEM;
 
diff --git a/src/libknot/util/wire.h b/src/libknot/util/wire.h
index a1890821b5..80588a689d 100644
--- a/src/libknot/util/wire.h
+++ b/src/libknot/util/wire.h
@@ -955,7 +955,7 @@ static inline uint16_t knot_wire_get_pointer(const uint8_t *pos)
 	return (knot_wire_read_u16(pos) - KNOT_WIRE_PTR_BASE);	// Return offset.
 }
 
-static inline uint8_t *knot_wire_next_label(uint8_t *lp, uint8_t *wire)
+static inline const uint8_t *knot_wire_next_label(const uint8_t *lp, const uint8_t *wire)
 {
 	lp = lp + (lp[0] + sizeof(uint8_t));
 	if (knot_wire_is_pointer(lp)) {
diff --git a/src/libknot/zone/zone-contents.c b/src/libknot/zone/zone-contents.c
index ff1a1d40cf..210dc537b9 100644
--- a/src/libknot/zone/zone-contents.c
+++ b/src/libknot/zone/zone-contents.c
@@ -933,8 +933,7 @@ dbg_zone_exec_detail(
 		knot_dname_left_chop(knot_node_owner(node));
 	if(chopped == NULL) {
 		/* Root domain and root domain only. */
-		assert(node->owner && node->owner->labels &&
-		       node->owner->labels[0] == 0);
+		assert(node->owner && *node->owner->name == '\0');
 		return KNOT_EOK;
 	}
 
@@ -1441,8 +1440,8 @@ dbg_zone_detail("Search function returned %d, node %s (%p) and prev: %s (%p)\n",
 
 		int matched_labels = knot_dname_matched_labels(
 				knot_node_owner((*closest_encloser)), name);
-		while (matched_labels < knot_dname_label_count(
-				knot_node_owner((*closest_encloser)))) {
+		while (matched_labels < knot_dname_wire_labels(
+				knot_node_owner((*closest_encloser))->name, NULL)) {
 			(*closest_encloser) =
 				knot_node_parent((*closest_encloser));
 			assert(*closest_encloser);
@@ -2219,7 +2218,7 @@ static void knot_zc_integrity_check_parent(const knot_node_t *node,
 	// if direct child
 	if (knot_dname_is_subdomain(node_owner, parent_owner)
 	    && knot_dname_matched_labels(node_owner, parent_owner)
-	       == knot_dname_label_count(parent_owner)) {
+	       == knot_dname_wire_labels(parent_owner->name, NULL)) {
 
 		// check the parent pointer
 		const knot_node_t *parent = knot_node_parent(node);
diff --git a/src/libknot/zone/zone-tree.c b/src/libknot/zone/zone-tree.c
index 27cdf5f223..c31c6dc51c 100644
--- a/src/libknot/zone/zone-tree.c
+++ b/src/libknot/zone/zone-tree.c
@@ -27,53 +27,6 @@
 /* Non-API functions                                                          */
 /*----------------------------------------------------------------------------*/
 
-#define DNAME_LFT_MAXLEN 255 /* maximum lookup format length */
-
-/*!
- * \brief Convert domain name from wire to lookup format.
- *
- * Formats names from rightmost label to the leftmost, separated by the lowest
- * possible character (\x00). Sorting such formatted names also gives
- * correct canonical order (for NSEC/NSEC3).
- *
- * Example:
- * Name: lake.example.com. Wire: \x04lake\x07example\x03com\x00
- * Lookup format com\x00example\x00lake\x00
- *
- * Maximum length of such a domain name is DNAME_LFT_MAXLEN characters.
- *
- * \param dst Memory to store converted name into.
- * \param maxlen Maximum memory length.
- * \param src Source domain name.
- *
- * \retval KNOT_EOK if successful
- * \retval KNOT_ESPACE when not enough memory.
- * \retval KNOT_EINVAL on invalid parameters
- */
-static int dname_lf(uint8_t *dst, const knot_dname_t *src, size_t maxlen) {
-	if (src->size > maxlen)
-		return KNOT_ESPACE;
-	*dst = (uint8_t)src->size;
-	/* need to save last \x00 for root dname */
-	if (*dst > 1)
-		*dst -= 1;
-	*++dst = '\0';
-	uint8_t* l = src->name;
-	uint8_t lstack[DNAME_LFT_MAXLEN];
-	uint8_t *sp = lstack;
-	while(*l != 0) { /* build label stack */
-		*sp++ = (l - src->name);
-		l += 1 + *l;
-	}
-	while(sp != lstack) {          /* consume stack */
-		l = src->name + *--sp; /* fetch rightmost label */
-		memcpy(dst, l+1, *l);  /* write label */
-		dst += *l;
-		*dst++ = '\0';         /* label separator */
-	}
-	return KNOT_EOK;
-}
-
 static value_t knot_zone_node_copy(value_t v)
 {
 	return v;
diff --git a/src/utils/common/params.c b/src/utils/common/params.c
index 56dc662132..bbfaac5c46 100644
--- a/src/utils/common/params.c
+++ b/src/utils/common/params.c
@@ -344,7 +344,7 @@ int params_parse_tsig(const char *value, knot_key_params_t *key_params)
 	}
 
 	/* Set key name and secret. */
-	key_params->name = knot_dname_new_from_nonfqdn_str(k, strlen(k), NULL);
+	key_params->name = knot_dname_new_from_str(k, strlen(k), NULL);
 	key_params->secret = strdup(s);
 
 	DBG("%s: parsed name '%s'\n", __func__, k);
diff --git a/src/utils/nsupdate/nsupdate_exec.c b/src/utils/nsupdate/nsupdate_exec.c
index 53f26fe611..479c9629b9 100644
--- a/src/utils/nsupdate/nsupdate_exec.c
+++ b/src/utils/nsupdate/nsupdate_exec.c
@@ -305,7 +305,7 @@ static int pkt_append(nsupdate_params_t *p, int sect)
 	scanner_t *s = p->rrp;
 	if (!p->pkt) {
 		p->pkt = create_empty_packet(MAX_PACKET_SIZE);
-		qname = knot_dname_new_from_nonfqdn_str(p->zone,
+		qname = knot_dname_new_from_str(p->zone,
 		                                        strlen(p->zone),
 		                                        NULL);
 		ret = knot_query_set_question(p->pkt, qname, p->class_num, p->type_num);
-- 
GitLab