From: Luca Boccassi Date: Tue, 26 Oct 2021 21:55:30 +0000 (+0100) Subject: systemctl: pretty-print ExtensionImages property X-Git-Tag: v250-rc1~407^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=60c16c5cf3458199646cbda9dfe7763b6ba8b62f;p=thirdparty%2Fsystemd.git systemctl: pretty-print ExtensionImages property Complex type, so without explicit support 'systemctl show' just prints [unprintable] --- diff --git a/src/systemctl/systemctl-show.c b/src/systemctl/systemctl-show.c index 9e10560f80a..7be2248e991 100644 --- a/src/systemctl/systemctl-show.c +++ b/src/systemctl/systemctl-show.c @@ -1662,6 +1662,62 @@ static int print_property(const char *name, const char *expected_value, sd_bus_m return 1; + } else if (streq(name, "ExtensionImages")) { + _cleanup_free_ char *paths = NULL; + + r = sd_bus_message_enter_container(m, SD_BUS_TYPE_ARRAY, "(sba(ss))"); + if (r < 0) + return bus_log_parse_error(r); + + for (;;) { + _cleanup_free_ char *str = NULL; + const char *source, *partition, *mount_options; + int ignore_enoent; + + r = sd_bus_message_enter_container(m, 'r', "sba(ss)"); + if (r < 0) + return bus_log_parse_error(r); + if (r == 0) + break; + + r = sd_bus_message_read(m, "sb", &source, &ignore_enoent); + if (r < 0) + return bus_log_parse_error(r); + + str = strjoin(ignore_enoent ? "-" : "", source); + if (!str) + return log_oom(); + + r = sd_bus_message_enter_container(m, 'a', "(ss)"); + if (r < 0) + return bus_log_parse_error(r); + + while ((r = sd_bus_message_read(m, "(ss)", &partition, &mount_options)) > 0) + if (!strextend_with_separator(&str, ":", partition, mount_options)) + return log_oom(); + if (r < 0) + return bus_log_parse_error(r); + + if (!strextend_with_separator(&paths, " ", str)) + return log_oom(); + + r = sd_bus_message_exit_container(m); + if (r < 0) + return bus_log_parse_error(r); + + r = sd_bus_message_exit_container(m); + if (r < 0) + return bus_log_parse_error(r); + } + + r = sd_bus_message_exit_container(m); + if (r < 0) + return bus_log_parse_error(r); + + bus_print_property_value(name, expected_value, flags, paths); + + return 1; + } else if (streq(name, "BPFProgram")) { const char *a, *p;