chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
udev: builtin - do not fail builtin initialization if one of them returns an error
[elogind.git]
/
src
/
udev
/
udev-builtin-hwdb.c
diff --git
a/src/udev/udev-builtin-hwdb.c
b/src/udev/udev-builtin-hwdb.c
index 1458795e993bb151d69b0164421aafc725f71081..14e9edab8239af323cacb19b9552ba56da03b174 100644
(file)
--- a/
src/udev/udev-builtin-hwdb.c
+++ b/
src/udev/udev-builtin-hwdb.c
@@
-307,12
+307,18
@@
static int builtin_hwdb_init(struct udev *udev)
struct stat st;
const char sig[] = HWDB_SIG;
struct stat st;
const char sig[] = HWDB_SIG;
+ if (trie.f)
+ return 0;
+
trie.f = fopen(SYSCONFDIR "/udev/hwdb.bin", "re");
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;
return -errno;
+ }
if (fstat(fileno(trie.f), &st) < 0 || (size_t)st.st_size < offsetof(struct trie_header_f, strings_len) + 8) {
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;
fclose(trie.f);
zero(trie);
return -EINVAL;
@@
-320,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) {
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;
}
fclose(trie.f);
return -EINVAL;
}
@@
-328,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)) {
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);
log_error("Please try 'udevadm hwdb --update' to re-create it.");
munmap((void *)trie.map, st.st_size);
fclose(trie.f);
@@
-361,7
+367,7
@@
static bool builtin_hwdb_validate(struct udev *udev)
struct stat st;
if (!trie.f)
struct stat st;
if (!trie.f)
- return
tru
e;
+ return
fals
e;
if (fstat(fileno(trie.f), &st) < 0)
return true;
if (trie.file_time_usec != ts_usec(&st.st_mtim))
if (fstat(fileno(trie.f), &st) < 0)
return true;
if (trie.file_time_usec != ts_usec(&st.st_mtim))