int kr_zonecut_add(struct kr_zonecut *, const knot_dname_t *, const knot_rdata_t *);
_Bool kr_zonecut_is_empty(struct kr_zonecut *);
void kr_zonecut_set(struct kr_zonecut *, const knot_dname_t *);
+const knot_dname_t *kr_zonecut_find_nsname(struct kr_zonecut *);
uint64_t kr_now();
void lru_free_items_impl(struct lru *);
struct lru *lru_create_impl(unsigned int, knot_mm_t *, knot_mm_t *);
kr_zonecut_add
kr_zonecut_is_empty
kr_zonecut_set
+ kr_zonecut_find_nsname
kr_now
lru_free_items_impl
lru_create_impl
ns->score = scores[0];
ns->reputation = 0;
return kr_ok();
-}
+}
\ No newline at end of file
mm_free(cut->pool, qname);
return kr_error(ENOENT);
}
+
+static int select_first_ns(const char *k, void *v, void *baton)
+{
+ assert(baton);
+ *((const knot_dname_t **)baton) = (const knot_dname_t *)k;
+ return 1;
+}
+
+const knot_dname_t *kr_zonecut_find_nsname(struct kr_zonecut *cut)
+{
+ if (!cut) {
+ return NULL;
+ }
+
+ const knot_dname_t *result = NULL;
+ map_walk(&cut->nsset, select_first_ns, &result);
+ return result;
+}
\ No newline at end of file
KR_EXPORT
bool kr_zonecut_is_empty(struct kr_zonecut *cut);
+/**
+ * Return first NS name in the zone cut.
+ * @param cut zone cut used
+ * @return name or NULL if empty
+ */
+KR_EXPORT
+const knot_dname_t *kr_zonecut_find_nsname(struct kr_zonecut *cut);