]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: rework a few functions to return early on error
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 8 May 2019 08:55:39 +0000 (10:55 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 10 Feb 2021 13:47:00 +0000 (14:47 +0100)
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

index 06c2432c0a797ddc4e02cdc4a0934e5db2e2025d..3a549691c8dd1f77d3fd002f2be5c45db24e37b2 100644 (file)
@@ -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) {