+
+ /* path exists in sys */
+ if (strncmp(&syspath[len], "/devices/", 9) == 0 ||
+ strncmp(&syspath[len], "/class/", 7) == 0 ||
+ strncmp(&syspath[len], "/block/", 7) == 0) {
+ char file[UTIL_PATH_SIZE];
+
+ /* all "devices" require a "uevent" file */
+ util_strlcpy(file, path, sizeof(file));
+ util_strlcat(file, "/uevent", sizeof(file));
+ if (stat(file, &statbuf) != 0) {
+ info(udev, "not a device: %s\n", syspath);
+ return NULL;
+ }
+ } else {
+ /* everything else just needs to be a directory */
+ if (stat(path, &statbuf) != 0 || !S_ISDIR(statbuf.st_mode)) {
+ info(udev, "directory not found: %s\n", syspath);
+ return NULL;
+ }
+ }
+
+ udev_device = device_init(udev);
+ if (udev_device == NULL)
+ return NULL;
+