From: Vladimír Čunát Date: Thu, 25 Jan 2018 08:32:11 +0000 (+0100) Subject: Merge master into cache-aggr-wip X-Git-Tag: v2.0.0~6^2~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=41d3c63449e6522f2b08c4085008b26f6111c646;p=thirdparty%2Fknot-resolver.git Merge master into cache-aggr-wip ... to start fixing conflicts with changes in logging --- 41d3c63449e6522f2b08c4085008b26f6111c646 diff --cc lib/resolve.c index 712c1979d,d068cfc39..e3d68be10 --- a/lib/resolve.c +++ b/lib/resolve.c @@@ -723,9 -717,10 +723,11 @@@ int kr_resolve_begin(struct kr_request array_init(request->additional); array_init(request->answ_selected); array_init(request->auth_selected); + array_init(request->add_selected); request->answ_validated = false; request->auth_validated = false; + request->trace_log = NULL; + request->trace_finish = NULL; /* Expect first query */ kr_rplan_init(&request->rplan, request, &request->pool); diff --cc lib/utils.c index 56d27f471,5f61b10c8..97df669e1 --- a/lib/utils.c +++ b/lib/utils.c @@@ -919,44 -926,3 +929,44 @@@ uint64_t kr_now( { return uv_now(uv_default_loop()); } + +int knot_dname_lf2wire(knot_dname_t * const dst, uint8_t len, const uint8_t *lf) +{ + knot_dname_t *d = dst; /* moving "cursor" as we write it out */ + bool ok = d && (len == 0 || lf); + if (!ok) { + assert(false); + return kr_error(EINVAL); + } + /* we allow the final zero byte to be omitted */ + if (!len) { + goto finish; + } + if (lf[len - 1]) { + ++len; + } + /* convert the name, one label at a time */ + int label_end = len - 1; /* index of the zero byte after the current label */ + while (label_end >= 0) { + /* find label_start */ + int i = label_end - 1; + while (i >= 0 && lf[i]) + --i; + const int label_start = i + 1; /* index of the first byte of the current label */ + const int label_len = label_end - label_start; + assert(label_len >= 0); + if (label_len > 63 || label_len <= 0) + return kr_error(EILSEQ); + /* write the label */ + *d = label_len; + ++d; + memcpy(d, lf + label_start, label_len); + d += label_len; + /* next label */ + label_end = label_start - 1; + } +finish: + *d = 0; /* the final zero */ + ++d; + return d - dst; - } ++}