udevadm,..: make --help output of udev tools more like the output of the various other tools

This commit is contained in:
Lennart Poettering 2015-01-05 13:19:55 +01:00
parent 00b4ffdecb
commit 5ac0162c3a
25 changed files with 172 additions and 131 deletions

View File

@ -3778,7 +3778,8 @@ v4l_id_SOURCES = \
src/udev/v4l_id/v4l_id.c
v4l_id_LDADD = \
libudev-internal.la
libudev-internal.la \
libsystemd-shared.la
udevlibexec_PROGRAMS += \
v4l_id

View File

@ -195,11 +195,13 @@ static void test_orientation(struct udev *udev,
puts(text);
}
static void help(void)
{
printf("Usage: accelerometer [options] <device path>\n"
" -d,--debug debug to stderr\n"
" -h,--help print this help text\n\n");
static void help(void) {
printf("%s [options] <device path>\n\n"
"Accelerometer device identification.\n\n"
" -h --help Print this message\n"
" -d --debug Debug to stderr\n"
, program_invocation_short_name);
}
int main (int argc, char** argv)

View File

@ -68,17 +68,19 @@ noreturn static void sig_alrm(int signo)
static void usage(void)
{
printf("Usage: collect [options] <checkpoint> <id> <idlist>\n"
" -a,--add add ID <id> to the list <idlist>\n"
" -r,--remove remove ID <id> from the list <idlist>\n"
" -d,--debug debug to stderr\n"
" -h,--help print this help text\n\n"
printf("%s [options] <checkpoint> <id> <idlist>\n\n"
"Collect variables across events.\n\n"
" -h --help Print this message\n"
" -a --add Add ID <id> to the list <idlist>\n"
" -r --remove Remove ID <id> from the list <idlist>\n"
" -d --debug Debug to stderr\n\n"
" Adds ID <id> to the list governed by <checkpoint>.\n"
" <id> must be part of the list <idlist>.\n"
" If all IDs given by <idlist> are listed (ie collect has been\n"
" invoked for each ID in <idlist>) collect returns 0, the\n"
" number of missing IDs otherwise.\n"
" On error a negative number is returned.\n\n");
" On error a negative number is returned.\n\n"
, program_invocation_short_name);
}
/*

View File

@ -304,18 +304,20 @@ static int get_file_options(struct udev *udev,
}
static void help(void) {
printf("Usage: scsi_id [OPTION...] DEVICE\n"
" -d,--device= device node for SG_IO commands\n"
" -f,--config= location of config file\n"
" -p,--page=0x80|0x83|pre-spc3-83 SCSI page (0x80, 0x83, pre-spc3-83)\n"
" -s,--sg-version=3|4 use SGv3 or SGv4\n"
" -b,--blacklisted treat device as blacklisted\n"
" -g,--whitelisted treat device as whitelisted\n"
" -u,--replace-whitespace replace all whitespace by underscores\n"
" -v,--verbose verbose logging\n"
" -V,--version print version\n"
" -x,--export print values as environment keys\n"
" -h,--help print this help text\n\n");
printf("Usage: %s [OPTION...] DEVICE\n\n"
"SCSI device identification.\n\n"
" -h --help Print this message\n"
" --version Print version of the program\n\n"
" -d --device= Device node for SG_IO commands\n"
" -f --config= Location of config file\n"
" -p --page=0x80|0x83|pre-spc3-83 SCSI page (0x80, 0x83, pre-spc3-83)\n"
" -s --sg-version=3|4 Use SGv3 or SGv4\n"
" -b --blacklisted Treat device as blacklisted\n"
" -g --whitelisted Treat device as whitelisted\n"
" -u --replace-whitespace Replace all whitespace by underscores\n"
" -v --verbose Verbose logging\n"
" -x --export Print values as environment keys\n"
, program_invocation_short_name);
}
@ -606,7 +608,7 @@ int main(int argc, char **argv)
exit(1);
if (!dev_specified) {
log_error("no device specified");
log_error("No device specified.");
retval = 1;
goto exit;
}

View File

@ -325,6 +325,6 @@ out:
const struct udev_builtin udev_builtin_blkid = {
.name = "blkid",
.cmd = builtin_blkid,
.help = "filesystem and partition probing",
.help = "Filesystem and partition probing",
.run_once = true,
};

View File

@ -216,5 +216,5 @@ const struct udev_builtin udev_builtin_hwdb = {
.init = builtin_hwdb_init,
.exit = builtin_hwdb_exit,
.validate = builtin_hwdb_validate,
.help = "hardware database",
.help = "Hardware database",
};

View File

@ -222,5 +222,5 @@ static int builtin_input_id(struct udev_device *dev, int argc, char *argv[], boo
const struct udev_builtin udev_builtin_input_id = {
.name = "input_id",
.cmd = builtin_input_id,
.help = "input device properties",
.help = "Input device properties",
};

View File

@ -165,5 +165,5 @@ static int builtin_keyboard(struct udev_device *dev, int argc, char *argv[], boo
const struct udev_builtin udev_builtin_keyboard = {
.name = "keyboard",
.cmd = builtin_keyboard,
.help = "keyboard scan code to key mapping",
.help = "Keyboard scan code to key mapping",
};

View File

@ -122,6 +122,6 @@ const struct udev_builtin udev_builtin_kmod = {
.init = builtin_kmod_init,
.exit = builtin_kmod_exit,
.validate = builtin_kmod_validate,
.help = "kernel module loader",
.help = "Kernel module loader",
.run_once = false,
};

View File

@ -562,5 +562,5 @@ out:
const struct udev_builtin udev_builtin_net_id = {
.name = "net_id",
.cmd = builtin_net_id,
.help = "network device properties",
.help = "Network device properties",
};

View File

@ -103,6 +103,6 @@ const struct udev_builtin udev_builtin_net_setup_link = {
.init = builtin_net_setup_link_init,
.exit = builtin_net_setup_link_exit,
.validate = builtin_net_setup_link_validate,
.help = "configure network link",
.help = "Configure network link",
.run_once = false,
};

View File

@ -703,6 +703,6 @@ out:
const struct udev_builtin udev_builtin_path_id = {
.name = "path_id",
.cmd = builtin_path_id,
.help = "compose persistent device path",
.help = "Compose persistent device path",
.run_once = true,
};

View File

@ -89,5 +89,5 @@ finish:
const struct udev_builtin udev_builtin_uaccess = {
.name = "uaccess",
.cmd = builtin_uaccess,
.help = "manage device node user ACL",
.help = "Manage device node user ACL",
};

View File

@ -471,6 +471,6 @@ fallback:
const struct udev_builtin udev_builtin_usb_id = {
.name = "usb_id",
.cmd = builtin_usb_id,
.help = "usb device properties",
.help = "USB device properties",
.run_once = true,
};

View File

@ -88,7 +88,7 @@ void udev_builtin_list(struct udev *udev) {
unsigned int i;
for (i = 0; i < ELEMENTSOF(builtins); i++)
fprintf(stderr, " %-12s %s\n", builtins[i]->name, builtins[i]->help);
fprintf(stderr, " %-14s %s\n", builtins[i]->name, builtins[i]->help);
}
const char *udev_builtin_name(enum udev_builtin_cmd cmd) {

View File

@ -29,16 +29,19 @@
#include "udev-util.h"
static void print_help(void) {
printf("Usage: udevadm control COMMAND\n"
" -e,--exit instruct the daemon to cleanup and exit\n"
" -l,--log-priority=LEVEL set the udev log level for the daemon\n"
" -s,--stop-exec-queue do not execute events, queue only\n"
" -S,--start-exec-queue execute events, flush queue\n"
" -R,--reload reload rules and databases\n"
" -p,--property=KEY=VALUE set a global property for all events\n"
" -m,--children-max=N maximum number of children\n"
" --timeout=SECONDS maximum time to block for a reply\n"
" -h,--help print this help text\n\n");
printf("%s control COMMAND\n\n"
"Control the udev daemon.\n\n"
" -h --help Show this help\n"
" --version Show package version\n"
" -e --exit Instruct the daemon to cleanup and exit\n"
" -l --log-priority=LEVEL Set the udev log level for the daemon\n"
" -s --stop-exec-queue Do not execute events, queue only\n"
" -S --start-exec-queue Execute events, flush queue\n"
" -R --reload Reload rules and databases\n"
" -p --property=KEY=VALUE Set a global property for all events\n"
" -m --children-max=N Maximum number of children\n"
" --timeout=SECONDS Maximum time to block for a reply\n"
, program_invocation_short_name);
}
static int adm_control(struct udev *udev, int argc, char *argv[]) {
@ -161,5 +164,5 @@ static int adm_control(struct udev *udev, int argc, char *argv[]) {
const struct udevadm_cmd udevadm_control = {
.name = "control",
.cmd = adm_control,
.help = "control the udev daemon",
.help = "Control the udev daemon",
};

View File

@ -258,6 +258,31 @@ static void cleanup_db(struct udev *udev) {
}
}
static void help(void) {
printf("%s info [OPTIONS] [DEVPATH|FILE]\n\n"
"Query sysfs or the udev database.\n\n"
" -h --help Print this message\n"
" --version Print version of the program\n"
" -q --query=TYPE Query device information:\n"
" name Name of device node\n"
" symlink Pointing to node\n"
" path sysfs device path\n"
" property The device properties\n"
" all All values\n"
" -p --path=SYSPATH sysfs device path used for query or attribute walk\n"
" -n --name=NAME Node or symlink name used for query or attribute walk\n"
" -r --root Prepend dev directory to path names\n"
" -a --attribute-walk Print all key matches walking along the chain\n"
" of parent devices\n"
" -d --device-id-of-file=FILE Print major:minor of device containing this file\n"
" -x --export Export key/value pairs\n"
" -P --export-prefix Export the key name with a prefix\n"
" -e --export-db Export the content of the udev database\n"
" -c --cleanup-db Clean up the udev database\n"
, program_invocation_short_name);
}
static int uinfo(struct udev *udev, int argc, char *argv[]) {
_cleanup_udev_device_unref_ struct udev_device *device = NULL;
bool root = 0;
@ -283,27 +308,6 @@ static int uinfo(struct udev *udev, int argc, char *argv[]) {
{}
};
static const char *usage =
"Usage: udevadm info [OPTIONS] [DEVPATH|FILE]\n"
" -q,--query=TYPE query device information:\n"
" name name of device node\n"
" symlink pointing to node\n"
" path sys device path\n"
" property the device properties\n"
" all all values\n"
" -p,--path=SYSPATH sys device path used for query or attribute walk\n"
" -n,--name=NAME node or symlink name used for query or attribute walk\n"
" -r,--root prepend dev directory to path names\n"
" -a,--attribute-walk print all key matches walking along the chain\n"
" of parent devices\n"
" -d,--device-id-of-file=FILE print major:minor of device containing this file\n"
" -x,--export export key/value pairs\n"
" -P,--export-prefix export the key name with a prefix\n"
" -e,--export-db export the content of the udev database\n"
" -c,--cleanup-db cleanup the udev database\n"
" --version print version of the program\n"
" -h,--help print this message\n";
enum action_type {
ACTION_QUERY,
ACTION_ATTRIBUTE_WALK,
@ -388,7 +392,7 @@ static int uinfo(struct udev *udev, int argc, char *argv[]) {
printf("%s\n", VERSION);
return 0;
case 'h':
printf("%s\n", usage);
help();
return 0;
default:
return 1;
@ -398,7 +402,7 @@ static int uinfo(struct udev *udev, int argc, char *argv[]) {
case ACTION_QUERY:
if (!device) {
if (!argv[optind]) {
fprintf(stderr, "%s\n", usage);
help();
return 2;
}
device = find_device(udev, argv[optind], NULL);
@ -489,5 +493,5 @@ static int uinfo(struct udev *udev, int argc, char *argv[]) {
const struct udevadm_cmd udevadm_info = {
.name = "info",
.cmd = uinfo,
.help = "query sysfs or the udev database",
.help = "Query sysfs or the udev database",
};

View File

@ -64,13 +64,16 @@ static void print_device(struct udev_device *device, const char *source, int pro
}
static void help(void) {
printf("Usage: udevadm monitor [--property] [--kernel] [--udev] [--help]\n"
" -p,--property print the event properties\n"
" -k,--kernel print kernel uevents\n"
" -u,--udev print udev events\n"
" -s,--subsystem-match=SUBSYSTEM[/DEVTYPE] filter events by subsystem\n"
" -t,--tag-match=TAG filter events by tag\n"
" -h,--help\n\n");
printf("%s monitor [--property] [--kernel] [--udev] [--help]\n\n"
"Listen to kernel and udev events.\n\n"
" -h --help Show this help\n"
" --version Show package version\n"
" -p --property Print the event properties\n"
" -k --kernel Print kernel uevents\n"
" -u --udev Print udev events\n"
" -s --subsystem-match=SUBSYSTEM[/DEVTYPE] Filter events by subsystem\n"
" -t --tag-match=TAG Filter events by tag\n"
, program_invocation_short_name);
}
static int adm_monitor(struct udev *udev, int argc, char *argv[]) {
@ -276,5 +279,5 @@ static int adm_monitor(struct udev *udev, int argc, char *argv[]) {
const struct udevadm_cmd udevadm_monitor = {
.name = "monitor",
.cmd = adm_monitor,
.help = "listen to kernel and udev events",
.help = "Listen to kernel and udev events",
};

View File

@ -37,10 +37,13 @@
#include "util.h"
static void help(void) {
printf("Usage: udevadm settle OPTIONS\n"
" -t,--timeout=<seconds> maximum time to wait for events\n"
" -E,--exit-if-exists=<file> stop waiting if file exists\n"
" -h,--help\n\n");
printf("%s settle OPTIONS\n\n"
"Wait for pending udev events.\n\n"
" -h --help Show this help\n"
" --version Show package version\n"
" -t --timeout=SECONDS Maximum time to wait for events\n"
" -E --exit-if-exists=FILE Stop waiting if file exists\n"
, program_invocation_short_name);
}
static int adm_settle(struct udev *udev, int argc, char *argv[]) {
@ -145,5 +148,5 @@ out:
const struct udevadm_cmd udevadm_settle = {
.name = "settle",
.cmd = adm_settle,
.help = "wait for pending udev events",
.help = "Wait for pending udev events",
};

View File

@ -34,10 +34,14 @@
#include "udev.h"
static void help(struct udev *udev) {
fprintf(stderr, "\n");
fprintf(stderr, "Usage: udevadm builtin [--help] COMMAND SYSPATH\n");
printf("%s builtin [--help] COMMAND SYSPATH\n\n"
"Test a built-in command.\n\n"
" -h --help Print this message\n"
" --version Print version of the program\n\n"
"Commands:\n"
, program_invocation_short_name);
udev_builtin_list(udev);
fprintf(stderr, "\n");
}
static int adm_builtin(struct udev *udev, int argc, char *argv[]) {
@ -112,6 +116,6 @@ out:
const struct udevadm_cmd udevadm_test_builtin = {
.name = "test-builtin",
.cmd = adm_builtin,
.help = "test a built-in command",
.help = "Test a built-in command",
.debug = true,
};

View File

@ -31,6 +31,17 @@
#include "udev.h"
#include "udev-util.h"
static void help(void) {
printf("%s test OPTIONS <syspath>\n\n"
"Test an event run.\n"
" -h --help Show this help\n"
" --version Show package version\n"
" -a --action=ACTION Set action string\n"
" -N --resolve-names=early|late|never When to resolve names\n"
, program_invocation_short_name);
}
static int adm_test(struct udev *udev, int argc, char *argv[]) {
int resolve_names = 1;
char filename[UTIL_PATH_SIZE];
@ -71,11 +82,7 @@ static int adm_test(struct udev *udev, int argc, char *argv[]) {
}
break;
case 'h':
printf("Usage: udevadm test OPTIONS <syspath>\n"
" -a,--action=ACTION set action string\n"
" -N,--resolve-names=early|late|never when to resolve names\n"
" -h,--help print this help string\n"
"\n");
help();
exit(EXIT_SUCCESS);
case '?':
exit(EXIT_FAILURE);
@ -161,6 +168,6 @@ out:
const struct udevadm_cmd udevadm_test = {
.name = "test",
.cmd = adm_test,
.help = "test an event run",
.help = "Test an event run",
.debug = true,
};

View File

@ -73,23 +73,26 @@ static const char *keyval(const char *str, const char **val, char *buf, size_t s
}
static void help(void) {
printf("Usage: udevadm trigger OPTIONS\n"
" -v,--verbose print the list of devices while running\n"
" -n,--dry-run do not actually trigger the events\n"
" -t,--type= type of events to trigger\n"
" devices sys devices (default)\n"
" subsystems sys subsystems and drivers\n"
" -c,--action=<action> event action value, default is \"change\"\n"
" -s,--subsystem-match=<subsystem> trigger devices from a matching subsystem\n"
" -S,--subsystem-nomatch=<subsystem> exclude devices from a matching subsystem\n"
" -a,--attr-match=<file[=<value>]> trigger devices with a matching attribute\n"
" -A,--attr-nomatch=<file[=<value>]> exclude devices with a matching attribute\n"
" -p,--property-match=<key>=<value> trigger devices with a matching property\n"
" -g,--tag-match=<key>=<value> trigger devices with a matching property\n"
" -y,--sysname-match=<name> trigger devices with this /sys path\n"
" --name-match=<name> trigger devices with this /dev name\n"
" -b,--parent-match=<name> trigger devices with that parent device\n"
" -h,--help\n\n");
printf("%s trigger OPTIONS\n\n"
"Request events from the kernel.\n\n"
" -h --help Show this help\n"
" --version Show package version\n"
" -v --verbose Print the list of devices while running\n"
" -n --dry-run Do not actually trigger the events\n"
" -t --type= Type of events to trigger\n"
" devices sysfs devices (default)\n"
" subsystems sysfs subsystems and drivers\n"
" -c --action=ACTION Event action value, default is \"change\"\n"
" -s --subsystem-match=SUBSYSTEM Trigger devices from a matching subsystem\n"
" -S --subsystem-nomatch=SUBSYSTEM Exclude devices from a matching subsystem\n"
" -a --attr-match=FILE[=VALUE] Trigger devices with a matching attribute\n"
" -A --attr-nomatch=FILE[=VALUE] Exclude devices with a matching attribute\n"
" -p --property-match=KEY=VALUE Trigger devices with a matching property\n"
" -g --tag-match=KEY=VALUE Trigger devices with a matching property\n"
" -y --sysname-match=NAME Trigger devices with this /sys path\n"
" --name-match=NAME Trigger devices with this /dev name\n"
" -b --parent-match=NAME Trigger devices with that parent device\n"
, program_invocation_short_name);
}
static int adm_trigger(struct udev *udev, int argc, char *argv[]) {
@ -245,5 +248,5 @@ static int adm_trigger(struct udev *udev, int argc, char *argv[]) {
const struct udevadm_cmd udevadm_trigger = {
.name = "trigger",
.cmd = adm_trigger,
.help = "request events from the kernel",
.help = "Request events from the kernel",
};

View File

@ -60,11 +60,14 @@ static const struct udevadm_cmd *udevadm_cmds[] = {
static int adm_help(struct udev *udev, int argc, char *argv[]) {
unsigned int i;
fprintf(stderr, "Usage: udevadm [--help] [--version] [--debug] COMMAND [COMMAND OPTIONS]\n");
printf("%s [--help] [--version] [--debug] COMMAND [COMMAND OPTIONS]\n\n"
"Send control commands or test the device manager.\n\n"
"Commands:\n"
, program_invocation_short_name);
for (i = 0; i < ELEMENTSOF(udevadm_cmds); i++)
if (udevadm_cmds[i]->help != NULL)
printf(" %-12s %s\n", udevadm_cmds[i]->name, udevadm_cmds[i]->help);
fprintf(stderr, "\n");
printf(" %-12s %s\n", udevadm_cmds[i]->name, udevadm_cmds[i]->help);
return 0;
}

View File

@ -1004,14 +1004,15 @@ static void kernel_cmdline_options(struct udev *udev) {
static void help(void) {
printf("%s [OPTIONS...]\n\n"
"Manages devices.\n\n"
" --daemon\n"
" --debug\n"
" --children-max=<maximum number of workers>\n"
" --exec-delay=<seconds to wait before executing RUN=>\n"
" --event-timeout=<seconds to wait before terminating an event>\n"
" --resolve-names=early|late|never\n"
" --version\n"
" --help\n"
" -h --help Print this message\n"
" --version Print version of the program\n"
" --daemon Detach and run in the background\n"
" --debug Enable debug output\n"
" --children-max=INT Set maximum number of workers\n"
" --exec-delay=SECONDS Seconds to wait before executing RUN=\n"
" --event-timeout=SECONDS Seconds to wait before terminating an event\n"
" --resolve-names=early|late|never\n"
" When to resolve users and groups\n"
, program_invocation_short_name);
}

View File

@ -26,17 +26,18 @@
#include <sys/ioctl.h>
#include <linux/videodev2.h>
int main (int argc, char *argv[])
{
#include "util.h"
int main(int argc, char *argv[]) {
static const struct option options[] = {
{ "help", no_argument, NULL, 'h' },
{}
};
int fd;
_cleanup_close_ int fd = -1;
char *device;
struct v4l2_capability v2cap;
while (1) {
for (;;) {
int option;
option = getopt_long(argc, argv, "h", options, NULL);
@ -45,7 +46,10 @@ int main (int argc, char *argv[])
switch (option) {
case 'h':
printf("Usage: v4l_id [-h,--help] <device file>\n\n");
printf("%s [-h,--help] <device file>\n\n"
"Video4Linux device identification.\n\n"
" -h Print this message\n"
, program_invocation_short_name);
return 0;
default:
return 1;
@ -55,11 +59,11 @@ int main (int argc, char *argv[])
if (device == NULL)
return 2;
fd = open (device, O_RDONLY);
fd = open(device, O_RDONLY);
if (fd < 0)
return 3;
if (ioctl (fd, VIDIOC_QUERYCAP, &v2cap) == 0) {
if (ioctl(fd, VIDIOC_QUERYCAP, &v2cap) == 0) {
printf("ID_V4L_VERSION=2\n");
printf("ID_V4L_PRODUCT=%s\n", v2cap.card);
printf("ID_V4L_CAPABILITIES=:");
@ -78,6 +82,5 @@ int main (int argc, char *argv[])
printf("\n");
}
close (fd);
return 0;
}