]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev: split rules object creation and loading
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 23 Jun 2020 15:58:33 +0000 (17:58 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 23 Jun 2020 16:04:18 +0000 (18:04 +0200)
The only functional change is to downgrade the log line to avoid double
logging.

src/fuzz/fuzz-udev-rules.c
src/test/test-udev.c
src/udev/udev-rules.c
src/udev/udev-rules.h
src/udev/udevadm-test.c
src/udev/udevd.c

index 3194f7aa8833c5bed11dd817aa2b940c06269934..a4a1adec3e6784f3798f58fa7ba103df1a7bd594 100644 (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;
index 2c32f898c6573e7d36db76539d4b98dbba72bd26..493d6df2a834981c14ff20d11f9492322b78f466 100644 (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);
index 1b501da39f14abd3f0ce29de7fd6a095e90082f8..95951bceef5df8129c7d76396ac1a9efa88d9da5 100644 (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;
index 6d94a468c33cfe264c2ab5d7a0773dc5c1696eb7..cdb98e8ceccf4bc3be58f9791b0dafde73e73401 100644 (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);
 
index 3f8bdc281206a790f487fe9ab451bc40c8e12bca..5b9b65439ad30f5c4ce8fed9259f1f243b7e557f 100644 (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;
index d86c1484c3e925f1b80c4c45c2cf5c092b1fbc99..db24caf00d4dd3b9252724b21f3ec7d2c5ea2bb2 100644 (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");