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:
Lennart Poettering 2017-02-13 17:23:58 +01:00
parent 3401419bb8
commit 7026a775e6

View file

@ -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: ");