unsigned int off;
struct trie_node *parent;
- len = strlen(str);
-
- /* offset 0 is always '\0' */
- if (len == 0)
- return 0;
-
/* walk trie, start from last character of str to find matching tails */
- node_idx = 0;
+ len = strlen(str);
key = str[len-1];
+ node_idx = 0;
for (depth = 0; depth <= len; depth++) {
struct trie_node *node;
unsigned int child_idx;
char *linepos;
char *attr;
int physdev = 0;
+ int waitfor = 0;
struct rule_tmp rule_tmp;
memset(&rule_tmp, 0x00, sizeof(struct rule_tmp));
if (strcasecmp(key, "WAIT_FOR") == 0 || strcasecmp(key, "WAIT_FOR_SYSFS") == 0) {
rule_add_key(&rule_tmp, TK_M_WAITFOR, 0, value, NULL);
valid = 1;
+ waitfor = 1;
continue;
}
err(rules->udev, "unknown key '%s' in %s:%u\n", key, filename, lineno);
}
- if (physdev)
- err(rules->udev, "PHYSDEV* values are deprecated and not available on recent kernels, \n"
- "please fix it in %s:%u", filename, lineno);
+ if (physdev && !waitfor)
+ err(rules->udev, "PHYSDEV* values are deprecated and not available on recent kernels, "
+ "please fix it in %s:%u\n", filename, lineno);
- /* skip line if not any valid key was found */
+ /* skip line if no valid key was found */
if (!valid)
goto invalid;
if (rules->trie_nodes == NULL)
return NULL;
rules->trie_nodes_max = PREALLOC_TRIE;
- /* offset 0 is the trie root */
+ /* offset 0 is the trie root, with an empty string */
memset(rules->trie_nodes, 0x00, sizeof(struct trie_node));
rules->trie_nodes_cur = 1;