]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
bootspec: parse/show devicetree-overlay field too
authorLennart Poettering <lennart@poettering.net>
Fri, 11 Feb 2022 13:12:09 +0000 (14:12 +0100)
committerLennart Poettering <lennart@poettering.net>
Mon, 14 Feb 2022 14:44:07 +0000 (15:44 +0100)
It has been defined in the boot loader spec, and is the only field we
currently don't parse, hence fix that.

src/boot/bootctl.c
src/shared/bootspec.c
src/shared/bootspec.h

index edc9ef4be969706d2944fb74ffb9e232fdc59314..d94a2a586ba5e88f79d54117a372c15cb1b1dbb3 100644 (file)
@@ -450,6 +450,7 @@ static int boot_entry_show(const BootEntry *e, bool show_as_default) {
                                      e->root,
                                      *s,
                                      &status);
+
         if (!strv_isempty(e->options)) {
                 _cleanup_free_ char *t = NULL, *t2 = NULL;
                 _cleanup_strv_free_ char **ts = NULL;
@@ -468,9 +469,16 @@ static int boot_entry_show(const BootEntry *e, bool show_as_default) {
 
                 printf("      options: %s\n", t2);
         }
+
         if (e->device_tree)
                 boot_entry_file_list("devicetree", e->root, e->device_tree, &status);
 
+        STRV_FOREACH(s, e->device_tree_overlay)
+                boot_entry_file_list(s == e->device_tree_overlay ? "devicetree-overlay" : NULL,
+                                     e->root,
+                                     *s,
+                                     &status);
+
         return -status;
 }
 
index 1f2bab3fb84d13a436cbc9ee8431a35ed4f1b98c..cbc356e47222f9ba512a508a6465058ae173dafc 100644 (file)
@@ -51,6 +51,7 @@ static void boot_entry_free(BootEntry *entry) {
         free(entry->efi);
         strv_free(entry->initrd);
         free(entry->device_tree);
+        strv_free(entry->device_tree_overlay);
 }
 
 static int boot_entry_load(
@@ -144,7 +145,15 @@ static int boot_entry_load(
                         r = strv_extend(&tmp.initrd, p);
                 else if (streq(field, "devicetree"))
                         r = free_and_strdup(&tmp.device_tree, p);
-                else {
+                else if (streq(field, "devicetree-overlay")) {
+                        _cleanup_strv_free_ char **l = NULL;
+
+                        l = strv_split(p, NULL);
+                        if (!l)
+                                return log_oom();
+
+                        r = strv_extend_strv(&tmp.device_tree_overlay, l, false);
+                } else {
                         log_notice("%s:%u: Unknown line \"%s\", ignoring.", path, line, field);
                         continue;
                 }
index 81845f47e37c749c650564a02e113bd738bbc13f..8032c99ed5ec2c5c454c27c89dd31b9c63d785c5 100644 (file)
@@ -34,6 +34,7 @@ typedef struct BootEntry {
         char *efi;
         char **initrd;
         char *device_tree;
+        char **device_tree_overlay;
 } BootEntry;
 
 typedef struct BootConfig {