static bool arg_strict = false;
static int verb_query(int argc, char *argv[], void *userdata) {
- return hwdb_query(argv[1]);
+ return hwdb_query(argv[1], arg_root);
}
static int verb_update(int argc, char *argv[], void *userdata) {
return r;
}
-int hwdb_query(const char *modalias) {
+int hwdb_query(const char *modalias, const char *root) {
_cleanup_(sd_hwdb_unrefp) sd_hwdb *hwdb = NULL;
- const char *key, *value;
+ const char *key, *value, *p;
int r;
assert(modalias);
- r = sd_hwdb_new(&hwdb);
+ if (!isempty(root))
+ NULSTR_FOREACH(p, hwdb_bin_paths) {
+ _cleanup_free_ char *hwdb_bin = NULL;
+
+ hwdb_bin = path_join(root, p);
+ if (!hwdb_bin)
+ return -ENOMEM;
+
+ r = sd_hwdb_new_from_path(hwdb_bin, &hwdb);
+ if (r >= 0)
+ break;
+ }
+ else
+ r = sd_hwdb_new(&hwdb);
if (r < 0)
return r;
bool hwdb_validate(sd_hwdb *hwdb);
int hwdb_update(const char *root, const char *hwdb_bin_dir, bool strict, bool compat);
-int hwdb_query(const char *modalias);
+int hwdb_query(const char *modalias, const char *root);