udev/fido_id: implement --help
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <getopt.h>
|
||||
#include <linux/hid.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@@ -25,16 +26,43 @@
|
||||
#include "string-util.h"
|
||||
#include "udev-util.h"
|
||||
|
||||
static const char *arg_device = NULL;
|
||||
|
||||
static int parse_argv(int argc, char *argv[]) {
|
||||
static const struct option options[] = {
|
||||
{ "help", no_argument, NULL, 'h' },
|
||||
{}
|
||||
};
|
||||
int c;
|
||||
|
||||
while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0)
|
||||
switch (c) {
|
||||
case 'h':
|
||||
printf("%s [OPTIONS...] SYSFS_PATH\n\n"
|
||||
" -h --help Show this help text\n",
|
||||
program_invocation_short_name);
|
||||
return 0;
|
||||
case '?':
|
||||
return -EINVAL;
|
||||
default:
|
||||
assert_not_reached();
|
||||
}
|
||||
|
||||
if (argc > 2)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Error: unexpected argument.");
|
||||
|
||||
arg_device = argv[optind];
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int run(int argc, char **argv) {
|
||||
_cleanup_(sd_device_unrefp) struct sd_device *device = NULL;
|
||||
_cleanup_free_ char *desc_path = NULL;
|
||||
_cleanup_close_ int fd = -EBADF;
|
||||
|
||||
struct sd_device *hid_device;
|
||||
const char *sys_path;
|
||||
uint8_t desc[HID_MAX_DESCRIPTOR_SIZE];
|
||||
ssize_t desc_len;
|
||||
|
||||
int r;
|
||||
|
||||
log_set_target(LOG_TARGET_AUTO);
|
||||
@@ -42,17 +70,18 @@ static int run(int argc, char **argv) {
|
||||
log_parse_environment();
|
||||
log_open();
|
||||
|
||||
if (argc > 2)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Usage: %s [SYSFS_PATH]", program_invocation_short_name);
|
||||
r = parse_argv(argc, argv);
|
||||
if (r <= 0)
|
||||
return r;
|
||||
|
||||
if (argc == 1) {
|
||||
if (arg_device) {
|
||||
r = sd_device_new_from_syspath(&device, arg_device);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to get device from syspath %s: %m", arg_device);
|
||||
} else {
|
||||
r = device_new_from_strv(&device, environ);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to get current device from environment: %m");
|
||||
} else {
|
||||
r = sd_device_new_from_syspath(&device, argv[1]);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to get device from syspath: %m");
|
||||
}
|
||||
|
||||
r = sd_device_get_parent(device, &hid_device);
|
||||
|
||||
Reference in New Issue
Block a user