diff --git a/src/udev/udevadm-control.c b/src/udev/udevadm-control.c index 54bf1a003b..d1c0ac4e6d 100644 --- a/src/udev/udevadm-control.c +++ b/src/udev/udevadm-control.c @@ -2,9 +2,9 @@ #include +#include "sd-json.h" + #include "creds-util.h" -#include "format-table.h" -#include "help-util.h" #include "log.h" #include "options.h" #include "parse-argument.h" @@ -16,6 +16,7 @@ #include "udev-varlink.h" #include "udevadm.h" #include "varlink-util.h" +#include "verbs.h" #include "virt.h" static char **arg_env = NULL; @@ -45,25 +46,6 @@ static bool arg_has_control_commands(void) { arg_revert; } -static int help(void) { - _cleanup_(table_unrefp) Table *options = NULL; - int r; - - r = option_parser_get_help_table_ns("udevadm-control", &options); - if (r < 0) - return r; - - help_cmdline("control OPTION"); - help_abstract("Control the udev daemon."); - help_section("Options"); - r = table_print_or_warn(options); - if (r < 0) - return r; - - help_man_page_reference("udevadm", "8"); - return 0; -} - static int parse_argv(int argc, char *argv[]) { int r; @@ -78,7 +60,7 @@ static int parse_argv(int argc, char *argv[]) { OPTION_NAMESPACE("udevadm-control"): {} OPTION_COMMON_HELP: - return help(); + return command_print_verb_help("control"); OPTION('V', "version", NULL, "Show package version"): return print_version(); @@ -155,6 +137,9 @@ static int parse_argv(int argc, char *argv[]) { OPTION_LONG("load-credentials", NULL, "Load udev rules from credentials"): arg_load_credentials = true; break; + + OPTION_COMMON_INTROSPECT_CLI: + return introspect_cli(SD_JSON_FORMAT_OFF); } if (!arg_has_control_commands() && !arg_load_credentials) diff --git a/src/udev/udevadm.c b/src/udev/udevadm.c index 24b4ff6cd4..50bfd783e6 100644 --- a/src/udev/udevadm.c +++ b/src/udev/udevadm.c @@ -26,21 +26,21 @@ COMMAND( * subcommand parses its own options from the "udevadm-" namespace, see udevadm-*.c. */ VERB_COMMON_HELP_AUTO_PROGRAM("udevadm"); -#define UDEVADM_VERB(fn, name, args, help) \ - VERB_SCOPE_NS(, fn, name, "udevadm-" name, args, VERB_ANY, VERB_ANY, 0, help) +#define UDEVADM_VERB(fn, name, args, flags, help, footer) \ + VERB_SCOPE_NS_FULL(, fn, name, "udevadm-" name, args, VERB_ANY, VERB_ANY, flags, /* dat= */ 0, help, footer) -UDEVADM_VERB(verb_info_main, "info", "[DEVPATH|FILE]\0", "Query sysfs or the udev database"); -UDEVADM_VERB(verb_trigger_main, "trigger", "DEVPATH\0", "Request events from the kernel"); -UDEVADM_VERB(verb_settle_main, "settle", NULL, "Wait for pending udev events"); -UDEVADM_VERB(verb_control_main, "control", "OPTION\0", "Control the udev daemon"); -UDEVADM_VERB(verb_monitor_main, "monitor", NULL, "Listen to kernel and udev events"); -UDEVADM_VERB(verb_test_main, "test", "DEVPATH\0", "Test an event run"); -UDEVADM_VERB(verb_builtin_main, "test-builtin", "COMMAND DEVPATH\0", "Test a built-in command"); -UDEVADM_VERB(verb_verify_main, "verify", "[FILE…]\0", "Verify udev rules files"); -UDEVADM_VERB(verb_cat_main, "cat", "[FILE…]\0", "Show udev rules files"); -UDEVADM_VERB(verb_wait_main, "wait", "DEVICE [DEVICE…]\0", "Wait for device or device symlink"); -UDEVADM_VERB(verb_lock_main, "lock", "COMMAND\0", "Lock a block device"); -UDEVADM_VERB(verb_hwdb_main, "hwdb", NULL, /* help= */ NULL); /* deprecated */ +UDEVADM_VERB(verb_info_main, "info", "[DEVPATH|FILE]\0", 0, "Query sysfs or the udev database", NULL); +UDEVADM_VERB(verb_trigger_main, "trigger", "DEVPATH\0", 0, "Request events from the kernel", NULL); +UDEVADM_VERB(verb_settle_main, "settle", NULL, 0, "Wait for pending udev events", NULL); +UDEVADM_VERB(verb_control_main, "control", NULL, VERB_OPTION_REQUIRED, "Control the udev daemon", NULL); +UDEVADM_VERB(verb_monitor_main, "monitor", NULL, 0, "Listen to kernel and udev events", NULL); +UDEVADM_VERB(verb_test_main, "test", "DEVPATH\0", 0, "Test an event run", NULL); +UDEVADM_VERB(verb_builtin_main, "test-builtin", "COMMAND DEVPATH\0", 0, "Test a built-in command", NULL); +UDEVADM_VERB(verb_verify_main, "verify", "[FILE…]\0", 0, "Verify udev rules files", NULL); +UDEVADM_VERB(verb_cat_main, "cat", "[FILE…]\0", 0, "Show udev rules files", NULL); +UDEVADM_VERB(verb_wait_main, "wait", "DEVICE [DEVICE…]\0", 0, "Wait for device or device symlink", NULL); +UDEVADM_VERB(verb_lock_main, "lock", "COMMAND", 0, "Lock a block device", NULL); +UDEVADM_VERB(verb_hwdb_main, "hwdb", NULL, 0, /* help= */ NULL, NULL); /* deprecated */ VERB_NOARG(verb_version_main, "version", /* help= */ NULL); static int verb_version_main(int argc, char *argv[], uintptr_t _data, void *userdata) {