From: Kay Sievers Date: Fri, 16 Mar 2007 14:16:08 +0000 (+0100) Subject: add link_priority to rule options, and store it in database X-Git-Tag: 174~2035 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=2dbb47f8606d18b14e981fb5cf245e8aaaad2de1 add link_priority to rule options, and store it in database --- diff --git a/udev.h b/udev.h index 7fc7fd3b8..31542243e 100644 --- a/udev.h +++ b/udev.h @@ -86,6 +86,7 @@ struct udevice { int ignore_device; int ignore_remove; char program_result[PATH_SIZE]; + int link_priority; int test_run; }; diff --git a/udev_db.c b/udev_db.c index 13d96894a..5ac016a05 100644 --- a/udev_db.c +++ b/udev_db.c @@ -118,6 +118,8 @@ int udev_db_add_device(struct udevice *udev) name_index(udev->dev->devpath, name_loop->name, 1); } fprintf(f, "M:%u:%u\n", major(udev->devt), minor(udev->devt)); + if (udev->link_priority) + fprintf(f, "L:%u\n", udev->link_priority); if (udev->partitions) fprintf(f, "A:%u\n", udev->partitions); if (udev->ignore_remove) @@ -198,6 +200,13 @@ int udev_db_get_device(struct udevice *udev, const char *devpath) line[count-2] = '\0'; name_list_add(&udev->symlink_list, line, 0); break; + case 'L': + if (count > sizeof(line)) + count = sizeof(line); + memcpy(line, &bufline[2], count-2); + line[count-2] = '\0'; + udev->link_priority = atoi(line); + break; case 'A': if (count > sizeof(line)) count = sizeof(line); diff --git a/udev_rules.c b/udev_rules.c index 7ab3bba71..c0f4cd207 100644 --- a/udev_rules.c +++ b/udev_rules.c @@ -909,6 +909,10 @@ 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) { + udev->link_priority = rule->link_priority; + info("link_priority=%i", udev->link_priority); + } /* apply all_partitions option only at a main block device */ if (rule->partitions && strcmp(udev->dev->subsystem, "block") == 0 && udev->dev->kernel_number[0] == '\0') { diff --git a/udev_rules.h b/udev_rules.h index 56153519d..7fbf88ba5 100644 --- a/udev_rules.h +++ b/udev_rules.h @@ -87,6 +87,7 @@ struct udev_rule { mode_t mode; enum key_operation mode_operation; + unsigned int link_priority; unsigned int partitions; unsigned int last_rule:1, ignore_device:1, diff --git a/udev_rules_parse.c b/udev_rules_parse.c index 5ce91df38..bfbad367e 100644 --- a/udev_rules_parse.c +++ b/udev_rules_parse.c @@ -555,6 +555,8 @@ static int add_to_rules(struct udev_rules *rules, char *line, const char *filena } if (strcasecmp(key, "OPTIONS") == 0) { + const char *pos; + if (strstr(value, "last_rule") != NULL) { dbg("last rule to be applied"); rule->last_rule = 1; @@ -567,6 +569,11 @@ static int add_to_rules(struct udev_rules *rules, char *line, const char *filena dbg("remove event should be ignored"); rule->ignore_remove = 1; } + pos = strstr(value, "link_priority="); + if (pos != NULL) { + rule->link_priority = atoi(&pos[strlen("link_priority=")]); + info("link priority=%i", rule->link_priority); + } if (strstr(value, "all_partitions") != NULL) { dbg("creation of partition nodes requested"); rule->partitions = DEFAULT_PARTITIONS_COUNT;