X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fudev%2Fudev-builtin-hwdb.c;h=14e9edab8239af323cacb19b9552ba56da03b174;hp=4c3d5aea62d481b2424cc67573f8409f6dca034e;hb=4af113f9971217991cce51b45f15bdce22ee45e2;hpb=1c574591db5a62aa40aaac02645be1521ea85771 diff --git a/src/udev/udev-builtin-hwdb.c b/src/udev/udev-builtin-hwdb.c index 4c3d5aea6..14e9edab8 100644 --- a/src/udev/udev-builtin-hwdb.c +++ b/src/udev/udev-builtin-hwdb.c @@ -277,6 +277,9 @@ static int builtin_hwdb(struct udev_device *dev, int argc, char *argv[], bool te }; const char *subsys = NULL; + if (!trie.f) + return EXIT_SUCCESS; + for (;;) { int option; @@ -304,12 +307,18 @@ static int builtin_hwdb_init(struct udev *udev) struct stat st; const char sig[] = HWDB_SIG; + if (trie.f) + return 0; + trie.f = fopen(SYSCONFDIR "/udev/hwdb.bin", "re"); - if (!trie.f) + if (!trie.f) { + if (errno != EEXIST) + log_error("Error reading " SYSCONFDIR "/udev/hwdb.bin: %m"); return -errno; + } if (fstat(fileno(trie.f), &st) < 0 || (size_t)st.st_size < offsetof(struct trie_header_f, strings_len) + 8) { - log_error("Error reading '%s'.", SYSCONFDIR "/udev/hwdb.bin: %m"); + log_error("Error reading " SYSCONFDIR "/udev/hwdb.bin: %m"); fclose(trie.f); zero(trie); return -EINVAL; @@ -317,7 +326,7 @@ static int builtin_hwdb_init(struct udev *udev) trie.map = mmap(0, st.st_size, PROT_READ, MAP_SHARED, fileno(trie.f), 0); if (trie.map == MAP_FAILED) { - log_error("Error mapping '%s'.", SYSCONFDIR "/udev/hwdb.bin: %m"); + log_error("Error mapping " SYSCONFDIR "/udev/hwdb.bin: %m"); fclose(trie.f); return -EINVAL; } @@ -325,7 +334,7 @@ static int builtin_hwdb_init(struct udev *udev) trie.map_size = st.st_size; if (memcmp(trie.map, sig, sizeof(trie.head->signature)) != 0 || (size_t)st.st_size != le64toh(trie.head->file_size)) { - log_error("Unable to recognize the format of '%s'.", SYSCONFDIR "/udev/hwdb.bin"); + log_error("Unable to recognize the format of " SYSCONFDIR "/udev/hwdb.bin."); log_error("Please try 'udevadm hwdb --update' to re-create it."); munmap((void *)trie.map, st.st_size); fclose(trie.f); @@ -357,6 +366,8 @@ static bool builtin_hwdb_validate(struct udev *udev) { struct stat st; + if (!trie.f) + return false; if (fstat(fileno(trie.f), &st) < 0) return true; if (trie.file_time_usec != ts_usec(&st.st_mtim))