chiark / gitweb /
add link_priority to rule options, and store it in database
authorKay Sievers <kay.sievers@vrfy.org>
Fri, 16 Mar 2007 14:16:08 +0000 (15:16 +0100)
committerKay Sievers <kay.sievers@vrfy.org>
Fri, 16 Mar 2007 14:16:08 +0000 (15:16 +0100)
udev.h
udev_db.c
udev_rules.c
udev_rules.h
udev_rules_parse.c

diff --git a/udev.h b/udev.h
index 7fc7fd3..3154224 100644 (file)
--- 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;
 };
 
index 13d9689..5ac016a 100644 (file)
--- 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);
index 7ab3bba..c0f4cd2 100644 (file)
@@ -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') {
index 5615351..7fbf88b 100644 (file)
@@ -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,
index 5ce91df..bfbad36 100644 (file)
@@ -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;