chiark / gitweb /
break loops if util_create_path() returns error
[elogind.git] / libudev / libudev-queue-private.c
index 4e67a1f9d05ae2503ab43b5860c92fcd4c2e7ab7..37de67a3d450af509de62a0213d18d6fba8037ee 100644 (file)
@@ -410,13 +410,15 @@ static void update_failed(struct udev_queue_export *udev_queue_export,
                /* record event in the failed directory */
                udev_queue_export->failed_count++;
                do {
-                       util_create_path(udev, filename);
+                       err = util_create_path(udev, filename);
+                       if (err != 0 && err != -ENOENT)
+                               break;
                        udev_selinux_setfscreatecon(udev, filename, S_IFLNK);
                        err = symlink(udev_device_get_devpath(udev_device), filename);
                        if (err != 0)
-                               err = errno;
+                               err = -errno;
                        udev_selinux_resetfscreatecon(udev);
-               } while (err == ENOENT);
+               } while (err == -ENOENT);
                break;
 
        case DEVICE_QUEUED: