pid1: add --bus-introspect

This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2020-04-23 23:50:31 +02:00
parent f6e9aa9e45
commit 5c08257b70
3 changed files with 25 additions and 1 deletions

View File

@ -609,6 +609,14 @@ static const BusObjectImplementation manager_log_control_object = {
.vtables = BUS_VTABLES(bus_manager_log_control_vtable),
};
int bus_manager_introspect_implementations(FILE *out, const char *pattern) {
return bus_introspect_implementations(
out,
pattern,
BUS_IMPLEMENTATIONS(&bus_manager_object,
&manager_log_control_object));
}
static int bus_setup_api_vtables(Manager *m, sd_bus *bus) {
int r;

View File

@ -33,3 +33,4 @@ int bus_forward_agent_released(Manager *m, const char *path);
uint64_t manager_bus_n_queued_write(Manager *m);
void dump_bus_properties(FILE *f);
int bus_manager_introspect_implementations(FILE *out, const char *pattern);

View File

@ -93,8 +93,11 @@ static enum {
ACTION_TEST,
ACTION_DUMP_CONFIGURATION_ITEMS,
ACTION_DUMP_BUS_PROPERTIES,
ACTION_BUS_INTROSPECT,
} arg_action = ACTION_RUN;
static const char *arg_bus_introspect = NULL;
/* Those variables are initialized to 0 automatically, so we avoid uninitialized memory access.
* Real defaults are assigned in reset_arguments() below. */
static char *arg_default_unit;
@ -729,6 +732,7 @@ static int parse_argv(int argc, char *argv[]) {
ARG_VERSION,
ARG_DUMP_CONFIGURATION_ITEMS,
ARG_DUMP_BUS_PROPERTIES,
ARG_BUS_INTROSPECT,
ARG_DUMP_CORE,
ARG_CRASH_CHVT,
ARG_CRASH_SHELL,
@ -758,6 +762,7 @@ static int parse_argv(int argc, char *argv[]) {
{ "version", no_argument, NULL, ARG_VERSION },
{ "dump-configuration-items", no_argument, NULL, ARG_DUMP_CONFIGURATION_ITEMS },
{ "dump-bus-properties", no_argument, NULL, ARG_DUMP_BUS_PROPERTIES },
{ "bus-introspect", required_argument, NULL, ARG_BUS_INTROSPECT },
{ "dump-core", optional_argument, NULL, ARG_DUMP_CORE },
{ "crash-chvt", required_argument, NULL, ARG_CRASH_CHVT },
{ "crash-shell", optional_argument, NULL, ARG_CRASH_SHELL },
@ -885,6 +890,11 @@ static int parse_argv(int argc, char *argv[]) {
arg_action = ACTION_DUMP_BUS_PROPERTIES;
break;
case ARG_BUS_INTROSPECT:
arg_bus_introspect = optarg;
arg_action = ACTION_BUS_INTROSPECT;
break;
case ARG_DUMP_CORE:
if (!optarg)
arg_dump_core = true;
@ -1044,6 +1054,7 @@ static int help(void) {
" --no-pager Do not pipe output into a pager\n"
" --dump-configuration-items Dump understood unit configuration items\n"
" --dump-bus-properties Dump exposed bus properties\n"
" --bus-introspect=PATH Write XML introspection data\n"
" --unit=UNIT Set default unit\n"
" --dump-core[=BOOL] Dump core on crash\n"
" --crash-vt=NR Change to specified VT on crash\n"
@ -2615,7 +2626,7 @@ int main(int argc, char *argv[]) {
if (r < 0)
goto finish;
if (IN_SET(arg_action, ACTION_TEST, ACTION_HELP, ACTION_DUMP_CONFIGURATION_ITEMS, ACTION_DUMP_BUS_PROPERTIES))
if (IN_SET(arg_action, ACTION_TEST, ACTION_HELP, ACTION_DUMP_CONFIGURATION_ITEMS, ACTION_DUMP_BUS_PROPERTIES, ACTION_BUS_INTROSPECT))
(void) pager_open(arg_pager_flags);
if (arg_action != ACTION_RUN)
@ -2635,6 +2646,10 @@ int main(int argc, char *argv[]) {
dump_bus_properties(stdout);
retval = EXIT_SUCCESS;
goto finish;
} else if (arg_action == ACTION_BUS_INTROSPECT) {
r = bus_manager_introspect_implementations(stdout, arg_bus_introspect);
retval = r >= 0 ? EXIT_SUCCESS : EXIT_FAILURE;
goto finish;
}
assert_se(IN_SET(arg_action, ACTION_RUN, ACTION_TEST));