X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udev_device.c;h=6dc843ed22b1bedeadc650da19f3c40ddf17f247;hb=5fc32819ecb0c05fd8f67a2dfeff2454057982f8;hp=84d0ab2204e262cd40f27119df3de82d5fe1109d;hpb=3e5d5cb773f41d70b9e22bef36839101e0c51fd7;p=elogind.git diff --git a/udev_device.c b/udev_device.c index 84d0ab220..6dc843ed2 100644 --- a/udev_device.c +++ b/udev_device.c @@ -26,7 +26,8 @@ #include #include #include -#include +#include +#include #include #include @@ -114,7 +115,10 @@ int udev_device_event(struct udev_rules *rules, struct udevice *udev) /* add device node */ if (major(udev->devt) != 0 && strcmp(udev->action, "add") == 0) { + struct udevice *udev_old; + dbg("device node add '%s'", udev->dev->devpath); + udev_rules_get_name(rules, udev); if (udev->ignore_device) { info("device event will be ignored"); @@ -124,8 +128,19 @@ int udev_device_event(struct udev_rules *rules, struct udevice *udev) info("device node creation supressed"); goto exit; } - /* create node, store in db */ - retval = udev_node_add(udev); + + /* read current database entry, we may want to cleanup symlinks */ + udev_old = udev_device_init(); + if (udev_old != NULL) { + if (udev_db_get_device(udev_old, udev->dev->devpath) == 0) { + info("device '%s' already known, remove possible symlinks", udev->dev->devpath); + udev_node_remove_symlinks(udev_old); + } + udev_device_cleanup(udev_old); + } + + /* create node and symlinks, store record in database */ + retval = udev_node_add(udev, udev_old); if (retval == 0) udev_db_add_device(udev); goto exit;