udev: split rules object creation and loading

The only functional change is to downgrade the log line to avoid double
logging.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2020-06-23 18:04:18 +02:00
parent 21385e639a
commit c238a1f5f1
6 changed files with 27 additions and 17 deletions
+1 -1
View File
@@ -99,7 +99,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
assert_se(fwrite(data, size, 1, f) == 1);
assert_se(fclose(f) == 0);
assert_se(udev_rules_new(&rules, RESOLVE_NAME_EARLY) == 0);
assert_se(udev_rules_load(&rules, RESOLVE_NAME_EARLY) == 0);
assert_se(cleanup_fake_filesystems(runtime_dir) >= 0);
return 0;
+1 -1
View File
@@ -87,7 +87,7 @@ static int run(int argc, char *argv[]) {
action = argv[1];
devpath = argv[2];
assert_se(udev_rules_new(&rules, RESOLVE_NAME_EARLY) == 0);
assert_se(udev_rules_load(&rules, RESOLVE_NAME_EARLY) == 0);
const char *syspath = strjoina("/sys", devpath);
r = device_new_from_synthetic_event(&dev, syspath, action);
+19 -11
View File
@@ -1175,7 +1175,7 @@ static void rule_resolve_goto(UdevRuleFile *rule_file) {
}
}
static int parse_file(UdevRules *rules, const char *filename) {
int udev_rules_parse_file(UdevRules *rules, const char *filename) {
_cleanup_free_ char *continuation = NULL, *name = NULL;
_cleanup_fclose_ FILE *f = NULL;
UdevRuleFile *rule_file;
@@ -1278,30 +1278,38 @@ static int parse_file(UdevRules *rules, const char *filename) {
return 0;
}
int udev_rules_new(UdevRules **ret_rules, ResolveNameTiming resolve_name_timing) {
_cleanup_(udev_rules_freep) UdevRules *rules = NULL;
_cleanup_strv_free_ char **files = NULL;
char **f;
int r;
UdevRules* udev_rules_new(ResolveNameTiming resolve_name_timing) {
assert(resolve_name_timing >= 0 && resolve_name_timing < _RESOLVE_NAME_TIMING_MAX);
rules = new(UdevRules, 1);
UdevRules *rules = new(UdevRules, 1);
if (!rules)
return -ENOMEM;
return NULL;
*rules = (UdevRules) {
.resolve_name_timing = resolve_name_timing,
};
return rules;
}
int udev_rules_load(UdevRules **ret_rules, ResolveNameTiming resolve_name_timing) {
_cleanup_(udev_rules_freep) UdevRules *rules = NULL;
_cleanup_strv_free_ char **files = NULL;
char **f;
int r;
rules = udev_rules_new(resolve_name_timing);
if (!rules)
return -ENOMEM;
(void) udev_rules_check_timestamp(rules);
r = conf_files_list_strv(&files, ".rules", NULL, 0, RULES_DIRS);
if (r < 0)
return log_error_errno(r, "Failed to enumerate rules files: %m");
return log_debug_errno(r, "Failed to enumerate rules files: %m");
STRV_FOREACH(f, files)
(void) parse_file(rules, *f);
(void) udev_rules_parse_file(rules, *f);
*ret_rules = TAKE_PTR(rules);
return 0;
+3 -1
View File
@@ -16,7 +16,9 @@ typedef enum {
_ESCAPE_TYPE_INVALID = -1
} UdevRuleEscapeType;
int udev_rules_new(UdevRules **ret_rules, ResolveNameTiming resolve_name_timing);
int udev_rules_parse_file(UdevRules *rules, const char *filename);
UdevRules* udev_rules_new(ResolveNameTiming resolve_name_timing);
int udev_rules_load(UdevRules **ret_rules, ResolveNameTiming resolve_name_timing);
UdevRules *udev_rules_free(UdevRules *rules);
DEFINE_TRIVIAL_CLEANUP_FUNC(UdevRules*, udev_rules_free);
+1 -1
View File
@@ -123,7 +123,7 @@ int test_main(int argc, char *argv[], void *userdata) {
udev_builtin_init();
r = udev_rules_new(&rules, arg_resolve_name_timing);
r = udev_rules_load(&rules, arg_resolve_name_timing);
if (r < 0) {
log_error_errno(r, "Failed to read udev rules: %m");
goto out;
+2 -2
View File
@@ -925,7 +925,7 @@ static void event_queue_start(Manager *manager) {
udev_builtin_init();
if (!manager->rules) {
r = udev_rules_new(&manager->rules, arg_resolve_name_timing);
r = udev_rules_load(&manager->rules, arg_resolve_name_timing);
if (r < 0) {
log_warning_errno(r, "Failed to read udev rules: %m");
return;
@@ -1787,7 +1787,7 @@ static int main_loop(Manager *manager) {
udev_builtin_init();
r = udev_rules_new(&manager->rules, arg_resolve_name_timing);
r = udev_rules_load(&manager->rules, arg_resolve_name_timing);
if (!manager->rules)
return log_error_errno(r, "Failed to read udev rules: %m");