From 4a22071201127f6da5d0913cd5a4471a64d52b96 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sun, 3 Mar 2019 00:33:28 +0900 Subject: [PATCH] systemctl: show SuccessExitStatus= and friends --- src/systemctl/systemctl.c | 62 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 984dd4deaa..52061f36fd 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -4784,6 +4784,68 @@ static int print_property(const char *name, const char *expected_value, sd_bus_m bus_print_property_value(name, expected_value, value, ""); return 1; + + } else if (endswith(name, "ExitStatus") && streq(contents, "aiai")) { + const int32_t *status, *signal; + size_t sz_status, sz_signal, i; + + r = sd_bus_message_enter_container(m, 'r', "aiai"); + if (r < 0) + return bus_log_parse_error(r); + + r = sd_bus_message_read_array(m, 'i', (const void **) &status, &sz_status); + if (r < 0) + return bus_log_parse_error(r); + + r = sd_bus_message_read_array(m, 'i', (const void **) &signal, &sz_signal); + 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); + + sz_status /= sizeof(int32_t); + sz_signal /= sizeof(int32_t); + + if (all || sz_status > 0 || sz_signal > 0) { + bool first = true; + + if (!value) { + fputs(name, stdout); + fputc('=', stdout); + } + + for (i = 0; i < sz_status; i++) { + if (status[i] < 0 || status[i] > 255) + continue; + + if (first) + first = false; + else + fputc(' ', stdout); + + printf("%"PRIi32, status[i]); + } + + for (i = 0; i < sz_signal; i++) { + const char *str; + + str = signal_to_string((int) signal[i]); + if (!str) + continue; + + if (first) + first = false; + else + fputc(' ', stdout); + + fputs(str, stdout); + } + + fputc('\n', stdout); + } + return 1; } break;