+ struct udev_enumerate *udev_enumerate;
+ char base[UTIL_PATH_SIZE];
+ struct stat statbuf;
+ const char *subsysdir;
+
+ if (udev == NULL)
+ return NULL;
+
+ udev_enumerate = enumerate_new(udev);
+ if (udev_enumerate == NULL)
+ return NULL;
+
+ util_strlcpy(base, udev_get_sys_path(udev), sizeof(base));
+ util_strlcat(base, "/subsystem", sizeof(base));
+ if (stat(base, &statbuf) == 0)
+ subsysdir = "/subsystem";
+ else
+ subsysdir = "/bus";
+ info(udev, "searching '%s/*' dir\n", subsysdir);
+ devices_scan_subsystem(udev, subsysdir, NULL, NULL, &udev_enumerate->devices_list);
+ info(udev, "searching '%s/*/drivers/*' dir\n", subsysdir);
+ devices_scan_subsystems(udev, subsysdir, "/drivers",
+ NULL, NULL,
+ &udev_enumerate->devices_list);
+ return udev_enumerate;