]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/udev/udevadm-hwdb.c
mkosi: do a sparse checkout of debian/ubuntu packaging repo
[thirdparty/systemd.git] / src / udev / udevadm-hwdb.c
CommitLineData
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
8static const char *arg_test = NULL;
9static const char *arg_root = NULL;
6a34639e 10static const char *arg_hwdb_bin_dir = NULL;
b77200b6
YW
11static bool arg_update = false;
12static bool arg_strict = false;
13
b77200b6 14static 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 31static 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
79int 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}