*
*/
+#include "config.h"
+
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
/* allow programs in /lib/udev called without the path */
if (strchr(file, '/') == NULL) {
- strlcpy(file, "/lib/udev/", sizeof(file));
+ strlcpy(file, UDEV_PREFIX "/lib/udev/", sizeof(file));
strlcat(file, value, sizeof(file));
pos = strchr(file, ' ');
if (pos)
if (udev_rules_dir[0] != '\0') {
/* custom rules location for testing */
- add_matching_files(&name_list, udev_rules_dir, RULESFILE_SUFFIX);
+ add_matching_files(&name_list, udev_rules_dir, ".rules");
} else {
- /* read default rules */
- add_matching_files(&name_list, RULES_LIB_DIR, RULESFILE_SUFFIX);
-
/* read user/custom rules */
- add_matching_files(&sort_list, RULES_ETC_DIR, RULESFILE_SUFFIX);
+ add_matching_files(&name_list, SYSCONFDIR "/udev/rules.d", ".rules");
/* read dynamic/temporary rules */
strlcpy(filename, udev_root, sizeof(filename));
- strlcat(filename, "/"RULES_DYN_DIR, sizeof(filename));
+ strlcat(filename, "/.udev/rules.d", sizeof(filename));
if (stat(filename, &statbuf) != 0) {
create_path(filename);
selinux_setfscreatecon(filename, NULL, S_IFDIR|0755);
mkdir(filename, 0755);
selinux_resetfscreatecon();
}
- add_matching_files(&sort_list, filename, RULESFILE_SUFFIX);
+ 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) {
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);
}
}