chiark / gitweb /
rules: switch to built-in blkid
[elogind.git] / udev / udev-node.c
index 71488c93ad00f4ffd7303f583f804c153e568600..44d3686db61a75f37d6994c2f98377644b5db039 100644 (file)
@@ -107,7 +107,7 @@ int udev_node_mknod(struct udev_device *dev, const char *file, mode_t mode, uid_
                                err = -errno;
                        udev_selinux_resetfscreatecon(udev);
                } while (err == -ENOENT);
-               if (err != 0)
+               if (err != 0 && err != -EEXIST)
                        err(udev, "mknod '%s' %u:%u %#o' failed: %m\n", file, major(devnum), minor(devnum), mode);
                info(udev, "set permissions '%s' %#o uid=%u gid=%u\n", file, mode, uid, gid);
                chmod(file, mode);
@@ -416,20 +416,19 @@ int udev_node_remove(struct udev_device *dev)
        if (devnode == NULL)
                goto out;
 
-       if (stat(devnode, &stats) != 0) {
-               info(udev, "device node '%s' not found\n", devnode);
-               goto out;
-       }
-
-       if (stats.st_rdev != udev_device_get_devnum(dev)) {
-               info(udev, "device node '%s' points to a different device, skip removal\n", devnode);
-               err = -1;
-               goto out;
-       }
+       if (stat(devnode, &stats) == 0) {
+               if (stats.st_rdev != udev_device_get_devnum(dev)) {
+                       info(udev, "device node '%s' points to a different device, skip removal\n", devnode);
+                       err = -1;
+                       goto out;
+               }
 
-       if (stats.st_mode & 01000) {
-               info(udev, "device node '%s' has sticky bit set, skip removal\n", devnode);
-               goto out;
+               if (stats.st_mode & 01000) {
+                       info(udev, "device node '%s' has sticky bit set, skip removal\n", devnode);
+                       goto out;
+               }
+       } else {
+               info(udev, "device node '%s' not found\n", devnode);
        }
 
        dev_check = udev_device_new_from_syspath(udev, udev_device_get_syspath(dev));