Hashmap *properties_list) {
UdevRuleToken *token;
- char buf[UDEV_PATH_SIZE];
- const char *val;
- size_t count;
- bool match;
int r;
assert(rules);
return token_match_string(token, device_action_to_string(a));
}
- case TK_M_DEVPATH:
+ case TK_M_DEVPATH: {
+ const char *val;
+
r = sd_device_get_devpath(dev, &val);
if (r < 0)
return log_rule_error_errno(dev, rules, r, "Failed to get devpath: %m");
return token_match_string(token, val);
+ }
case TK_M_KERNEL:
- case TK_M_PARENTS_KERNEL:
+ case TK_M_PARENTS_KERNEL: {
+ const char *val;
+
r = sd_device_get_sysname(dev, &val);
if (r < 0)
return log_rule_error_errno(dev, rules, r, "Failed to get sysname: %m");
return token_match_string(token, val);
- case TK_M_DEVLINK:
+ }
+ case TK_M_DEVLINK: {
+ const char *val;
+
FOREACH_DEVICE_DEVLINK(dev, val)
if (token_match_string(token, strempty(startswith(val, "/dev/"))))
return token->op == OP_MATCH;
return token->op == OP_NOMATCH;
+ }
case TK_M_NAME:
return token_match_string(token, event->name);
- case TK_M_ENV:
+ case TK_M_ENV: {
+ const char *val;
+
if (sd_device_get_property_value(dev, token->data, &val) < 0)
val = hashmap_get(properties_list, token->data);
return token_match_string(token, val);
+ }
case TK_M_CONST: {
- const char *k = token->data;
+ const char *val, *k = token->data;
if (streq(k, "arch"))
val = architecture_to_string(uname_architecture());
return token_match_string(token, val);
}
case TK_M_TAG:
- case TK_M_PARENTS_TAG:
+ case TK_M_PARENTS_TAG: {
+ const char *val;
+
FOREACH_DEVICE_TAG(dev, val)
if (token_match_string(token, val))
return token->op == OP_MATCH;
return token->op == OP_NOMATCH;
+ }
case TK_M_SUBSYSTEM:
- case TK_M_PARENTS_SUBSYSTEM:
+ case TK_M_PARENTS_SUBSYSTEM: {
+ const char *val;
+
r = sd_device_get_subsystem(dev, &val);
if (r == -ENOENT)
val = NULL;
return log_rule_error_errno(dev, rules, r, "Failed to get subsystem: %m");
return token_match_string(token, val);
+ }
case TK_M_DRIVER:
- case TK_M_PARENTS_DRIVER:
+ case TK_M_PARENTS_DRIVER: {
+ const char *val;
+
r = sd_device_get_driver(dev, &val);
if (r == -ENOENT)
val = NULL;
return log_rule_error_errno(dev, rules, r, "Failed to get driver: %m");
return token_match_string(token, val);
+ }
case TK_M_ATTR:
case TK_M_PARENTS_ATTR:
return token_match_attr(token, dev, event);
case TK_M_SYSCTL: {
_cleanup_free_ char *value = NULL;
+ char buf[UDEV_PATH_SIZE];
(void) udev_event_apply_format(event, token->data, buf, sizeof(buf), false);
r = sysctl_read(sysctl_normalize(buf), &value);
}
case TK_M_TEST: {
mode_t mode = PTR_TO_MODE(token->data);
+ char buf[UDEV_PATH_SIZE];
struct stat statbuf;
+ bool match;
(void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false);
if (!path_is_absolute(buf) &&
udev_resolve_subsys_kernel(buf, buf, sizeof(buf), false) < 0) {
char tmp[UDEV_PATH_SIZE];
+ const char *val;
r = sd_device_get_syspath(dev, &val);
if (r < 0)
return token->op == (match ? OP_MATCH : OP_NOMATCH);
}
case TK_M_PROGRAM: {
- char result[UDEV_LINE_SIZE];
+ char buf[UDEV_PATH_SIZE], result[UDEV_LINE_SIZE];
+ size_t count;
event->program_result = mfree(event->program_result);
(void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false);
}
case TK_M_IMPORT_FILE: {
_cleanup_fclose_ FILE *f = NULL;
+ char buf[UDEV_PATH_SIZE];
(void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false);
log_rule_debug(dev, rules, "Importing properties from '%s'", buf);
}
case TK_M_IMPORT_PROGRAM: {
_cleanup_strv_free_ char **lines = NULL;
- char result[UDEV_LINE_SIZE], **line;
+ char buf[UDEV_PATH_SIZE], result[UDEV_LINE_SIZE], **line;
(void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false);
log_rule_debug(dev, rules, "Importing properties from results of '%s'", buf);
UdevBuiltinCommand cmd = PTR_TO_UDEV_BUILTIN_CMD(token->data);
assert(cmd >= 0 && cmd < _UDEV_BUILTIN_MAX);
unsigned mask = 1U << (int) cmd;
+ char buf[UDEV_PATH_SIZE];
if (udev_builtin_run_once(cmd)) {
/* check if we ran already */
return token->op == (r >= 0 ? OP_MATCH : OP_NOMATCH);
}
case TK_M_IMPORT_DB: {
+ const char *val;
+
if (!event->dev_db_clone)
return token->op == OP_NOMATCH;
r = sd_device_get_property_value(event->dev_db_clone, token->value, &val);
return token->op == OP_MATCH;
}
case TK_M_IMPORT_PARENT: {
+ char buf[UDEV_PATH_SIZE];
+
(void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false);
r = import_parent_into_properties(dev, buf);
if (r < 0)
break;
}
case TK_A_ENV: {
- const char *name = token->data;
+ const char *val, *name = token->data;
char value_new[UDEV_NAME_SIZE], *p = value_new;
- size_t l = sizeof(value_new);
+ size_t count, l = sizeof(value_new);
if (isempty(token->value)) {
if (token->op == OP_ADD)
break;
}
case TK_A_TAG: {
+ char buf[UDEV_PATH_SIZE];
+
(void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false);
if (token->op == OP_ASSIGN)
device_cleanup_tags(dev);
break;
}
case TK_A_NAME: {
+ char buf[UDEV_PATH_SIZE];
+ size_t count;
+
if (event->name_final)
break;
if (token->op == OP_ASSIGN_FINAL)
break;
}
case TK_A_DEVLINK: {
- char *p;
+ char buf[UDEV_PATH_SIZE], *p;
+ size_t count;
if (event->devlink_final)
break;
break;
}
case TK_A_ATTR: {
- const char *key_name = token->data;
- char value[UDEV_NAME_SIZE];
+ char buf[UDEV_PATH_SIZE], value[UDEV_NAME_SIZE];
+ const char *val, *key_name = token->data;
if (udev_resolve_subsys_kernel(key_name, buf, sizeof(buf), false) < 0 &&
sd_device_get_syspath(dev, &val) >= 0)
break;
}
case TK_A_SYSCTL: {
- char value[UDEV_NAME_SIZE];
+ char buf[UDEV_PATH_SIZE], value[UDEV_NAME_SIZE];
(void) udev_event_apply_format(event, token->data, buf, sizeof(buf), false);
(void) udev_event_apply_format(event, token->value, value, sizeof(value), false);
case TK_A_RUN_BUILTIN:
case TK_A_RUN_PROGRAM: {
_cleanup_free_ char *cmd = NULL;
+ char buf[UDEV_PATH_SIZE];
if (event->run_final)
break;