X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udev%2Fudev-node.c;h=44d3686db61a75f37d6994c2f98377644b5db039;hb=95de03a7a20e02f06d2bbe8350f1b5e89af02790;hp=71488c93ad00f4ffd7303f583f804c153e568600;hpb=b3e44c5291f60c0d70af941514ab58c8d31f14a7;p=elogind.git diff --git a/udev/udev-node.c b/udev/udev-node.c index 71488c93a..44d3686db 100644 --- a/udev/udev-node.c +++ b/udev/udev-node.c @@ -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));