summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Manley <will@stb-tester.com>2020-07-14 12:53:17 +0100
committerWilliam Manley <will@stb-tester.com>2020-10-26 23:51:11 +0000
commita8dce46b5fb7d19e554ecaec994f51f4269de9ea (patch)
tree58738fbd5aed29cad2c63e20828bf183a85d939c
parent31acd2ef99acd43c165b3678cfc4a5076a4fc5c0 (diff)
downloadostree-a8dce46b5fb7d19e554ecaec994f51f4269de9ea.tar.gz
Refactor `ostree_sysroot_query_bootloader`
This is more regular, so will make it easier to add more bootloader types in the future.
-rw-r--r--src/libostree/ostree-sysroot.c96
1 files changed, 47 insertions, 49 deletions
diff --git a/src/libostree/ostree-sysroot.c b/src/libostree/ostree-sysroot.c
index 265d39d1..a69984b7 100644
--- a/src/libostree/ostree-sysroot.c
+++ b/src/libostree/ostree-sysroot.c
@@ -1325,6 +1325,31 @@ ostree_sysroot_repo (OstreeSysroot *self)
return self->repo;
}
+static OstreeBootloader*
+_ostree_sysroot_new_bootloader_by_type (
+ OstreeSysroot *sysroot,
+ OstreeCfgSysrootBootloaderOpt bl_type)
+{
+ switch (bl_type)
+ {
+ case CFG_SYSROOT_BOOTLOADER_OPT_NONE:
+ /* No bootloader specified; do not query bootloaders to run. */
+ return NULL;
+ case CFG_SYSROOT_BOOTLOADER_OPT_GRUB2:
+ return (OstreeBootloader*) _ostree_bootloader_grub2_new (sysroot);
+ case CFG_SYSROOT_BOOTLOADER_OPT_SYSLINUX:
+ return (OstreeBootloader*) _ostree_bootloader_syslinux_new (sysroot);
+ case CFG_SYSROOT_BOOTLOADER_OPT_UBOOT:
+ return (OstreeBootloader*) _ostree_bootloader_uboot_new (sysroot);
+ case CFG_SYSROOT_BOOTLOADER_OPT_ZIPL:
+ /* We never consider zipl as active by default, so it can only be created
+ * if it's explicitly requested in the config */
+ return (OstreeBootloader*) _ostree_bootloader_zipl_new (sysroot);
+ default:
+ g_assert_not_reached ();
+ }
+}
+
/**
* ostree_sysroot_query_bootloader:
* @sysroot: Sysroot
@@ -1346,58 +1371,31 @@ _ostree_sysroot_query_bootloader (OstreeSysroot *sysroot,
CFG_SYSROOT_BOOTLOADER_OPTS_STR[bootloader_config]);
g_autoptr(OstreeBootloader) ret_loader = NULL;
- switch (repo->bootloader)
+ if (bootloader_config == CFG_SYSROOT_BOOTLOADER_OPT_AUTO)
{
- case CFG_SYSROOT_BOOTLOADER_OPT_NONE:
- /* No bootloader specified; do not query bootloaders to run. */
- ret_loader = NULL;
- break;
- case CFG_SYSROOT_BOOTLOADER_OPT_GRUB2:
- ret_loader = (OstreeBootloader*) _ostree_bootloader_grub2_new (sysroot);
- break;
- case CFG_SYSROOT_BOOTLOADER_OPT_SYSLINUX:
- ret_loader = (OstreeBootloader*) _ostree_bootloader_syslinux_new (sysroot);
- break;
- case CFG_SYSROOT_BOOTLOADER_OPT_UBOOT:
- ret_loader = (OstreeBootloader*) _ostree_bootloader_uboot_new (sysroot);
- break;
- case CFG_SYSROOT_BOOTLOADER_OPT_ZIPL:
- /* We never consider zipl as active by default, so it can only be created
- * if it's explicitly requested in the config */
- ret_loader = (OstreeBootloader*) _ostree_bootloader_zipl_new (sysroot);
- break;
- case CFG_SYSROOT_BOOTLOADER_OPT_AUTO:
- {
- gboolean is_active;
- ret_loader = (OstreeBootloader*)_ostree_bootloader_syslinux_new (sysroot);
- if (!_ostree_bootloader_query (ret_loader, &is_active,
- cancellable, error))
- return FALSE;
-
- if (!is_active)
- {
- g_object_unref (ret_loader);
- ret_loader = (OstreeBootloader*)_ostree_bootloader_grub2_new (sysroot);
- if (!_ostree_bootloader_query (ret_loader, &is_active,
- cancellable, error))
- return FALSE;
- }
- if (!is_active)
- {
- g_object_unref (ret_loader);
- ret_loader = (OstreeBootloader*)_ostree_bootloader_uboot_new (sysroot);
- if (!_ostree_bootloader_query (ret_loader, &is_active, cancellable, error))
- return FALSE;
- }
- if (!is_active)
- g_clear_object (&ret_loader);
- break;
- }
- default:
- g_assert_not_reached ();
+ OstreeCfgSysrootBootloaderOpt probe[] = {
+ CFG_SYSROOT_BOOTLOADER_OPT_SYSLINUX,
+ CFG_SYSROOT_BOOTLOADER_OPT_GRUB2,
+ CFG_SYSROOT_BOOTLOADER_OPT_UBOOT,
+ };
+ for (int i = 0; i < G_N_ELEMENTS (probe); i++)
+ {
+ g_autoptr(OstreeBootloader) bl = _ostree_sysroot_new_bootloader_by_type (
+ sysroot, probe[i]);
+ gboolean is_active = FALSE;
+ if (!_ostree_bootloader_query (bl, &is_active, cancellable, error))
+ return FALSE;
+ if (is_active)
+ {
+ ret_loader = g_steal_pointer (&bl);
+ break;
+ }
+ }
}
+ else
+ ret_loader = _ostree_sysroot_new_bootloader_by_type (sysroot, bootloader_config);
- ot_transfer_out_value(out_bootloader, &ret_loader);
+ ot_transfer_out_value (out_bootloader, &ret_loader)
return TRUE;
}