diff options
-rw-r--r-- | udev_event.c | 12 | ||||
-rw-r--r-- | udev_rules.c | 1 |
2 files changed, 10 insertions, 3 deletions
diff --git a/udev_event.c b/udev_event.c index 3580ab937f..fae5a46597 100644 --- a/udev_event.c +++ b/udev_event.c @@ -91,15 +91,21 @@ int udev_process_event(struct udev_rules *rules, struct udevice *udev) } sysfs_close_class_device(class_dev); } else if (strcmp(udev->action, "remove") == 0) { + struct name_entry *name_loop; + + /* get data from db, remove db-entry, delete node */ dbg("node remove"); + retval = udev_remove_device(udev); + + /* restore stored persistent data */ + list_for_each_entry(name_loop, &udev->env_list, node) + putenv(name_loop->name); + udev_rules_get_run(rules, udev, NULL, NULL); if (udev->ignore_device) { dbg("device event will be ignored"); return -1; } - - /* get name from db, remove db-entry, delete node */ - retval = udev_remove_device(udev); } /* export name of device node or netif */ diff --git a/udev_rules.c b/udev_rules.c index 647875d9a9..6c6aa0f091 100644 --- a/udev_rules.c +++ b/udev_rules.c @@ -859,6 +859,7 @@ try_parent: const char *key_name = key_pair_name(rule, pair); const char *value = key_val(rule, &pair->key); + name_list_key_add(&udev->env_list, key_name, value); setenv(key_name, value, 1); dbg("export ENV '%s=%s'", key_name, value); } |