From: Daan De Meyer Date: Wed, 21 Jun 2023 11:17:01 +0000 (+0200) Subject: hwdb: Don't generate hwdb if no hwdb files are found X-Git-Tag: v254-rc1~143 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4638e18593bba844e063da1397e2d628c6ad469b;p=thirdparty%2Fsystemd.git hwdb: Don't generate hwdb if no hwdb files are found --- diff --git a/src/shared/hwdb-util.c b/src/shared/hwdb-util.c index 59b678c424d..12621b7f89d 100644 --- a/src/shared/hwdb-util.c +++ b/src/shared/hwdb-util.c @@ -587,6 +587,10 @@ int hwdb_update(const char *root, const char *hwdb_bin_dir, bool strict, bool co * source. If true, then hwdb.bin will be created without the information. systemd-hwdb command * should set the argument false, and 'udevadm hwdb' command should set it true. */ + hwdb_bin = path_join(root, hwdb_bin_dir ?: "/etc/udev", "hwdb.bin"); + if (!hwdb_bin) + return -ENOMEM; + trie = new0(struct trie, 1); if (!trie) return -ENOMEM; @@ -607,6 +611,18 @@ int hwdb_update(const char *root, const char *hwdb_bin_dir, bool strict, bool co if (err < 0) return log_error_errno(err, "Failed to enumerate hwdb files: %m"); + if (strv_isempty(files)) { + if (unlink(hwdb_bin) < 0) { + if (errno != ENOENT) + return log_error_errno(errno, "Failed to remove compiled hwdb database %s: %m", hwdb_bin); + + log_info("No hwdb files found, skipping."); + } else + log_info("No hwdb files found, compiled hwdb database %s removed.", hwdb_bin); + + return 0; + } + STRV_FOREACH(f, files) { log_debug("Reading file \"%s\"", *f); err = import_file(trie, *f, file_priority++, compat); @@ -630,10 +646,6 @@ int hwdb_update(const char *root, const char *hwdb_bin_dir, bool strict, bool co log_debug("strings dedup'ed: %8zu bytes (%8zu)", trie->strings->dedup_len, trie->strings->dedup_count); - hwdb_bin = path_join(root, hwdb_bin_dir ?: "/etc/udev", "hwdb.bin"); - if (!hwdb_bin) - return -ENOMEM; - (void) mkdir_parents_label(hwdb_bin, 0755); err = trie_store(trie, hwdb_bin, compat); if (err < 0)