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;
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);
}
}
-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;
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;
_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);
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;
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;
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");