X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udev_rules_parse.c;h=9e435819f0893e2969cbeb05f976f3ed21eb2ec2;hp=124410a3402d8b7a36f9c4b5ed9274529f9ceb2b;hb=091b42826c3bbcac309cc97207e5dc438e33ef00;hpb=254d6d3ca2188a396706b363d0840431d360fbd9 diff --git a/udev_rules_parse.c b/udev_rules_parse.c index 124410a34..9e435819f 100644 --- a/udev_rules_parse.c +++ b/udev_rules_parse.c @@ -469,6 +469,11 @@ static int add_to_rules(struct udev_rules *rules, char *line, const char *filena } if (strncasecmp(key, "TEST", sizeof("TEST")-1) == 0) { + if (operation != KEY_OP_MATCH && + operation != KEY_OP_NOMATCH) { + err("invalid TEST operation"); + goto invalid; + } attr = get_key_attribute(key + sizeof("TEST")-1); if (attr != NULL) rule->test_mode_mask = strtol(attr, NULL, 8); @@ -525,7 +530,11 @@ static int add_to_rules(struct udev_rules *rules, char *line, const char *filena } if (strcasecmp(key, "SYMLINK") == 0) { - add_rule_key(rule, &rule->symlink, operation, value); + if (operation == KEY_OP_MATCH || + operation == KEY_OP_NOMATCH) + add_rule_key(rule, &rule->symlink_match, operation, value); + else + add_rule_key(rule, &rule->symlink, operation, value); valid = 1; continue; } @@ -753,11 +762,10 @@ int udev_rules_init(struct udev_rules *rules, int resolve_names) if (name_base == NULL) continue; - if (strcmp(name_base, dyn_base) > 0) { - list_move_tail(&dyn_loop->node, &name_loop->node); + if (strcmp(name_base, dyn_base) > 0) break; - } } + list_move_tail(&dyn_loop->node, &name_loop->node); } /* parse list of files */ @@ -783,3 +791,4 @@ void udev_rules_cleanup(struct udev_rules *rules) rules->buf = NULL; } } +