1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
8 static const char *arg_test
= NULL
;
9 static const char *arg_root
= NULL
;
10 static const char *arg_hwdb_bin_dir
= NULL
;
11 static bool arg_update
= false;
12 static bool arg_strict
= false;
14 static int help(void) {
15 printf("%s hwdb [OPTIONS]\n\n"
16 " -h --help Print this message\n"
17 " -V --version Print version of the program\n"
18 " -u --update Update the hardware database\n"
19 " -s --strict When updating, return non-zero exit value on any parsing error\n"
20 " --usr Generate in " UDEVLIBEXECDIR
" instead of /etc/udev\n"
21 " -t --test=MODALIAS Query database and print result\n"
22 " -r --root=PATH Alternative root path in the filesystem\n\n"
24 "The sub-command 'hwdb' is deprecated, and is left for backwards compatibility.\n"
25 "Please use systemd-hwdb instead.\n",
26 program_invocation_short_name
);
31 static int parse_argv(int argc
, char *argv
[]) {
36 static const struct option options
[] = {
37 { "update", no_argument
, NULL
, 'u' },
38 { "usr", no_argument
, NULL
, ARG_USR
},
39 { "strict", no_argument
, NULL
, 's' },
40 { "test", required_argument
, NULL
, 't' },
41 { "root", required_argument
, NULL
, 'r' },
42 { "version", no_argument
, NULL
, 'V' },
43 { "help", no_argument
, NULL
, 'h' },
49 while ((c
= getopt_long(argc
, argv
, "ust:r:Vh", options
, NULL
)) >= 0)
55 arg_hwdb_bin_dir
= UDEVLIBEXECDIR
;
67 return print_version();
79 int hwdb_main(int argc
, char *argv
[], void *userdata
) {
82 r
= parse_argv(argc
, argv
);
86 if (!arg_update
&& !arg_test
)
87 return log_error_errno(SYNTHETIC_ERRNO(EINVAL
),
88 "Either --update or --test must be used.");
90 log_notice("udevadm hwdb is deprecated. Use systemd-hwdb instead.");
93 r
= hwdb_update(arg_root
, arg_hwdb_bin_dir
, arg_strict
, true);
99 return hwdb_query(arg_test
, NULL
);