From 2dbb47f8606d18b14e981fb5cf245e8aaaad2de1 Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Fri, 16 Mar 2007 15:16:08 +0100 Subject: [PATCH] add link_priority to rule options, and store it in database --- udev.h | 1 + udev_db.c | 9 +++++++++ udev_rules.c | 4 ++++ udev_rules.h | 1 + udev_rules_parse.c | 7 +++++++ 5 files changed, 22 insertions(+) diff --git a/udev.h b/udev.h index 7fc7fd3b..31542243 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 13d96894..5ac016a0 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 7ab3bba7..c0f4cd20 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 56153519..7fbf88ba 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 5ce91df3..bfbad367 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; -- 2.39.5