bootspec: fix string table naming for BootEntryType/BootEntrySource (#38106)
This was all very confusing and not matching our coding style recommendations. Let's fix that. Prompted by #37897, which really should make use of BootEntryType, but we better clean it up first.
This commit is contained in:
+26
-26
@@ -32,37 +32,37 @@
|
||||
#include "strv.h"
|
||||
#include "uki.h"
|
||||
|
||||
static const char* const boot_entry_type_description_table[_BOOT_ENTRY_TYPE_MAX] = {
|
||||
[BOOT_ENTRY_TYPE1] = "Boot Loader Specification Type #1 (.conf)",
|
||||
[BOOT_ENTRY_TYPE2] = "Boot Loader Specification Type #2 (UKI, .efi)",
|
||||
[BOOT_ENTRY_LOADER] = "Reported by Boot Loader",
|
||||
[BOOT_ENTRY_AUTO] = "Automatic",
|
||||
};
|
||||
|
||||
DEFINE_STRING_TABLE_LOOKUP_TO_STRING(boot_entry_type_description, BootEntryType);
|
||||
|
||||
static const char* const boot_entry_type_table[_BOOT_ENTRY_TYPE_MAX] = {
|
||||
[BOOT_ENTRY_CONF] = "Boot Loader Specification Type #1 (.conf)",
|
||||
[BOOT_ENTRY_UNIFIED] = "Boot Loader Specification Type #2 (.efi)",
|
||||
[BOOT_ENTRY_LOADER] = "Reported by Boot Loader",
|
||||
[BOOT_ENTRY_LOADER_AUTO] = "Automatic",
|
||||
[BOOT_ENTRY_TYPE1] = "type1",
|
||||
[BOOT_ENTRY_TYPE2] = "type2",
|
||||
[BOOT_ENTRY_LOADER] = "loader",
|
||||
[BOOT_ENTRY_AUTO] = "auto",
|
||||
};
|
||||
|
||||
DEFINE_STRING_TABLE_LOOKUP_TO_STRING(boot_entry_type, BootEntryType);
|
||||
|
||||
static const char* const boot_entry_type_json_table[_BOOT_ENTRY_TYPE_MAX] = {
|
||||
[BOOT_ENTRY_CONF] = "type1",
|
||||
[BOOT_ENTRY_UNIFIED] = "type2",
|
||||
[BOOT_ENTRY_LOADER] = "loader",
|
||||
[BOOT_ENTRY_LOADER_AUTO] = "auto",
|
||||
};
|
||||
|
||||
DEFINE_STRING_TABLE_LOOKUP_TO_STRING(boot_entry_type_json, BootEntryType);
|
||||
|
||||
static const char* const boot_entry_source_table[_BOOT_ENTRY_SOURCE_MAX] = {
|
||||
static const char* const boot_entry_source_description_table[_BOOT_ENTRY_SOURCE_MAX] = {
|
||||
[BOOT_ENTRY_ESP] = "EFI System Partition",
|
||||
[BOOT_ENTRY_XBOOTLDR] = "Extended Boot Loader Partition",
|
||||
};
|
||||
|
||||
DEFINE_STRING_TABLE_LOOKUP_TO_STRING(boot_entry_source, BootEntrySource);
|
||||
DEFINE_STRING_TABLE_LOOKUP_TO_STRING(boot_entry_source_description, BootEntrySource);
|
||||
|
||||
static const char* const boot_entry_source_json_table[_BOOT_ENTRY_SOURCE_MAX] = {
|
||||
static const char* const boot_entry_source_table[_BOOT_ENTRY_SOURCE_MAX] = {
|
||||
[BOOT_ENTRY_ESP] = "esp",
|
||||
[BOOT_ENTRY_XBOOTLDR] = "xbootldr",
|
||||
};
|
||||
|
||||
DEFINE_STRING_TABLE_LOOKUP_TO_STRING(boot_entry_source_json, BootEntrySource);
|
||||
DEFINE_STRING_TABLE_LOOKUP_TO_STRING(boot_entry_source, BootEntrySource);
|
||||
|
||||
static void boot_entry_addons_done(BootEntryAddons *addons) {
|
||||
assert(addons);
|
||||
@@ -319,7 +319,7 @@ static int boot_entry_load_type1(
|
||||
const char *fname,
|
||||
BootEntry *ret) {
|
||||
|
||||
_cleanup_(boot_entry_free) BootEntry tmp = BOOT_ENTRY_INIT(BOOT_ENTRY_CONF, source);
|
||||
_cleanup_(boot_entry_free) BootEntry tmp = BOOT_ENTRY_INIT(BOOT_ENTRY_TYPE1, source);
|
||||
char *c;
|
||||
int r;
|
||||
|
||||
@@ -759,7 +759,7 @@ static int boot_entry_load_unified(
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to extract file name from '%s': %m", path);
|
||||
|
||||
_cleanup_(boot_entry_free) BootEntry tmp = BOOT_ENTRY_INIT(BOOT_ENTRY_UNIFIED, source);
|
||||
_cleanup_(boot_entry_free) BootEntry tmp = BOOT_ENTRY_INIT(BOOT_ENTRY_TYPE2, source);
|
||||
|
||||
r = boot_filename_extract_tries(fname, &tmp.id, &tmp.tries_left, &tmp.tries_done);
|
||||
if (r < 0)
|
||||
@@ -1620,7 +1620,7 @@ int boot_config_augment_from_loader(
|
||||
return log_oom();
|
||||
|
||||
config->entries[config->n_entries++] = (BootEntry) {
|
||||
.type = startswith(*i, "auto-") ? BOOT_ENTRY_LOADER_AUTO : BOOT_ENTRY_LOADER,
|
||||
.type = startswith(*i, "auto-") ? BOOT_ENTRY_AUTO : BOOT_ENTRY_LOADER,
|
||||
.id = TAKE_PTR(c),
|
||||
.title = TAKE_PTR(t),
|
||||
.path = TAKE_PTR(p),
|
||||
@@ -1823,7 +1823,7 @@ int show_boot_entry(
|
||||
assert(e);
|
||||
|
||||
printf(" type: %s\n",
|
||||
boot_entry_type_to_string(e->type));
|
||||
boot_entry_type_description_to_string(e->type));
|
||||
|
||||
printf(" title: %s%s%s",
|
||||
ansi_highlight(), boot_entry_title(e), ansi_normal());
|
||||
@@ -1840,7 +1840,7 @@ int show_boot_entry(
|
||||
if (e->type == BOOT_ENTRY_LOADER)
|
||||
printf(" %s(reported/absent)%s",
|
||||
ansi_highlight_red(), ansi_normal());
|
||||
else if (!e->reported_by_loader && e->type != BOOT_ENTRY_LOADER_AUTO)
|
||||
else if (!e->reported_by_loader && e->type != BOOT_ENTRY_AUTO)
|
||||
printf(" %s(not reported/new)%s",
|
||||
ansi_highlight_green(), ansi_normal());
|
||||
}
|
||||
@@ -1867,12 +1867,12 @@ int show_boot_entry(
|
||||
|
||||
/* Let's urlify the link to make it easy to view in an editor, but only if it is a text
|
||||
* file. Unified images are binary ELFs, and EFI variables are not pure text either. */
|
||||
if (e->type == BOOT_ENTRY_CONF)
|
||||
if (e->type == BOOT_ENTRY_TYPE1)
|
||||
(void) terminal_urlify_path(e->path, text, &link);
|
||||
|
||||
printf(" source: %s (on the %s)\n",
|
||||
link ?: text ?: e->path,
|
||||
boot_entry_source_to_string(e->source));
|
||||
boot_entry_source_description_to_string(e->source));
|
||||
}
|
||||
if (e->tries_left != UINT_MAX) {
|
||||
printf(" tries: %u left", e->tries_left);
|
||||
@@ -1942,8 +1942,8 @@ int boot_entry_to_json(const BootConfig *c, size_t i, sd_json_variant **ret) {
|
||||
|
||||
r = sd_json_variant_merge_objectbo(
|
||||
&v,
|
||||
SD_JSON_BUILD_PAIR("type", SD_JSON_BUILD_STRING(boot_entry_type_json_to_string(e->type))),
|
||||
SD_JSON_BUILD_PAIR("source", SD_JSON_BUILD_STRING(boot_entry_source_json_to_string(e->source))),
|
||||
SD_JSON_BUILD_PAIR("type", SD_JSON_BUILD_STRING(boot_entry_type_to_string(e->type))),
|
||||
SD_JSON_BUILD_PAIR("source", SD_JSON_BUILD_STRING(boot_entry_source_to_string(e->source))),
|
||||
SD_JSON_BUILD_PAIR_CONDITION(!!e->id, "id", SD_JSON_BUILD_STRING(e->id)),
|
||||
SD_JSON_BUILD_PAIR_CONDITION(!!e->path, "path", SD_JSON_BUILD_STRING(e->path)),
|
||||
SD_JSON_BUILD_PAIR_CONDITION(!!e->root, "root", SD_JSON_BUILD_STRING(e->root)),
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
#include "forward.h"
|
||||
|
||||
typedef enum BootEntryType {
|
||||
BOOT_ENTRY_CONF, /* Boot Loader Specification Type #1 entries: *.conf files */
|
||||
BOOT_ENTRY_UNIFIED, /* Boot Loader Specification Type #2 entries: *.efi files */
|
||||
BOOT_ENTRY_LOADER, /* Additional entries augmented from LoaderEntries EFI variable (regular entries) */
|
||||
BOOT_ENTRY_LOADER_AUTO, /* Additional entries augmented from LoaderEntries EFI variable (special "automatic" entries) */
|
||||
BOOT_ENTRY_TYPE1, /* Boot Loader Specification Type #1 entries: *.conf files */
|
||||
BOOT_ENTRY_TYPE2, /* Boot Loader Specification Type #2 entries: *.efi files (UKIs) */
|
||||
BOOT_ENTRY_LOADER, /* Additional entries augmented from LoaderEntries EFI variable (regular entries) */
|
||||
BOOT_ENTRY_AUTO, /* Additional entries augmented from LoaderEntries EFI variable (special "automatic" entries) */
|
||||
_BOOT_ENTRY_TYPE_MAX,
|
||||
_BOOT_ENTRY_TYPE_INVALID = -EINVAL,
|
||||
} BootEntryType;
|
||||
@@ -91,11 +91,11 @@ typedef struct BootConfig {
|
||||
.selected_entry = -1, \
|
||||
}
|
||||
|
||||
const char* boot_entry_type_description_to_string(BootEntryType) _const_;
|
||||
const char* boot_entry_type_to_string(BootEntryType) _const_;
|
||||
const char* boot_entry_type_json_to_string(BootEntryType) _const_;
|
||||
|
||||
const char* boot_entry_source_description_to_string(BootEntrySource) _const_;
|
||||
const char* boot_entry_source_to_string(BootEntrySource) _const_;
|
||||
const char* boot_entry_source_json_to_string(BootEntrySource) _const_;
|
||||
|
||||
BootEntry* boot_config_find_entry(BootConfig *config, const char *id);
|
||||
|
||||
|
||||
@@ -1350,7 +1350,7 @@ static int discover_boot_entry(const char *root, char **ret_linux, char ***ret_i
|
||||
|
||||
const BootEntry *boot_entry = boot_config_default_entry(&config);
|
||||
|
||||
if (boot_entry && !IN_SET(boot_entry->type, BOOT_ENTRY_UNIFIED, BOOT_ENTRY_CONF))
|
||||
if (boot_entry && !IN_SET(boot_entry->type, BOOT_ENTRY_TYPE1, BOOT_ENTRY_TYPE2))
|
||||
boot_entry = NULL;
|
||||
|
||||
/* If we cannot determine a default entry search for UKIs (Type #2 EFI Unified Kernel Images)
|
||||
@@ -1358,14 +1358,14 @@ static int discover_boot_entry(const char *root, char **ret_linux, char ***ret_i
|
||||
* https://uapi-group.org/specifications/specs/boot_loader_specification */
|
||||
if (!boot_entry)
|
||||
FOREACH_ARRAY(entry, config.entries, config.n_entries)
|
||||
if (entry->type == BOOT_ENTRY_UNIFIED) {
|
||||
if (entry->type == BOOT_ENTRY_TYPE2) { /* UKI */
|
||||
boot_entry = entry;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!boot_entry)
|
||||
FOREACH_ARRAY(entry, config.entries, config.n_entries)
|
||||
if (entry->type == BOOT_ENTRY_CONF) {
|
||||
if (entry->type == BOOT_ENTRY_TYPE1) { /* .conf */
|
||||
boot_entry = entry;
|
||||
break;
|
||||
}
|
||||
@@ -1373,15 +1373,15 @@ static int discover_boot_entry(const char *root, char **ret_linux, char ***ret_i
|
||||
if (!boot_entry)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(ENOENT), "Failed to discover any boot entries.");
|
||||
|
||||
log_debug("Discovered boot entry %s (%s)", boot_entry->id, boot_entry_type_to_string(boot_entry->type));
|
||||
log_debug("Discovered boot entry %s (%s)", boot_entry->id, boot_entry_type_description_to_string(boot_entry->type));
|
||||
|
||||
_cleanup_free_ char *linux_kernel = NULL;
|
||||
_cleanup_strv_free_ char **initrds = NULL;
|
||||
if (boot_entry->type == BOOT_ENTRY_UNIFIED) {
|
||||
if (boot_entry->type == BOOT_ENTRY_TYPE2) { /* UKI */
|
||||
linux_kernel = path_join(boot_entry->root, boot_entry->kernel);
|
||||
if (!linux_kernel)
|
||||
return log_oom();
|
||||
} else if (boot_entry->type == BOOT_ENTRY_CONF) {
|
||||
} else if (boot_entry->type == BOOT_ENTRY_TYPE1) { /* .conf */
|
||||
linux_kernel = path_join(boot_entry->root, boot_entry->kernel);
|
||||
if (!linux_kernel)
|
||||
return log_oom();
|
||||
|
||||
Reference in New Issue
Block a user