X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udev_rules.c;h=5c3d7d5d0646a81d98507a5124d5efde603cf5dd;hb=1b679f0a8bca9a17107b501b2c754293f9202135;hp=d77d5ec19691c4c664c2cb1ddb3314352f76a67c;hpb=81313e1b48866efb9e40eb88420643de05275b56;p=elogind.git diff --git a/udev_rules.c b/udev_rules.c index d77d5ec19..5c3d7d5d0 100644 --- a/udev_rules.c +++ b/udev_rules.c @@ -532,7 +532,7 @@ found: } break; case SUBST_TEMP_NODE: - if (udev->tmp_node[0] == '\0') { + if (udev->tmp_node[0] == '\0' && major(udev->devt) > 0) { dbg("create temporary device node for callout"); snprintf(udev->tmp_node, sizeof(udev->tmp_node), "%s/.tmp-%u-%u", udev_root, major(udev->devt), minor(udev->devt)); @@ -831,18 +831,23 @@ try_parent: char temp_value[NAME_SIZE]; const char *key_name = key_pair_name(rule, pair); const char *value = key_val(rule, &pair->key); - char *key_value; /* make sure we don't write to the same string we possibly read from */ strlcpy(temp_value, value, sizeof(temp_value)); udev_rules_apply_format(udev, temp_value, NAME_SIZE); - key_value = name_list_key_add(&udev->env_list, key_name, temp_value); - if (key_value == NULL) - break; + if (temp_value[0] == '\0') { + name_list_key_remove(&udev->env_list, key_name); + unsetenv(key_name); + info("unset ENV '%s'", key_name); + } else { + char *key_value = name_list_key_add(&udev->env_list, key_name, temp_value); - putenv(key_value); - dbg("export ENV '%s'", key_value); + if (key_value == NULL) + break; + putenv(key_value); + info("set ENV '%s'", key_value); + } } } @@ -914,7 +919,7 @@ int udev_rules_get_name(struct udev_rules *rules, struct udevice *udev) udev->ignore_remove = 1; dbg("remove event should be ignored"); } - if (rule->link_priority) { + if (rule->link_priority != 0) { udev->link_priority = rule->link_priority; info("link_priority=%i", udev->link_priority); }