]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sysupdate: split out reading of feature files into separate helper
authorLennart Poettering <lennart@amutable.com>
Thu, 18 Jun 2026 15:30:35 +0000 (17:30 +0200)
committerLennart Poettering <lennart@amutable.com>
Fri, 3 Jul 2026 14:09:49 +0000 (16:09 +0200)
This is preparation for later adding a per-component metadata file, so
that we can have nicely symmetric functions for this.

src/sysupdate/sysupdate.c

index 099ec18c6a21476edb20e9452e9a05f57fdadbf5..789a9e48e93fcca6075a3231b441b05d32af75cb 100644 (file)
@@ -179,6 +179,49 @@ static void server_done(Server *s) {
 
 static DEFINE_POINTER_ARRAY_FREE_FUNC(Transfer*, transfer_free);
 
+static int read_features(
+                Context *c,
+                const char **dirs) {
+
+        int r;
+
+        assert(c);
+
+        ConfFile **files = NULL;
+        size_t n_files = 0;
+        CLEANUP_ARRAY(files, n_files, conf_file_free_array);
+
+        r = conf_files_list_strv_full(
+                        ".feature",
+                        c->root,
+                        CONF_FILES_REGULAR|CONF_FILES_FILTER_MASKED|CONF_FILES_WARN,
+                        dirs,
+                        &files,
+                        &n_files);
+        if (r < 0)
+                return log_error_errno(r, "Failed to enumerate sysupdate.d/*.feature definitions: %m");
+
+        FOREACH_ARRAY(i, files, n_files) {
+                ConfFile *e = *i;
+
+                _cleanup_(feature_unrefp) Feature *f = feature_new();
+                if (!f)
+                        return log_oom();
+
+                r = feature_read_definition(f, c->root, e->result, dirs);
+                if (r < 0)
+                        return r;
+
+                r = hashmap_ensure_put(&c->features, &feature_hash_ops, f->id, f);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to insert feature '%s' into map: %m", f->id);
+
+                TAKE_PTR(f);
+        }
+
+        return 0;
+}
+
 static int read_definitions(
                 Context *c,
                 const char **dirs,
@@ -272,34 +315,9 @@ static int context_read_definitions(Context *c, const char* node, ReadDefinition
         if (!dirs)
                 return log_oom();
 
-        ConfFile **files = NULL;
-        size_t n_files = 0;
-
-        CLEANUP_ARRAY(files, n_files, conf_file_free_array);
-
-        r = conf_files_list_strv_full(".feature", c->root,
-                                      CONF_FILES_REGULAR|CONF_FILES_FILTER_MASKED|CONF_FILES_WARN,
-                                      (const char**) dirs, &files, &n_files);
+        r = read_features(c, (const char**) dirs);
         if (r < 0)
-                return log_error_errno(r, "Failed to enumerate sysupdate.d/*.feature definitions: %m");
-
-        FOREACH_ARRAY(i, files, n_files) {
-                _cleanup_(feature_unrefp) Feature *f = NULL;
-                ConfFile *e = *i;
-
-                f = feature_new();
-                if (!f)
-                        return log_oom();
-
-                r = feature_read_definition(f, c->root, e->result, (const char**) dirs);
-                if (r < 0)
-                        return r;
-
-                r = hashmap_ensure_put(&c->features, &feature_hash_ops, f->id, f);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to insert feature '%s' into map: %m", f->id);
-                TAKE_PTR(f);
-        }
+                return r;
 
         r = read_definitions(c, (const char**) dirs, ".transfer", node);
         if (r < 0)