X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=namedev_parse.c;h=cb1760fd578c31f889685e954a5f0a9f814d8580;hp=7e3783320256818948a547d744e0062bd5fe3c2e;hb=8825e9e71b3eaac8ce90f4fede2bb07a7ea7a969;hpb=3db7fa27027110fde92a1b6061fab434fe708e9f diff --git a/namedev_parse.c b/namedev_parse.c index 7e3783320..cb1760fd5 100644 --- a/namedev_parse.c +++ b/namedev_parse.c @@ -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; @@ -441,26 +452,26 @@ exit: return retval; } -int namedev_init_rules() +int namedev_init_rules(void) { struct stat stats; 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() +int namedev_init_permissions(void) { struct stat stats; 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); }