struct udev_list file_list;
struct udev_list_entry *file_loop;
struct token end_token;
+ char **s;
rules = calloc(1, sizeof(struct udev_rules));
if (rules == NULL)
memset(rules->trie_nodes, 0x00, sizeof(struct trie_node));
rules->trie_nodes_cur = 1;
- if (udev_get_rules_path(udev) == NULL) {
- char filename[UTIL_PATH_SIZE];
-
- /* /usr/lib/udev -- system rules */
- add_matching_files(udev, &file_list, LIBEXECDIR "/rules.d", ".rules");
-
- /* /etc/udev -- local administration rules */
- add_matching_files(udev, &file_list, SYSCONFDIR "/udev/rules.d", ".rules");
-
- /* /run/udev -- runtime rules */
- util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/rules.d", NULL);
- add_matching_files(udev, &file_list, filename, ".rules");
- } else {
- /* custom rules files location for testing */
- add_matching_files(udev, &file_list, udev_get_rules_path(udev), ".rules");
- }
+ for (udev_get_rules_path(udev, &s, NULL); *s != NULL; s++)
+ add_matching_files(udev, &file_list, *s, ".rules");
/* add all filenames to the string buffer */
udev_list_entry_foreach(file_loop, udev_list_get_entry(&file_list)) {
return rules;
}
-void udev_rules_unref(struct udev_rules *rules)
+struct udev_rules *udev_rules_unref(struct udev_rules *rules)
{
if (rules == NULL)
- return;
+ return NULL;
free(rules->tokens);
free(rules->buf);
free(rules->trie_nodes);
free(rules->uids);
free(rules->gids);
free(rules);
+ return NULL;
}
static int match_key(struct udev_rules *rules, struct token *token, const char *val)
&rules->buf[rule->rule.filename_off],
rule->rule.filename_line);
break;
- case TK_A_STATIC_NODE:
- event->static_node = true;
- break;
case TK_A_ENV: {
const char *name = &rules->buf[cur->key.attr_off];
char *value = &rules->buf[cur->key.value_off];
else
mode = 0600;
}
- /* set sticky bit, so we do not remove the node on module unload */
- mode |= 01000;
if (mode != (stats.st_mode & 01777)) {
chmod(filename, mode);
info(rules->udev, "chmod '%s' %#o\n", filename, mode);