]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/hwdb/hwdb.c
Merge pull request #11827 from keszybz/pkgconfig-variables
[thirdparty/systemd.git] / src / hwdb / hwdb.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2
3 #include <getopt.h>
4
5 #include "sd-hwdb.h"
6
7 #include "alloc-util.h"
8 #include "hwdb-util.h"
9 #include "main-func.h"
10 #include "pretty-print.h"
11 #include "selinux-util.h"
12 #include "util.h"
13 #include "verbs.h"
14
15 static const char *arg_hwdb_bin_dir = NULL;
16 static const char *arg_root = NULL;
17 static bool arg_strict = false;
18
19 static int verb_query(int argc, char *argv[], void *userdata) {
20 return hwdb_query(argv[1]);
21 }
22
23 static int verb_update(int argc, char *argv[], void *userdata) {
24 return hwdb_update(arg_root, arg_hwdb_bin_dir, arg_strict, false);
25 }
26
27 static int help(void) {
28 _cleanup_free_ char *link = NULL;
29 int r;
30
31 r = terminal_urlify_man("systemd-hwdb", "8", &link);
32 if (r < 0)
33 return log_oom();
34
35 printf("%s OPTIONS COMMAND\n\n"
36 "Update or query the hardware database.\n\n"
37 " -h --help Show this help\n"
38 " --version Show package version\n"
39 " -s --strict When updating, return non-zero exit value on any parsing error\n"
40 " --usr Generate in " UDEVLIBEXECDIR " instead of /etc/udev\n"
41 " -r --root=PATH Alternative root path in the filesystem\n\n"
42 "Commands:\n"
43 " update Update the hwdb database\n"
44 " query MODALIAS Query database and print result\n"
45 "\nSee the %s for details.\n"
46 , program_invocation_short_name
47 , link
48 );
49
50 return 0;
51 }
52
53 static int parse_argv(int argc, char *argv[]) {
54 enum {
55 ARG_VERSION = 0x100,
56 ARG_USR,
57 };
58
59 static const struct option options[] = {
60 { "help", no_argument, NULL, 'h' },
61 { "version", no_argument, NULL, ARG_VERSION },
62 { "usr", no_argument, NULL, ARG_USR },
63 { "strict", no_argument, NULL, 's' },
64 { "root", required_argument, NULL, 'r' },
65 {}
66 };
67
68 int c;
69
70 assert(argc >= 0);
71 assert(argv);
72
73 while ((c = getopt_long(argc, argv, "ust:r:h", options, NULL)) >= 0)
74 switch(c) {
75
76 case 'h':
77 return help();
78
79 case ARG_VERSION:
80 return version();
81
82 case ARG_USR:
83 arg_hwdb_bin_dir = UDEVLIBEXECDIR;
84 break;
85
86 case 's':
87 arg_strict = true;
88 break;
89
90 case 'r':
91 arg_root = optarg;
92 break;
93
94 case '?':
95 return -EINVAL;
96
97 default:
98 assert_not_reached("Unknown option");
99 }
100
101 return 1;
102 }
103
104 static int hwdb_main(int argc, char *argv[]) {
105 static const Verb verbs[] = {
106 { "update", 1, 1, 0, verb_update },
107 { "query", 2, 2, 0, verb_query },
108 {},
109 };
110
111 return dispatch_verb(argc, argv, verbs, NULL);
112 }
113
114 static int run(int argc, char *argv[]) {
115 int r;
116
117 log_parse_environment();
118 log_open();
119
120 r = parse_argv(argc, argv);
121 if (r <= 0)
122 return r;
123
124 mac_selinux_init();
125
126 return hwdb_main(argc, argv);
127 }
128
129 DEFINE_MAIN_FUNCTION(run);