X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=namedev_parse.c;h=679efae1b59b10e7153ef4f621c14df22f9251d8;hb=ff0977b12e8b92963c687b593c3f1bc33e3d8a9c;hp=f4ffdb21d6687d693e8fa526e1935bdca3efe487;hpb=c81b35c08bbd7789883993ea280e0d3772cce440;p=elogind.git diff --git a/namedev_parse.c b/namedev_parse.c index f4ffdb21d..679efae1b 100644 --- a/namedev_parse.c +++ b/namedev_parse.c @@ -33,7 +33,6 @@ #include #include #include -#include #include #include "udev.h" @@ -41,8 +40,6 @@ #include "logging.h" #include "namedev.h" -LIST_HEAD(file_list); - static int add_config_dev(struct config_device *new_dev) { @@ -416,88 +413,26 @@ exit: return retval; } -struct files { - struct list_head list; - char name[NAME_SIZE]; -}; - -/* sort files in lexical order */ -static int file_list_insert(char *filename) -{ - struct files *loop_file; - struct files *new_file; - - list_for_each_entry(loop_file, &file_list, list) { - if (strcmp(loop_file->name, filename) > 0) { - break; - } - } - - new_file = malloc(sizeof(struct files)); - if (new_file == NULL) { - dbg("error malloc"); - return -ENOMEM; - } - - strfieldcpy(new_file->name, filename); - list_add_tail(&new_file->list, &loop_file->list); - return 0; -} - -/* calls function for file or every file found in directory */ -static int call_foreach_file(int parser (char *f) , char *filename, char *extension) +int namedev_init_rules() { - struct dirent *ent; - DIR *dir; - char *ext; - char file[NAME_SIZE]; struct stat stats; - struct files *loop_file; - struct files *tmp_file; - /* look if we have a plain file or a directory to scan */ - stat(filename, &stats); + stat(udev_rules_filename, &stats); if ((stats.st_mode & S_IFMT) != S_IFDIR) - return parser(filename); - - /* sort matching filename into list */ - dbg("open config as directory '%s'", filename); - dir = opendir(filename); - while (1) { - ent = readdir(dir); - if (ent == NULL || ent->d_name[0] == '\0') - break; - - dbg("found file '%s'", ent->d_name); - ext = strrchr(ent->d_name, '.'); - if (ext == NULL) - continue; - - if (strcmp(ext, extension) == 0) { - dbg("put file in list '%s'", ent->d_name); - file_list_insert(ent->d_name); - } - } - - /* parse every file in the list */ - list_for_each_entry_safe(loop_file, tmp_file, &file_list, list) { - strfieldcpy(file, filename); - strfieldcat(file, loop_file->name); - parser(file); - list_del(&loop_file->list); - free(loop_file); - } - - closedir(dir); - return 0; -} - -int namedev_init_rules() -{ - return call_foreach_file(namedev_parse_rules, udev_rules_filename, RULEFILE_EXT); + return namedev_parse_rules(udev_rules_filename); + else + return call_foreach_file(namedev_parse_rules, + udev_rules_filename, RULEFILE_SUFFIX); } int namedev_init_permissions() { - return call_foreach_file(namedev_parse_permissions, udev_permissions_filename, PERMFILE_EXT); + struct stat stats; + + stat(udev_permissions_filename, &stats); + if ((stats.st_mode & S_IFMT) != S_IFDIR) + return namedev_parse_permissions(udev_permissions_filename); + else + return call_foreach_file(namedev_parse_permissions, + udev_permissions_filename, PERMFILE_SUFFIX); }