- struct udev_device *device;
- struct udev_enumerate *e;
- struct udev_list_entry *entry;
- const char *path, *id_path_tag_tmp;
- char *path_res;
- char found = 0;
- UDEV_SYMBOL(struct udev_enumerate *, udev_enumerate_new,
- (struct udev *));
- UDEV_SYMBOL(int, udev_enumerate_add_match_subsystem,
- (struct udev_enumerate *, const char *));
- UDEV_SYMBOL(int, udev_enumerate_add_match_sysname,
- (struct udev_enumerate *, const char *));
- UDEV_SYMBOL(int, udev_enumerate_scan_devices,
- (struct udev_enumerate *));
- UDEV_SYMBOL(struct udev_list_entry *, udev_enumerate_get_list_entry,
- (struct udev_enumerate *));
- UDEV_SYMBOL(struct udev_list_entry *, udev_list_entry_get_next,
- (struct udev_list_entry *));
- UDEV_SYMBOL(const char *, udev_list_entry_get_name,
- (struct udev_list_entry *));
- UDEV_SYMBOL(struct udev_device *, udev_device_new_from_syspath,
- (struct udev *, const char *));
- UDEV_SYMBOL(const char *, udev_device_get_property_value,
- (struct udev_device *, const char *));
- UDEV_SYMBOL(const char *, udev_device_get_devnode,
- (struct udev_device *));
- UDEV_SYMBOL(struct udev_device *, udev_device_unref,
- (struct udev_device *));
-
- e = udev_enumerate_new(udev);
- udev_enumerate_add_match_subsystem(e, "drm");
- udev_enumerate_add_match_sysname(e, "render*");
-
- udev_enumerate_scan_devices(e);
- udev_list_entry_foreach(entry, udev_enumerate_get_list_entry(e)) {
- path = udev_list_entry_get_name(entry);
- device = udev_device_new_from_syspath(udev, path);
- if (!device)
- continue;
- id_path_tag_tmp = udev_device_get_property_value(device, "ID_PATH_TAG");
- if (id_path_tag_tmp) {
- if ((!another_tag && !strcmp(id_path_tag, id_path_tag_tmp)) ||
- (another_tag && strcmp(id_path_tag, id_path_tag_tmp))) {
- found = 1;
- break;
- }
- }
- udev_device_unref(device);
- }
-
- if (found) {
- path_res = strdup(udev_device_get_devnode(device));
- udev_device_unref(device);
- return path_res;
- }
- return NULL;
-}
-
-static char *
-get_id_path_tag_from_fd(struct udev *udev, int fd)
-{
- struct udev_device *device;
- const char *id_path_tag_tmp;
- char *id_path_tag;
- UDEV_SYMBOL(const char *, udev_device_get_property_value,
- (struct udev_device *, const char *));
- UDEV_SYMBOL(struct udev_device *, udev_device_unref,
- (struct udev_device *));
-
- device = udev_device_new_from_fd(udev, fd);
- if (!device)
- return NULL;
-
- id_path_tag_tmp = udev_device_get_property_value(device, "ID_PATH_TAG");
- if (!id_path_tag_tmp)
- return NULL;