From 419076978c140c86cea02ce41cfec95abba68090 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 8 May 2019 10:55:39 +0200 Subject: [PATCH] resolved: rework a few functions to return early on error The implementation is a bit ugly because we set the output variable twice. But we were already doing this on error, so this is not significantly worse. Doing this allows us to avoid goto's, and the compiler should be able to figure this out and only set once. --- src/resolve/resolved-link.c | 106 +++++++++++++----------------------- 1 file changed, 39 insertions(+), 67 deletions(-) diff --git a/src/resolve/resolved-link.c b/src/resolve/resolved-link.c index 06c2432c0a7..3a549691c8d 100644 --- a/src/resolve/resolved-link.c +++ b/src/resolve/resolved-link.c @@ -337,25 +337,20 @@ static int link_update_llmnr_support(Link *l) { assert(l); + l->llmnr_support = RESOLVE_SUPPORT_YES; /* yes, yes, we set it twice which is ugly */ + r = sd_network_link_get_llmnr(l->ifindex, &b); - if (r == -ENODATA) { - r = 0; - goto clear; - } + if (r == -ENODATA) + return 0; if (r < 0) - goto clear; + return r; - l->llmnr_support = resolve_support_from_string(b); - if (l->llmnr_support < 0) { - r = -EINVAL; - goto clear; - } + r = resolve_support_from_string(b); + if (r < 0) + return r; + l->llmnr_support = r; return 0; - -clear: - l->llmnr_support = RESOLVE_SUPPORT_YES; - return r; } static int link_update_mdns_support(Link *l) { @@ -364,25 +359,20 @@ static int link_update_mdns_support(Link *l) { assert(l); + l->mdns_support = RESOLVE_SUPPORT_NO; + r = sd_network_link_get_mdns(l->ifindex, &b); - if (r == -ENODATA) { - r = 0; - goto clear; - } + if (r == -ENODATA) + return 0; if (r < 0) - goto clear; + return r; - l->mdns_support = resolve_support_from_string(b); - if (l->mdns_support < 0) { - r = -EINVAL; - goto clear; - } + r = resolve_support_from_string(b); + if (r < 0) + return r; + l->mdns_support = r; return 0; - -clear: - l->mdns_support = RESOLVE_SUPPORT_NO; - return r; } void link_set_dns_over_tls_mode(Link *l, DnsOverTlsMode mode) { @@ -404,25 +394,20 @@ static int link_update_dns_over_tls_mode(Link *l) { assert(l); + l->dns_over_tls_mode = _DNS_OVER_TLS_MODE_INVALID; + r = sd_network_link_get_dns_over_tls(l->ifindex, &b); - if (r == -ENODATA) { - r = 0; - goto clear; - } + if (r == -ENODATA) + return 0; if (r < 0) - goto clear; + return r; - l->dns_over_tls_mode = dns_over_tls_mode_from_string(b); - if (l->dns_over_tls_mode < 0) { - r = -EINVAL; - goto clear; - } + r = dns_over_tls_mode_from_string(b); + if (r < 0) + return r; + l->dns_over_tls_mode = r; return 0; - -clear: - l->dns_over_tls_mode = _DNS_OVER_TLS_MODE_INVALID; - return r; } void link_set_dnssec_mode(Link *l, DnssecMode mode) { @@ -458,27 +443,20 @@ static int link_update_dnssec_mode(Link *l) { assert(l); + l->dnssec_mode = _DNSSEC_MODE_INVALID; + r = sd_network_link_get_dnssec(l->ifindex, &m); - if (r == -ENODATA) { - r = 0; - goto clear; - } + if (r == -ENODATA) + return 0; if (r < 0) - goto clear; + return r; mode = dnssec_mode_from_string(m); - if (mode < 0) { - r = -EINVAL; - goto clear; - } + if (mode < 0) + return mode; link_set_dnssec_mode(l, mode); - return 0; - -clear: - l->dnssec_mode = _DNSSEC_MODE_INVALID; - return r; } static int link_update_dnssec_negative_trust_anchors(Link *l) { @@ -488,13 +466,13 @@ static int link_update_dnssec_negative_trust_anchors(Link *l) { assert(l); + l->dnssec_negative_trust_anchors = set_free_free(l->dnssec_negative_trust_anchors); + r = sd_network_link_get_dnssec_negative_trust_anchors(l->ifindex, &ntas); - if (r == -ENODATA) { - r = 0; - goto clear; - } + if (r == -ENODATA) + return r; if (r < 0) - goto clear; + return r; ns = set_new(&dns_name_hash_ops); if (!ns) @@ -504,14 +482,8 @@ static int link_update_dnssec_negative_trust_anchors(Link *l) { if (r < 0) return r; - set_free_free(l->dnssec_negative_trust_anchors); l->dnssec_negative_trust_anchors = TAKE_PTR(ns); - return 0; - -clear: - l->dnssec_negative_trust_anchors = set_free_free(l->dnssec_negative_trust_anchors); - return r; } static int link_update_search_domain_one(Link *l, const char *name, bool route_only) { -- 2.47.3