chiark / gitweb /
update NEWS README
[elogind.git] / udev / udev-rules.c
index 5965723919e56fb0b5bd5611bf267a0cf44ffc5f..8fc804a3c2a863e7758514f97b4e686d7a15ed47 100644 (file)
@@ -747,7 +747,7 @@ static int import_program_into_properties(struct udev_device *dev, const char *p
        char *line;
 
        envp = udev_device_get_properties_envp(dev);
-       if (util_run_program(udev, program, envp, result, sizeof(result), &reslen, NULL) != 0)
+       if (util_run_program(udev, program, envp, result, sizeof(result), &reslen, NULL, false) != 0)
                return -1;
 
        line = result;
@@ -1468,11 +1468,16 @@ static int add_rule(struct udev_rules *rules, char *line,
                        if (op < OP_MATCH_MAX) {
                                rule_add_key(&rule_tmp, TK_M_NAME, op, value, NULL);
                        } else {
-                               if (value[0] == '\0')
-                                       info(rules->udev, "name empty, node creation suppressed\n");
-                               else if (strcmp(value, "%k") == 0)
-                                       err(rules->udev, "NAME=\"%%k\" is superfluous and breaks "
-                                           "kernel supplied names, please remove it from %s:%u\n", filename, lineno);
+                               if (strcmp(value, "%k") == 0) {
+                                       err(rules->udev, "NAME=\"%%k\" is ignored, because it breaks kernel supplied names, "
+                                           "please remove it from %s:%u\n", filename, lineno);
+                                       continue;
+                               }
+                               if (value[0] == '\0') {
+                                       info(rules->udev, "NAME=\"\" is ignored, because udev will not delete any device nodes, "
+                                            "please remove it from %s:%u\n", filename, lineno);
+                                       continue;
+                               }
                                rule_add_key(&rule_tmp, TK_A_NAME, op, value, NULL);
                        }
                        rule_tmp.rule.rule.flags = 1;
@@ -2250,7 +2255,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event
                                     program,
                                     &rules->buf[rule->rule.filename_off],
                                     rule->rule.filename_line);
-                               if (util_run_program(event->udev, program, envp, result, sizeof(result), NULL, NULL) != 0) {
+                               if (util_run_program(event->udev, program, envp, result, sizeof(result), NULL, NULL, false) != 0) {
                                        if (cur->key.op != OP_NOMATCH)
                                                goto nomatch;
                                } else {
@@ -2442,6 +2447,8 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event
                                break;
                        }
                case TK_A_TAG:
+                       if (cur->key.op == OP_ASSIGN || cur->key.op == OP_ASSIGN_FINAL)
+                               udev_device_cleanup_tags_list(event->dev);
                        udev_device_add_tag(event->dev, &rules->buf[cur->key.value_off]);
                        break;
                case TK_A_NAME: