X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fudev%2Fudevadm-hwdb.c;h=00609e31b52202d4af5ef76d5c32a07fc1c473de;hb=df546eb56a3e8cb7cbea7a1cb630f9ed21ea5c6b;hp=3ca755e2ed17078a7650104634f90eda3fd81118;hpb=33488f19793dc0a86fdee27266c5319b5b78d695;p=elogind.git diff --git a/src/udev/udevadm-hwdb.c b/src/udev/udevadm-hwdb.c index 3ca755e2e..00609e31b 100644 --- a/src/udev/udevadm-hwdb.c +++ b/src/udev/udevadm-hwdb.c @@ -18,7 +18,6 @@ ***/ #include -#include #include #include #include @@ -28,7 +27,8 @@ #include "conf-files.h" #include "udev.h" -#include "libudev-hwdb-def.h" +#include "hwdb-internal.h" +#include "hwdb-util.h" /* * Generic udev properties, key/value database based on modalias strings. @@ -400,7 +400,7 @@ static int trie_store(struct trie *trie, const char *filename) { } log_debug("=== trie on-disk ==="); - log_debug("size: %8"PRIu64" bytes", size); + log_debug("size: %8"PRIi64" bytes", size); log_debug("header: %8zu bytes", sizeof(struct trie_header_f)); log_debug("nodes: %8"PRIu64" bytes (%8"PRIu64")", t.nodes_count * sizeof(struct trie_node_f), t.nodes_count); @@ -428,6 +428,10 @@ static int insert_data(struct trie *trie, struct udev_list *match_list, value[0] = '\0'; value++; + /* libudev requires properties to start with a space */ + while (isblank(line[0]) && isblank(line[1])) + line++; + if (line[0] == '\0' || value[0] == '\0') { log_error("Error, empty key or value '%s' in '%s':", line, filename); return -EINVAL; @@ -618,7 +622,7 @@ static int adm_hwdb(struct udev *udev, int argc, char *argv[]) { err = conf_files_list_strv(&files, ".hwdb", root, conf_file_dirs); if (err < 0) { - log_error("failed to enumerate hwdb files: %s", strerror(-err)); + log_error_errno(err, "failed to enumerate hwdb files: %m"); rc = EXIT_FAILURE; goto out; } @@ -652,20 +656,21 @@ static int adm_hwdb(struct udev *udev, int argc, char *argv[]) { mkdir_parents(hwdb_bin, 0755); err = trie_store(trie, hwdb_bin); if (err < 0) { - log_error("Failure writing database %s: %s", hwdb_bin, strerror(-err)); + log_error_errno(err, "Failure writing database %s: %m", hwdb_bin); rc = EXIT_FAILURE; } } if (test) { - struct udev_hwdb *hwdb = udev_hwdb_new(udev); + _cleanup_hwdb_unref_ sd_hwdb *hwdb = NULL; + int r; - if (hwdb) { - struct udev_list_entry *entry; + r = sd_hwdb_new(&hwdb); + if (r >= 0) { + const char *key, *value; - udev_list_entry_foreach(entry, udev_hwdb_get_properties_list_entry(hwdb, test, 0)) - printf("%s=%s\n", udev_list_entry_get_name(entry), udev_list_entry_get_value(entry)); - udev_hwdb_unref(hwdb); + SD_HWDB_FOREACH_PROPERTY(hwdb, test, key, value) + printf("%s=%s\n", key, value); } } out: @@ -681,5 +686,4 @@ out: const struct udevadm_cmd udevadm_hwdb = { .name = "hwdb", .cmd = adm_hwdb, - .help = "maintain the hardware database index", };