udev-rule: make match_key() and match_attr() return boolean value

This commit is contained in:
Yu Watanabe 2019-01-30 07:54:10 +01:00
parent bb175a0338
commit 605aa52f83
1 changed files with 22 additions and 26 deletions

View File

@ -1595,7 +1595,7 @@ bool udev_rules_check_timestamp(UdevRules *rules) {
return paths_check_timestamp(rules_dirs, &rules->dirs_ts_usec, true);
}
static int match_key(UdevRules *rules, struct token *token, const char *val) {
static bool match_key(UdevRules *rules, struct token *token, const char *val) {
char *key_value = rules_str(rules, token->key.value_off);
char *pos;
bool match = false;
@ -1658,17 +1658,13 @@ static int match_key(UdevRules *rules, struct token *token, const char *val) {
match = (val[0] != '\0');
break;
case GL_UNSET:
return -1;
return false;
}
if (match && (token->key.op == OP_MATCH))
return 0;
if (!match && (token->key.op == OP_NOMATCH))
return 0;
return -1;
return token->key.op == (match ? OP_MATCH : OP_NOMATCH);
}
static int match_attr(UdevRules *rules, sd_device *dev, UdevEvent *event, struct token *cur) {
static bool match_attr(UdevRules *rules, sd_device *dev, UdevEvent *event, struct token *cur) {
char nbuf[UTIL_NAME_SIZE], vbuf[UTIL_NAME_SIZE];
const char *name, *value;
size_t len;
@ -1681,15 +1677,15 @@ static int match_attr(UdevRules *rules, sd_device *dev, UdevEvent *event, struct
_fallthrough_;
case SB_NONE:
if (sd_device_get_sysattr_value(dev, name, &value) < 0)
return -1;
return false;
break;
case SB_SUBSYS:
if (util_resolve_subsys_kernel(name, vbuf, sizeof(vbuf), true) != 0)
return -1;
return false;
value = vbuf;
break;
default:
return -1;
return false;
}
/* remove trailing whitespace, if not asked to match for it */
@ -1757,19 +1753,19 @@ int udev_rules_apply_to_event(
esc = ESCAPE_UNSET;
break;
case TK_M_ACTION:
if (match_key(rules, cur, action) != 0)
if (!match_key(rules, cur, action))
goto nomatch;
break;
case TK_M_DEVPATH:
if (sd_device_get_devpath(dev, &val) < 0)
goto nomatch;
if (match_key(rules, cur, val) != 0)
if (!match_key(rules, cur, val))
goto nomatch;
break;
case TK_M_KERNEL:
if (sd_device_get_sysname(dev, &val) < 0)
goto nomatch;
if (match_key(rules, cur, val) != 0)
if (!match_key(rules, cur, val))
goto nomatch;
break;
case TK_M_DEVLINK: {
@ -1777,7 +1773,7 @@ int udev_rules_apply_to_event(
bool match = false;
FOREACH_DEVICE_DEVLINK(dev, devlink)
if (match_key(rules, cur, devlink + STRLEN("/dev/")) == 0) {
if (match_key(rules, cur, devlink + STRLEN("/dev/"))) {
match = true;
break;
}
@ -1787,7 +1783,7 @@ int udev_rules_apply_to_event(
break;
}
case TK_M_NAME:
if (match_key(rules, cur, event->name) != 0)
if (!match_key(rules, cur, event->name))
goto nomatch;
break;
case TK_M_ENV: {
@ -1801,7 +1797,7 @@ int udev_rules_apply_to_event(
val = NULL;
}
if (match_key(rules, cur, strempty(val)))
if (!match_key(rules, cur, strempty(val)))
goto nomatch;
break;
}
@ -1823,17 +1819,17 @@ int udev_rules_apply_to_event(
case TK_M_SUBSYSTEM:
if (sd_device_get_subsystem(dev, &val) < 0)
goto nomatch;
if (match_key(rules, cur, val) != 0)
if (!match_key(rules, cur, val))
goto nomatch;
break;
case TK_M_DRIVER:
if (sd_device_get_driver(dev, &val) < 0)
goto nomatch;
if (match_key(rules, cur, val) != 0)
if (!match_key(rules, cur, val))
goto nomatch;
break;
case TK_M_ATTR:
if (match_attr(rules, dev, event, cur) != 0)
if (!match_attr(rules, dev, event, cur))
goto nomatch;
break;
case TK_M_SYSCTL: {
@ -1849,7 +1845,7 @@ int udev_rules_apply_to_event(
len = strlen(value);
while (len > 0 && isspace(value[--len]))
value[len] = '\0';
if (match_key(rules, cur, value) != 0)
if (!match_key(rules, cur, value))
goto nomatch;
break;
}
@ -1877,23 +1873,23 @@ int udev_rules_apply_to_event(
case TK_M_KERNELS:
if (sd_device_get_sysname(event->dev_parent, &val) < 0)
goto try_parent;
if (match_key(rules, key, val) != 0)
if (!match_key(rules, key, val))
goto try_parent;
break;
case TK_M_SUBSYSTEMS:
if (sd_device_get_subsystem(event->dev_parent, &val) < 0)
goto try_parent;
if (match_key(rules, key, val) != 0)
if (!match_key(rules, key, val))
goto try_parent;
break;
case TK_M_DRIVERS:
if (sd_device_get_driver(event->dev_parent, &val) < 0)
goto try_parent;
if (match_key(rules, key, val) != 0)
if (!match_key(rules, key, val))
goto try_parent;
break;
case TK_M_ATTRS:
if (match_attr(rules, event->dev_parent, event, key) != 0)
if (!match_attr(rules, event->dev_parent, event, key))
goto try_parent;
break;
case TK_M_TAGS: {
@ -2081,7 +2077,7 @@ int udev_rules_apply_to_event(
break;
}
case TK_M_RESULT:
if (match_key(rules, cur, event->program_result) != 0)
if (!match_key(rules, cur, event->program_result))
goto nomatch;
break;
case TK_A_STRING_ESCAPE_NONE: