X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=udev_device.c;h=6dc843ed22b1bedeadc650da19f3c40ddf17f247;hb=7223b9c951563191d8c8b269d166a2236578e66b;hp=14c8d39cf7b45110ed25317393cf6b55064951df;hpb=a4d5ca644ed8bc59274967c17981d7448a075c07;p=elogind.git diff --git a/udev_device.c b/udev_device.c index 14c8d39cf..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; @@ -149,6 +164,9 @@ int udev_device_event(struct udev_rules *rules, struct udevice *udev) goto exit; info("renamed netif to '%s'", udev->name); + /* export old name */ + setenv("INTERFACE_OLD", udev->dev->kernel_name, 1); + /* now fake the devpath, because the kernel name changed silently */ pos = strrchr(udev->dev->devpath, '/'); if (pos != NULL) {