X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udev%2Fudev_rules_parse.c;h=705b3feb04ac436b57b9525feebedbec52a7bf7f;hb=a689165b5a140cd7d5fdd63cacf8fce2f275033d;hp=273f92f4863b65dffa5e6a9807bd7a39fa09bf51;hpb=01618658fd82dbc5e6315b639f00e87c6fee3c54;p=elogind.git diff --git a/udev/udev_rules_parse.c b/udev/udev_rules_parse.c index 273f92f48..705b3feb0 100644 --- a/udev/udev_rules_parse.c +++ b/udev/udev_rules_parse.c @@ -17,6 +17,8 @@ * */ +#include "config.h" + #include #include #include @@ -741,11 +743,8 @@ int udev_rules_init(struct udev_rules *rules, int resolve_names) /* custom rules location for testing */ add_matching_files(&name_list, udev_rules_dir, ".rules"); } else { - /* read default rules */ - add_matching_files(&name_list, UDEV_PREFIX "/lib/udev/rules.d", ".rules"); - /* read user/custom rules */ - add_matching_files(&sort_list, SYSCONFDIR "/udev/rules.d", ".rules"); + add_matching_files(&name_list, SYSCONFDIR "/udev/rules.d", ".rules"); /* read dynamic/temporary rules */ strlcpy(filename, udev_root, sizeof(filename)); @@ -758,6 +757,9 @@ int udev_rules_init(struct udev_rules *rules, int resolve_names) } add_matching_files(&sort_list, filename, ".rules"); + /* read default rules */ + add_matching_files(&sort_list, UDEV_PREFIX "/lib/udev/rules.d", ".rules"); + /* sort all rules files by basename into list of files */ list_for_each_entry_safe(sort_loop, sort_tmp, &sort_list, node) { const char *sort_base = strrchr(sort_loop->name, '/'); @@ -771,10 +773,20 @@ int udev_rules_init(struct udev_rules *rules, int resolve_names) if (name_base == NULL) continue; + if (strcmp(name_base, sort_base) == 0) { + info("rule file '%s' already added, ignoring '%s'\n", + name_loop->name, sort_loop->name); + list_del(&sort_loop->node); + free(sort_loop); + sort_loop = NULL; + continue; + } + if (strcmp(name_base, sort_base) > 0) break; } - list_move_tail(&sort_loop->node, &name_loop->node); + if (sort_loop != NULL) + list_move_tail(&sort_loop->node, &name_loop->node); } }