chiark / gitweb /
udev: builtin - do not fail builtin initialization if one of them returns an error
authorKay Sievers <kay@vrfy.org>
Fri, 26 Oct 2012 01:43:56 +0000 (03:43 +0200)
committerKay Sievers <kay@vrfy.org>
Fri, 26 Oct 2012 01:45:25 +0000 (03:45 +0200)
src/udev/udev-builtin-hwdb.c
src/udev/udev-builtin.c
src/udev/udev.h

index c1a6f5c791b52d3e8096cb13daacb995c42b2e87..14e9edab8239af323cacb19b9552ba56da03b174 100644 (file)
@@ -311,11 +311,14 @@ static int builtin_hwdb_init(struct udev *udev)
                 return 0;
 
         trie.f = fopen(SYSCONFDIR "/udev/hwdb.bin", "re");
                 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;
                 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;
@@ -323,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;
         }
@@ -331,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);
index 26ee16c6696e38b9cba626a8da68d38f4cc81b2b..2ea7f4e20228fe9f224e721f3e51e6e70dcb1baf 100644 (file)
@@ -41,24 +41,18 @@ static const struct udev_builtin *builtins[] = {
 #endif
 };
 
 #endif
 };
 
-int udev_builtin_init(struct udev *udev)
+void udev_builtin_init(struct udev *udev)
 {
         unsigned int i;
 {
         unsigned int i;
-        int err = 0;
 
         if (initialized)
 
         if (initialized)
-                return 0;
+                return;
 
 
-        for (i = 0; i < ELEMENTSOF(builtins); i++) {
-                if (builtins[i]->init) {
-                        err = builtins[i]->init(udev);
-                        if (err < 0)
-                                break;
-                }
-        }
+        for (i = 0; i < ELEMENTSOF(builtins); i++)
+                if (builtins[i]->init)
+                        builtins[i]->init(udev);
 
         initialized = true;
 
         initialized = true;
-        return err;
 }
 
 void udev_builtin_exit(struct udev *udev)
 }
 
 void udev_builtin_exit(struct udev *udev)
@@ -78,13 +72,11 @@ void udev_builtin_exit(struct udev *udev)
 bool udev_builtin_validate(struct udev *udev)
 {
         unsigned int i;
 bool udev_builtin_validate(struct udev *udev)
 {
         unsigned int i;
-        bool change = false;
 
         for (i = 0; i < ELEMENTSOF(builtins); i++)
 
         for (i = 0; i < ELEMENTSOF(builtins); i++)
-                if (builtins[i]->validate)
-                        if (builtins[i]->validate(udev))
-                                change = true;
-        return change;
+                if (builtins[i]->validate && builtins[i]->validate(udev))
+                        return true;
+        return false;
 }
 
 void udev_builtin_list(struct udev *udev)
 }
 
 void udev_builtin_list(struct udev *udev)
index a2c84f6aebe764dbe0baed5deb2af201a80d20a9..f85c7216d24f5cd18eb26bb902d49a3913064424 100644 (file)
@@ -165,7 +165,7 @@ extern const struct udev_builtin udev_builtin_kmod;
 extern const struct udev_builtin udev_builtin_path_id;
 extern const struct udev_builtin udev_builtin_usb_id;
 extern const struct udev_builtin udev_builtin_uaccess;
 extern const struct udev_builtin udev_builtin_path_id;
 extern const struct udev_builtin udev_builtin_usb_id;
 extern const struct udev_builtin udev_builtin_uaccess;
-int udev_builtin_init(struct udev *udev);
+void udev_builtin_init(struct udev *udev);
 void udev_builtin_exit(struct udev *udev);
 enum udev_builtin_cmd udev_builtin_lookup(const char *command);
 const char *udev_builtin_name(enum udev_builtin_cmd cmd);
 void udev_builtin_exit(struct udev *udev);
 enum udev_builtin_cmd udev_builtin_lookup(const char *command);
 const char *udev_builtin_name(enum udev_builtin_cmd cmd);