machinectl: tweak address output in "machinectl status"
With this change we'll not show an "Addresses" field for machines that we don't know any addresses for. This changes print_addresses() to never suffix its output with a newline, leaving that to the caller. That's a good idea since depending on who the caller is, different rules apply: if no addresses are found, then the list view still wants a newline, but the status view does not. This also changes the function to return the number of found addresses, which can be used to decide when to add a newline or not.
This commit is contained in:
parent
3401419bb8
commit
7026a775e6
|
@ -327,8 +327,10 @@ static int list_machines(int argc, char *argv[], void *userdata) {
|
|||
(int) max_version_id, strdash_if_empty(machines[j].version_id));
|
||||
|
||||
r = print_addresses(bus, machines[j].name, 0, "", prefix, arg_addrs);
|
||||
if (r == -EOPNOTSUPP)
|
||||
printf("-\n");
|
||||
if (r <= 0) /* error or no addresses defined? */
|
||||
fputs("-\n", stdout);
|
||||
else
|
||||
fputc('\n', stdout);
|
||||
}
|
||||
|
||||
if (arg_legend) {
|
||||
|
@ -520,6 +522,7 @@ static int print_addresses(sd_bus *bus, const char *name, int ifi, const char *p
|
|||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||
_cleanup_free_ char *addresses = NULL;
|
||||
bool truncate = false;
|
||||
unsigned n = 0;
|
||||
int r;
|
||||
|
||||
assert(bus);
|
||||
|
@ -567,7 +570,7 @@ static int print_addresses(sd_bus *bus, const char *name, int ifi, const char *p
|
|||
else
|
||||
strcpy(buf_ifi, "");
|
||||
|
||||
if(!strextend(&addresses, prefix, inet_ntop(family, a, buffer, sizeof(buffer)), buf_ifi, NULL))
|
||||
if (!strextend(&addresses, prefix, inet_ntop(family, a, buffer, sizeof(buffer)), buf_ifi, NULL))
|
||||
return log_oom();
|
||||
} else
|
||||
truncate = true;
|
||||
|
@ -581,6 +584,8 @@ static int print_addresses(sd_bus *bus, const char *name, int ifi, const char *p
|
|||
|
||||
if (n_addr > 0)
|
||||
n_addr -= 1;
|
||||
|
||||
n++;
|
||||
}
|
||||
if (r < 0)
|
||||
return bus_log_parse_error(r);
|
||||
|
@ -589,8 +594,10 @@ static int print_addresses(sd_bus *bus, const char *name, int ifi, const char *p
|
|||
if (r < 0)
|
||||
return bus_log_parse_error(r);
|
||||
|
||||
fprintf(stdout, "%s%s\n", addresses, truncate ? "..." : "");
|
||||
return 0;
|
||||
if (n > 0)
|
||||
fprintf(stdout, "%s%s", addresses, truncate ? "..." : "");
|
||||
|
||||
return (int) n;
|
||||
}
|
||||
|
||||
static int print_os_release(sd_bus *bus, const char *method, const char *name, const char *prefix) {
|
||||
|
@ -738,10 +745,11 @@ static void print_machine_status_info(sd_bus *bus, MachineStatusInfo *i) {
|
|||
fputc('\n', stdout);
|
||||
}
|
||||
|
||||
print_addresses(bus, i->name, ifi,
|
||||
"\t Address: ",
|
||||
"\n\t ",
|
||||
ALL_IP_ADDRESSES);
|
||||
if (print_addresses(bus, i->name, ifi,
|
||||
"\t Address: ",
|
||||
"\n\t ",
|
||||
ALL_IP_ADDRESSES) > 0)
|
||||
fputc('\n', stdout);
|
||||
|
||||
print_os_release(bus, "GetMachineOSRelease", i->name, "\t OS: ");
|
||||
|
||||
|
|
Loading…
Reference in a new issue