From: Yu Watanabe Date: Sat, 2 Mar 2019 15:33:28 +0000 (+0900) Subject: systemctl: show SuccessExitStatus= and friends X-Git-Tag: v242-rc1~203^2~11 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4a22071201127f6da5d0913cd5a4471a64d52b96;p=thirdparty%2Fsystemd.git systemctl: show SuccessExitStatus= and friends --- diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 984dd4deaa3..52061f36fde 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;