+static void scan_failed(void)
+{
+ char base[PATH_SIZE];
+ DIR *dir;
+ struct dirent *dent;
+
+ strlcpy(base, udev_root, sizeof(base));
+ strlcat(base, "/", sizeof(base));
+ strlcat(base, EVENT_FAILED_DIR, sizeof(base));
+
+ dir = opendir(base);
+ if (dir != NULL) {
+ for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) {
+ char linkname[PATH_SIZE];
+ char target[PATH_SIZE];
+ int len;
+
+ if (dent->d_name[0] == '.')
+ continue;
+
+ strlcpy(linkname, base, sizeof(linkname));
+ strlcat(linkname, "/", sizeof(linkname));
+ strlcat(linkname, dent->d_name, sizeof(linkname));
+
+ len = readlink(linkname, target, sizeof(target));
+ if (len <= 0)
+ continue;
+ target[len] = '\0';
+
+ if (is_device(target))
+ device_list_insert(target);
+ else
+ continue;
+ }
+ closedir(dir);
+ }
+}
+