chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
libudev: require LIBUDEV_I_KNOW_THE_API_IS_SUBJECT_TO_CHANGE
[elogind.git]
/
udev
/
udev_rules_parse.c
diff --git
a/udev/udev_rules_parse.c
b/udev/udev_rules_parse.c
index 273f92f4863b65dffa5e6a9807bd7a39fa09bf51..705b3feb04ac436b57b9525feebedbec52a7bf7f 100644
(file)
--- a/
udev/udev_rules_parse.c
+++ b/
udev/udev_rules_parse.c
@@
-17,6
+17,8
@@
*
*/
*
*/
+#include "config.h"
+
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
@@
-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 {
/* 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 */
/* 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));
/* 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");
}
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, '/');
/* 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 (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;
}
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);
}
}
}
}