chiark / gitweb /
print warning for invalid TEST operations
[elogind.git] / udev_rules.c
index 01fb2117b25d2499fa3dcabffdc398a2a8bb2906..ef352ca2bc4cef3adf24438538096254cb92d55f 100644 (file)
@@ -994,7 +994,8 @@ static int match_rule(struct udevice *udev, struct udev_rule *rule)
                }
        }
 
-       if (rule->test.operation != KEY_OP_UNSET) {
+       if (rule->test.operation == KEY_OP_MATCH ||
+           rule->test.operation == KEY_OP_NOMATCH) {
                char filename[PATH_SIZE];
                char devpath[PATH_SIZE];
                char *attr;
@@ -1472,9 +1473,14 @@ int udev_rules_get_run(struct udev_rules *rules, struct udevice *udev)
                        break;
 
                dbg("process rule");
-               if (rule->name.operation != KEY_OP_UNSET || rule->symlink.operation != KEY_OP_UNSET ||
-                   rule->mode_operation != KEY_OP_UNSET || rule->owner.operation != KEY_OP_UNSET ||
-                   rule->group.operation != KEY_OP_UNSET) {
+               if (rule->name.operation == KEY_OP_ASSIGN ||
+                   rule->name.operation == KEY_OP_ASSIGN_FINAL ||
+                   rule->name.operation == KEY_OP_ADD ||
+                   rule->symlink.operation == KEY_OP_ASSIGN ||
+                   rule->symlink.operation == KEY_OP_ASSIGN_FINAL ||
+                   rule->symlink.operation == KEY_OP_ADD ||
+                   rule->mode_operation != KEY_OP_UNSET ||
+                   rule->owner.operation != KEY_OP_UNSET || rule->group.operation != KEY_OP_UNSET) {
                        dbg("skip rule that names a device");
                        continue;
                }
@@ -1485,6 +1491,10 @@ int udev_rules_get_run(struct udev_rules *rules, struct udevice *udev)
                                udev->ignore_device = 1;
                                return 0;
                        }
+                       if (rule->ignore_remove) {
+                               udev->ignore_remove = 1;
+                               dbg("remove event should be ignored");
+                       }
 
                        if (!udev->run_final && rule->run.operation != KEY_OP_UNSET) {
                                struct name_entry *entry;