]>
Commit | Line | Data |
---|---|---|
db9ecf05 | 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
796b06c2 | 2 | |
796b06c2 | 3 | #include <getopt.h> |
6a34639e | 4 | |
d640c07d | 5 | #include "hwdb-util.h" |
3d05193e | 6 | #include "udevadm.h" |
796b06c2 | 7 | |
b77200b6 YW |
8 | static const char *arg_test = NULL; |
9 | static const char *arg_root = NULL; | |
6a34639e | 10 | static const char *arg_hwdb_bin_dir = NULL; |
b77200b6 YW |
11 | static bool arg_update = false; |
12 | static bool arg_strict = false; | |
13 | ||
b77200b6 | 14 | static int help(void) { |
5639df9a YW |
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" | |
dd6f840e | 19 | " -s --strict When updating, return non-zero exit value on any parsing error\n" |
5639df9a YW |
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" | |
23 | "NOTE:\n" | |
24 | "The sub-command 'hwdb' is deprecated, and is left for backwards compatibility.\n" | |
bc556335 DDM |
25 | "Please use systemd-hwdb instead.\n", |
26 | program_invocation_short_name); | |
b77200b6 YW |
27 | |
28 | return 0; | |
796b06c2 KS |
29 | } |
30 | ||
b77200b6 | 31 | static int parse_argv(int argc, char *argv[]) { |
33488f19 MP |
32 | enum { |
33 | ARG_USR = 0x100, | |
34 | }; | |
35 | ||
796b06c2 | 36 | static const struct option options[] = { |
5639df9a YW |
37 | { "update", no_argument, NULL, 'u' }, |
38 | { "usr", no_argument, NULL, ARG_USR }, | |
dd6f840e | 39 | { "strict", no_argument, NULL, 's' }, |
5639df9a YW |
40 | { "test", required_argument, NULL, 't' }, |
41 | { "root", required_argument, NULL, 'r' }, | |
42 | { "version", no_argument, NULL, 'V' }, | |
43 | { "help", no_argument, NULL, 'h' }, | |
796b06c2 KS |
44 | {} |
45 | }; | |
b77200b6 YW |
46 | |
47 | int c; | |
796b06c2 | 48 | |
dd6f840e | 49 | while ((c = getopt_long(argc, argv, "ust:r:Vh", options, NULL)) >= 0) |
79893116 | 50 | switch (c) { |
796b06c2 | 51 | case 'u': |
b77200b6 | 52 | arg_update = true; |
796b06c2 | 53 | break; |
33488f19 | 54 | case ARG_USR: |
b77200b6 | 55 | arg_hwdb_bin_dir = UDEVLIBEXECDIR; |
33488f19 | 56 | break; |
dd6f840e | 57 | case 's': |
b77200b6 | 58 | arg_strict = true; |
dd6f840e | 59 | break; |
23b72453 | 60 | case 't': |
b77200b6 | 61 | arg_test = optarg; |
23b72453 | 62 | break; |
3e49f2ec | 63 | case 'r': |
b77200b6 | 64 | arg_root = optarg; |
3e49f2ec | 65 | break; |
5639df9a | 66 | case 'V': |
51b006e1 | 67 | return print_version(); |
796b06c2 | 68 | case 'h': |
b77200b6 | 69 | return help(); |
7643ac9a | 70 | case '?': |
b77200b6 | 71 | return -EINVAL; |
7643ac9a | 72 | default: |
04499a70 | 73 | assert_not_reached(); |
796b06c2 | 74 | } |
796b06c2 | 75 | |
b77200b6 YW |
76 | return 1; |
77 | } | |
905c37e6 | 78 | |
b77200b6 YW |
79 | int hwdb_main(int argc, char *argv[], void *userdata) { |
80 | int r; | |
905c37e6 | 81 | |
b77200b6 | 82 | r = parse_argv(argc, argv); |
6a34639e | 83 | if (r <= 0) |
b77200b6 | 84 | return r; |
905c37e6 | 85 | |
baaa35ad ZJS |
86 | if (!arg_update && !arg_test) |
87 | return log_error_errno(SYNTHETIC_ERRNO(EINVAL), | |
88 | "Either --update or --test must be used."); | |
23b72453 | 89 | |
f8717d2a ZJS |
90 | log_notice("udevadm hwdb is deprecated. Use systemd-hwdb instead."); |
91 | ||
3d11b46b | 92 | if (arg_update && !hwdb_bypass()) { |
6a34639e | 93 | r = hwdb_update(arg_root, arg_hwdb_bin_dir, arg_strict, true); |
b77200b6 YW |
94 | if (r < 0) |
95 | return r; | |
96 | } | |
23b72453 | 97 | |
b77200b6 | 98 | if (arg_test) |
beff73f9 | 99 | return hwdb_query(arg_test, NULL); |
23b72453 | 100 | |
b77200b6 | 101 | return 0; |
796b06c2 | 102 | } |