]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolvectl: simplify map_{link,global}_domains() 8868/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 3 May 2018 08:10:02 +0000 (17:10 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 3 May 2018 08:10:15 +0000 (17:10 +0900)
src/resolve/resolvectl.c

index 32e4fc972c76b6185dff8849c7988c13c0fe4e99..10c8fb5fb67cb69162a70375218f9d0598e0ad1f 100644 (file)
@@ -1273,6 +1273,39 @@ static int map_link_current_dns_server(sd_bus *bus, const char *member, sd_bus_m
         return read_dns_server_one(m, false, userdata);
 }
 
+static int read_domain_one(sd_bus_message *m, bool with_ifindex, char **ret) {
+        _cleanup_free_ char *str = NULL;
+        int ifindex, route_only, r;
+        const char *domain;
+
+        assert(m);
+        assert(ret);
+
+        if (with_ifindex)
+                r = sd_bus_message_read(m, "(isb)", &ifindex, &domain, &route_only);
+        else
+                r = sd_bus_message_read(m, "(sb)", &domain, &route_only);
+        if (r <= 0)
+                return r;
+
+        if (with_ifindex && ifindex != 0) {
+                /* only show the global ones here */
+                *ret = NULL;
+                return 1;
+        }
+
+        if (route_only)
+                str = strappend("~", domain);
+        else
+                str = strdup(domain);
+        if (!str)
+                return -ENOMEM;
+
+        *ret = TAKE_PTR(str);
+
+        return 1;
+}
+
 static int map_link_domains(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata) {
         char ***l = userdata;
         int r;
@@ -1287,22 +1320,16 @@ static int map_link_domains(sd_bus *bus, const char *member, sd_bus_message *m,
                 return r;
 
         for (;;) {
-                const char *domain;
-                int route_only;
-                char *pretty;
+                char *pretty = NULL;
 
-                r = sd_bus_message_read(m, "(sb)", &domain, &route_only);
+                r = read_domain_one(m, false, &pretty);
                 if (r < 0)
                         return r;
                 if (r == 0)
                         break;
 
-                if (route_only)
-                        pretty = strappend("~", domain);
-                else
-                        pretty = strdup(domain);
-                if (!pretty)
-                        return -ENOMEM;
+                if (isempty(pretty))
+                        continue;
 
                 r = strv_consume(l, pretty);
                 if (r < 0)
@@ -1554,26 +1581,17 @@ static int map_global_domains(sd_bus *bus, const char *member, sd_bus_message *m
                 return r;
 
         for (;;) {
-                const char *domain;
-                int route_only, ifindex;
-                char *pretty;
+                char *pretty = NULL;
 
-                r = sd_bus_message_read(m, "(isb)", &ifindex, &domain, &route_only);
+                r = read_domain_one(m, true, &pretty);
                 if (r < 0)
                         return r;
                 if (r == 0)
                         break;
 
-                if (ifindex != 0) /* only show the global ones here */
+                if (isempty(pretty))
                         continue;
 
-                if (route_only)
-                        pretty = strappend("~", domain);
-                else
-                        pretty = strdup(domain);
-                if (!pretty)
-                        return -ENOMEM;
-
                 r = strv_consume(l, pretty);
                 if (r < 0)
                         return r;