chiark / gitweb /
[PATCH] update the man pages and correct Usage: hints
[elogind.git] / namedev_parse.c
index 22e3523f3d8b67c474d245a15359f2d1e2157993..d39141bfc7536d1718f271502a887014eabbd12d 100644 (file)
@@ -36,7 +36,7 @@
 #include <errno.h>
 
 #include "udev.h"
-#include "udev_lib.h"
+#include "udev_utils.h"
 #include "logging.h"
 #include "namedev.h"
 
@@ -113,7 +113,7 @@ void dump_perm_dev_list(void)
                dump_perm_dev(dev);
 }
 
-/* extract possible KEY{attr} or KEY_attr */
+/* extract possible KEY{attr} */
 static char *get_key_attribute(char *str)
 {
        char *pos;
@@ -132,17 +132,10 @@ static char *get_key_attribute(char *str)
                return attr;
        }
 
-       attr = strchr(str, '_');
-       if (attr != NULL) {
-               attr++;
-               dbg("attribute='%s'", attr);
-               return attr;
-       }
-
        return NULL;
 }
 
-static int namedev_parse_rules(char *filename)
+static int namedev_parse_rules(const char *filename, void *data)
 {
        char line[LINE_SIZE];
        char *bufline;
@@ -258,6 +251,18 @@ static int namedev_parse_rules(char *filename)
                                continue;
                        }
 
+                       if (strcasecmp(temp2, FIELD_SUBSYSTEM) == 0) {
+                               strfieldcpy(dev.subsystem, temp3);
+                               valid = 1;
+                               continue;
+                       }
+
+                       if (strcasecmp(temp2, FIELD_DRIVER) == 0) {
+                               strfieldcpy(dev.driver, temp3);
+                               valid = 1;
+                               continue;
+                       }
+
                        if (strcasecmp(temp2, FIELD_PROGRAM) == 0) {
                                program_given = 1;
                                strfieldcpy(dev.program, temp3);
@@ -273,10 +278,16 @@ static int namedev_parse_rules(char *filename)
 
                        if (strncasecmp(temp2, FIELD_NAME, sizeof(FIELD_NAME)-1) == 0) {
                                attr = get_key_attribute(temp2 + sizeof(FIELD_NAME)-1);
-                               if (attr != NULL && strcasecmp(attr, ATTR_PARTITIONS) == 0) {
+                               if (attr != NULL) {
+                                       if (strstr(attr, ATTR_PARTITIONS) != NULL) {
                                                dbg_parse("creation of partition nodes requested");
                                                dev.partitions = PARTITIONS_COUNT;
                                        }
+                                       if (strstr(attr, ATTR_IGNORE_REMOVE) != NULL) {
+                                               dbg_parse("remove event should be ignored");
+                                               dev.ignore_remove = 1;
+                                       }
+                               }
                                strfieldcpy(dev.name, temp3);
                                valid = 1;
                                continue;
@@ -343,7 +354,7 @@ error:
        return retval;
 }
 
-static int namedev_parse_permissions(char *filename)
+static int namedev_parse_permissions(const char *filename, void *data)
 {
        char line[LINE_SIZE];
        char *bufline;
@@ -447,10 +458,10 @@ int namedev_init_rules(void)
 
        stat(udev_rules_filename, &stats);
        if ((stats.st_mode & S_IFMT) != S_IFDIR)
-               return namedev_parse_rules(udev_rules_filename);
+               return namedev_parse_rules(udev_rules_filename, NULL);
        else
-               return call_foreach_file(namedev_parse_rules,
-                                        udev_rules_filename, RULEFILE_SUFFIX);
+               return call_foreach_file(namedev_parse_rules, udev_rules_filename,
+                                        RULEFILE_SUFFIX, NULL);
 }
 
 int namedev_init_permissions(void)
@@ -459,8 +470,8 @@ int namedev_init_permissions(void)
 
        stat(udev_permissions_filename, &stats);
        if ((stats.st_mode & S_IFMT) != S_IFDIR)
-               return namedev_parse_permissions(udev_permissions_filename);
+               return namedev_parse_permissions(udev_permissions_filename, NULL);
        else
-               return call_foreach_file(namedev_parse_permissions,
-                                        udev_permissions_filename, PERMFILE_SUFFIX);
+               return call_foreach_file(namedev_parse_permissions, udev_permissions_filename,
+                                        PERMFILE_SUFFIX, NULL);
 }