Refactor: sysroot.bootloader: Store enum value rather than string
It's easier to extend and it centralises the config parsing. In other places we will no longer need to use `g_str_equal` to match these values, a `switch` statement will be sufficient.
This commit is contained in:
parent
062df6ee81
commit
9482ecfe5a
|
|
@ -110,6 +110,22 @@ typedef enum {
|
||||||
_OSTREE_FEATURE_YES,
|
_OSTREE_FEATURE_YES,
|
||||||
} _OstreeFeatureSupport;
|
} _OstreeFeatureSupport;
|
||||||
|
|
||||||
|
/* Possible values for the sysroot.bootloader configuration variable */
|
||||||
|
typedef enum {
|
||||||
|
CFG_SYSROOT_BOOTLOADER_OPT_AUTO = 0,
|
||||||
|
CFG_SYSROOT_BOOTLOADER_OPT_NONE,
|
||||||
|
CFG_SYSROOT_BOOTLOADER_OPT_ZIPL,
|
||||||
|
/* Non-exhaustive */
|
||||||
|
} OstreeCfgSysrootBootloaderOpt;
|
||||||
|
|
||||||
|
static const char* const CFG_SYSROOT_BOOTLOADER_OPTS_STR[] = {
|
||||||
|
/* This must be kept in the same order as the enum */
|
||||||
|
"auto",
|
||||||
|
"none",
|
||||||
|
"zipl",
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* OstreeRepo:
|
* OstreeRepo:
|
||||||
*
|
*
|
||||||
|
|
@ -193,7 +209,7 @@ struct OstreeRepo {
|
||||||
guint64 payload_link_threshold;
|
guint64 payload_link_threshold;
|
||||||
gint fs_support_reflink; /* The underlying filesystem has support for ioctl (FICLONE..) */
|
gint fs_support_reflink; /* The underlying filesystem has support for ioctl (FICLONE..) */
|
||||||
gchar **repo_finders;
|
gchar **repo_finders;
|
||||||
gchar *bootloader; /* Configure which bootloader to use. */
|
OstreeCfgSysrootBootloaderOpt bootloader; /* Configure which bootloader to use. */
|
||||||
|
|
||||||
OstreeRepo *parent_repo;
|
OstreeRepo *parent_repo;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1048,7 +1048,6 @@ ostree_repo_finalize (GObject *object)
|
||||||
g_mutex_clear (&self->txn_lock);
|
g_mutex_clear (&self->txn_lock);
|
||||||
g_free (self->collection_id);
|
g_free (self->collection_id);
|
||||||
g_strfreev (self->repo_finders);
|
g_strfreev (self->repo_finders);
|
||||||
g_free (self->bootloader);
|
|
||||||
|
|
||||||
g_clear_pointer (&self->remotes, g_hash_table_destroy);
|
g_clear_pointer (&self->remotes, g_hash_table_destroy);
|
||||||
g_mutex_clear (&self->remotes_lock);
|
g_mutex_clear (&self->remotes_lock);
|
||||||
|
|
@ -3186,7 +3185,7 @@ reload_sysroot_config (OstreeRepo *self,
|
||||||
GCancellable *cancellable,
|
GCancellable *cancellable,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
{ g_autofree char *bootloader = NULL;
|
g_autofree char *bootloader = NULL;
|
||||||
|
|
||||||
if (!ot_keyfile_get_value_with_default_group_optional (self->config, "sysroot",
|
if (!ot_keyfile_get_value_with_default_group_optional (self->config, "sysroot",
|
||||||
"bootloader", "auto",
|
"bootloader", "auto",
|
||||||
|
|
@ -3197,17 +3196,17 @@ reload_sysroot_config (OstreeRepo *self,
|
||||||
* binary "x" in /usr/lib/ostree/bootloaders/x). See:
|
* binary "x" in /usr/lib/ostree/bootloaders/x). See:
|
||||||
* https://github.com/ostreedev/ostree/issues/1719
|
* https://github.com/ostreedev/ostree/issues/1719
|
||||||
* https://github.com/ostreedev/ostree/issues/1801
|
* https://github.com/ostreedev/ostree/issues/1801
|
||||||
* Also, dedup these strings with the bootloader implementations
|
|
||||||
*/
|
*/
|
||||||
if (!(g_str_equal (bootloader, "auto") || g_str_equal (bootloader, "none")
|
for (int i = 0; CFG_SYSROOT_BOOTLOADER_OPTS_STR[i]; i++)
|
||||||
|| g_str_equal (bootloader, "zipl")))
|
{
|
||||||
return glnx_throw (error, "Invalid bootloader configuration: '%s'", bootloader);
|
if (g_str_equal (bootloader, CFG_SYSROOT_BOOTLOADER_OPTS_STR[i]))
|
||||||
|
{
|
||||||
g_free (self->bootloader);
|
self->bootloader = (OstreeCfgSysrootBootloaderOpt) i;
|
||||||
self->bootloader = g_steal_pointer (&bootloader);
|
return TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return glnx_throw (error, "Invalid bootloader configuration: '%s'", bootloader);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -6331,7 +6330,7 @@ ostree_repo_get_bootloader (OstreeRepo *self)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (OSTREE_IS_REPO (self), NULL);
|
g_return_val_if_fail (OSTREE_IS_REPO (self), NULL);
|
||||||
|
|
||||||
return self->bootloader;
|
return CFG_SYSROOT_BOOTLOADER_OPTS_STR[self->bootloader];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1340,23 +1340,24 @@ _ostree_sysroot_query_bootloader (OstreeSysroot *sysroot,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
OstreeRepo *repo = ostree_sysroot_repo (sysroot);
|
OstreeRepo *repo = ostree_sysroot_repo (sysroot);
|
||||||
g_autofree gchar *bootloader_config = ostree_repo_get_bootloader (repo);
|
OstreeCfgSysrootBootloaderOpt bootloader_config = repo->bootloader;
|
||||||
|
|
||||||
g_debug ("Using bootloader configuration: %s", bootloader_config);
|
g_debug ("Using bootloader configuration: %s",
|
||||||
|
CFG_SYSROOT_BOOTLOADER_OPTS_STR[bootloader_config]);
|
||||||
|
|
||||||
g_autoptr(OstreeBootloader) ret_loader = NULL;
|
g_autoptr(OstreeBootloader) ret_loader = NULL;
|
||||||
if (g_str_equal (bootloader_config, "none"))
|
switch (repo->bootloader)
|
||||||
{
|
{
|
||||||
|
case CFG_SYSROOT_BOOTLOADER_OPT_NONE:
|
||||||
/* No bootloader specified; do not query bootloaders to run. */
|
/* No bootloader specified; do not query bootloaders to run. */
|
||||||
ret_loader = NULL;
|
ret_loader = NULL;
|
||||||
}
|
break;
|
||||||
else if (g_str_equal (bootloader_config, "zipl"))
|
case CFG_SYSROOT_BOOTLOADER_OPT_ZIPL:
|
||||||
{
|
|
||||||
/* We never consider zipl as active by default, so it can only be created
|
/* We never consider zipl as active by default, so it can only be created
|
||||||
* if it's explicitly requested in the config */
|
* if it's explicitly requested in the config */
|
||||||
ret_loader = (OstreeBootloader*) _ostree_bootloader_zipl_new (sysroot);
|
ret_loader = (OstreeBootloader*) _ostree_bootloader_zipl_new (sysroot);
|
||||||
}
|
break;
|
||||||
else if (g_str_equal (bootloader_config, "auto"))
|
case CFG_SYSROOT_BOOTLOADER_OPT_AUTO:
|
||||||
{
|
{
|
||||||
gboolean is_active;
|
gboolean is_active;
|
||||||
ret_loader = (OstreeBootloader*)_ostree_bootloader_syslinux_new (sysroot);
|
ret_loader = (OstreeBootloader*)_ostree_bootloader_syslinux_new (sysroot);
|
||||||
|
|
@ -1381,9 +1382,11 @@ _ostree_sysroot_query_bootloader (OstreeSysroot *sysroot,
|
||||||
}
|
}
|
||||||
if (!is_active)
|
if (!is_active)
|
||||||
g_clear_object (&ret_loader);
|
g_clear_object (&ret_loader);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else
|
default:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
|
}
|
||||||
|
|
||||||
ot_transfer_out_value(out_bootloader, &ret_loader);
|
ot_transfer_out_value(out_bootloader, &ret_loader);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue