]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
networkctl: use TABLE_STRV
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 14 Jan 2020 09:29:52 +0000 (18:29 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 15 Jan 2020 02:52:40 +0000 (11:52 +0900)
src/network/networkctl.c

index 631b12cf51a9d1833999d2914f48d766fb781fdb..160ed114a4285b63b5e43f029d215507d593632c 100644 (file)
@@ -711,29 +711,41 @@ static int get_gateway_description(
         return -ENODATA;
 }
 
+static int dump_list(Table *table, const char *prefix, char * const *l) {
+        int r;
+
+        if (strv_isempty(l))
+                return 0;
+
+        r = table_add_many(table,
+                           TABLE_EMPTY,
+                           TABLE_STRING, prefix,
+                           TABLE_STRV, l);
+        if (r < 0)
+                return table_log_add_error(r);
+
+        return 0;
+}
+
 static int dump_gateways(
                 sd_netlink *rtnl,
                 sd_hwdb *hwdb,
                 Table *table,
                 int ifindex) {
         _cleanup_free_ struct local_address *local = NULL;
+        _cleanup_strv_free_ char **buf = NULL;
         int r, n, i;
 
         assert(rtnl);
         assert(table);
 
         n = local_gateways(rtnl, ifindex, AF_UNSPEC, &local);
-        if (n < 0)
+        if (n <= 0)
                 return n;
 
         for (i = 0; i < n; i++) {
                 _cleanup_free_ char *gateway = NULL, *description = NULL, *with_description = NULL;
-
-                r = table_add_many(table,
-                                   TABLE_EMPTY,
-                                   TABLE_STRING, i == 0 ? "Gateway:" : "");
-                if (r < 0)
-                        return table_log_add_error(r);
+                char name[IF_NAMESIZE+1];
 
                 r = in_addr_to_string(local[i].family, &local[i].address, &gateway);
                 if (r < 0)
@@ -741,28 +753,24 @@ static int dump_gateways(
 
                 r = get_gateway_description(rtnl, hwdb, local[i].ifindex, local[i].family, &local[i].address, &description);
                 if (r < 0)
-                        log_debug_errno(r, "Could not get description of gateway: %m");
+                        log_debug_errno(r, "Could not get description of gateway, ignoring: %m");
 
                 if (description) {
                         with_description = strjoin(gateway, " (", description, ")");
                         if (!with_description)
-                                return -ENOMEM;
+                                return log_oom();
                 }
 
-                /* Show interface name for the entry if we show
-                 * entries for all interfaces */
-                if (ifindex <= 0) {
-                        char name[IF_NAMESIZE+1];
-
-                        r = table_add_cell_stringf(table, NULL, "%s on %s", with_description ?: gateway,
-                                                   format_ifname_full(local[i].ifindex, name, FORMAT_IFNAME_IFINDEX_WITH_PERCENT));
-                } else
-                        r = table_add_cell(table, NULL, TABLE_STRING, with_description ?: gateway);
+                /* Show interface name for the entry if we show entries for all interfaces */
+                r = strv_extendf(&buf, "%s%s%s",
+                                 with_description ?: gateway,
+                                 ifindex <= 0 ? " on " : "",
+                                 ifindex <= 0 ? format_ifname_full(local[i].ifindex, name, FORMAT_IFNAME_IFINDEX_WITH_PERCENT) : "");
                 if (r < 0)
-                        return table_log_add_error(r);
+                        return log_oom();
         }
 
-        return 0;
+        return dump_list(table, "Gateway:", buf);
 }
 
 static int dump_addresses(
@@ -772,25 +780,21 @@ static int dump_addresses(
 
         _cleanup_free_ struct local_address *local = NULL;
         _cleanup_free_ char *dhcp4_address = NULL;
+        _cleanup_strv_free_ char **buf = NULL;
         int r, n, i;
 
         assert(rtnl);
         assert(table);
 
         n = local_addresses(rtnl, ifindex, AF_UNSPEC, &local);
-        if (n < 0)
+        if (n <= 0)
                 return n;
 
         (void) sd_network_link_get_dhcp4_address(ifindex, &dhcp4_address);
 
         for (i = 0; i < n; i++) {
                 _cleanup_free_ char *pretty = NULL;
-
-                r = table_add_many(table,
-                                   TABLE_EMPTY,
-                                   TABLE_STRING, i == 0 ? "Address:" : "");
-                if (r < 0)
-                        return table_log_add_error(r);
+                char name[IF_NAMESIZE+1];
 
                 r = in_addr_to_string(local[i].family, &local[i].address, &pretty);
                 if (r < 0)
@@ -805,18 +809,15 @@ static int dump_addresses(
                                 return log_oom();
                 }
 
-                if (ifindex <= 0) {
-                        char name[IF_NAMESIZE+1];
-
-                        r = table_add_cell_stringf(table, NULL, "%s on %s", pretty,
-                                                   format_ifname_full(local[i].ifindex, name, FORMAT_IFNAME_IFINDEX_WITH_PERCENT));
-                } else
-                        r = table_add_cell(table, NULL, TABLE_STRING, pretty);
+                r = strv_extendf(&buf, "%s%s%s",
+                                 pretty,
+                                 ifindex <= 0 ? " on " : "",
+                                 ifindex <= 0 ? format_ifname_full(local[i].ifindex, name, FORMAT_IFNAME_IFINDEX_WITH_PERCENT) : "");
                 if (r < 0)
-                        return table_log_add_error(r);
+                        return log_oom();
         }
 
-        return 0;
+        return dump_list(table, "Address:", buf);
 }
 
 static int dump_address_labels(sd_netlink *rtnl) {
@@ -966,8 +967,9 @@ static int next_lldp_neighbor(FILE *f, sd_lldp_neighbor **ret) {
 }
 
 static int dump_lldp_neighbors(Table *table, const char *prefix, int ifindex) {
+        _cleanup_strv_free_ char **buf = NULL;
         _cleanup_fclose_ FILE *f = NULL;
-        int r, c = 0;
+        int r;
 
         assert(table);
         assert(prefix);
@@ -989,29 +991,21 @@ static int dump_lldp_neighbors(Table *table, const char *prefix, int ifindex) {
                 if (r == 0)
                         break;
 
-                r = table_add_many(table,
-                                   TABLE_EMPTY,
-                                   TABLE_STRING, c == 0 ? prefix : "");
-                if (r < 0)
-                        return table_log_add_error(r);
-
                 (void) sd_lldp_neighbor_get_system_name(n, &system_name);
                 (void) sd_lldp_neighbor_get_port_id_as_string(n, &port_id);
                 (void) sd_lldp_neighbor_get_port_description(n, &port_description);
 
-                r = table_add_cell_stringf(table, NULL,
-                                           "%s on port %s%s%s%s",
-                                           strna(system_name), strna(port_id),
-                                           isempty(port_description) ? "" : " (",
-                                           strempty(port_description),
-                                           isempty(port_description) ? "" : ")");
+                r = strv_extendf(&buf, "%s on port %s%s%s%s",
+                                 strna(system_name),
+                                 strna(port_id),
+                                 isempty(port_description) ? "" : " (",
+                                 strempty(port_description),
+                                 isempty(port_description) ? "" : ")");
                 if (r < 0)
-                        return table_log_add_error(r);
-
-                c++;
+                        return log_oom();
         }
 
-        return c;
+        return dump_list(table, prefix, buf);
 }
 
 static int dump_ifindexes(Table *table, const char *prefix, const int *ifindexes) {
@@ -1035,25 +1029,6 @@ static int dump_ifindexes(Table *table, const char *prefix, const int *ifindexes
         return 0;
 }
 
-static int dump_list(Table *table, const char *prefix, char **l) {
-        char **i;
-        int r;
-
-        if (strv_isempty(l))
-                return 0;
-
-        STRV_FOREACH(i, l) {
-                r = table_add_many(table,
-                                   TABLE_EMPTY,
-                                   TABLE_STRING, i == l ? prefix : "",
-                                   TABLE_STRING, *i);
-                if (r < 0)
-                        return table_log_add_error(r);
-        }
-
-        return 0;
-}
-
 #define DUMP_STATS_ONE(name, val_name)                                  \
         r = table_add_many(table,                                       \
                            TABLE_EMPTY,                                 \
@@ -1166,7 +1141,6 @@ static int link_status_one(
         _cleanup_free_ int *carrier_bound_to = NULL, *carrier_bound_by = NULL;
         _cleanup_(table_unrefp) Table *table = NULL;
         TableCell *cell;
-        char **p;
         int r;
 
         assert(rtnl);
@@ -1251,20 +1225,9 @@ static int link_status_one(
         if (r < 0)
                 return table_log_add_error(r);
 
-        STRV_FOREACH(p, info->alternative_names) {
-                if (p == info->alternative_names)
-                        r = table_add_many(table,
-                                           TABLE_EMPTY,
-                                           TABLE_STRING, "Alternative Names:",
-                                           TABLE_STRING, *p);
-                else
-                        r = table_add_many(table,
-                                           TABLE_EMPTY,
-                                           TABLE_EMPTY,
-                                           TABLE_STRING, *p);
-                if (r < 0)
-                        return table_log_add_error(r);
-        }
+        r = dump_list(table, "Alternative Names:", info->alternative_names);
+        if (r < 0)
+                return r;
 
         if (path) {
                 r = table_add_many(table,