- /* find the device with the highest priority */
- udev_list_entry_foreach(dev_entry, udev_list_get_entry(&dev_list)) {
- const char *syspath;
- struct udev_device *dev_db;
- const char *devnode;
-
- syspath = udev_list_entry_get_name(dev_entry);
- info(udev, "found '%s' for '%s'\n", syspath, slink);
-
- /* did we find ourself? we win, if we have the same priority */
- if (strcmp(udev_device_get_syspath(dev), syspath) == 0) {
- info(udev, "compare (our own) priority of '%s' %i >= %i\n",
- udev_device_get_devpath(dev), udev_device_get_devlink_priority(dev), priority);
- if (strcmp(udev_device_get_devnode(dev), slink) == 0) {
- info(udev, "'%s' is our device node, database inconsistent, skip link update\n",
- udev_device_get_devnode(dev));
- } else if (target[0] == '\0' || udev_device_get_devlink_priority(dev) >= priority) {
- priority = udev_device_get_devlink_priority(dev);
- util_strlcpy(target, udev_device_get_devnode(dev), sizeof(target));
- }
- continue;
- }
-
- /* another device, read priority from database */
- dev_db = udev_device_new_from_syspath(udev, syspath);
- if (dev_db == NULL)
- continue;
- devnode = udev_device_get_devnode(dev_db);
- if (devnode != NULL) {
- if (strcmp(devnode, slink) == 0) {
- info(udev, "'%s' is a device node of '%s', skip link update\n",
- devnode, syspath);
- } else {
- info(udev, "compare priority of '%s' %i > %i\n",
- udev_device_get_devpath(dev_db),
- udev_device_get_devlink_priority(dev_db),
- priority);
- if (target[0] == '\0' || udev_device_get_devlink_priority(dev_db) > priority) {
- priority = udev_device_get_devlink_priority(dev_db);
- util_strlcpy(target, devnode, sizeof(target));
- }
- }
- }
- udev_device_unref(dev_db);