summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/shared/bootspec.c36
-rw-r--r--src/shared/bootspec.h7
2 files changed, 35 insertions, 8 deletions
diff --git a/src/shared/bootspec.c b/src/shared/bootspec.c
index 7215c9fc14..50875021d4 100644
--- a/src/shared/bootspec.c
+++ b/src/shared/bootspec.c
@@ -168,6 +168,31 @@ static int boot_entry_load_type1(
return 0;
}
+int boot_config_load_type1(
+ BootConfig *config,
+ FILE *f,
+ const char *root,
+ const char *dir,
+ const char *id) {
+ int r;
+
+ assert(config);
+ assert(f);
+ assert(root);
+ assert(dir);
+ assert(id);
+
+ if (!GREEDY_REALLOC0(config->entries, config->n_entries + 1))
+ return log_oom();
+
+ r = boot_entry_load_type1(f, root, dir, id, config->entries + config->n_entries);
+ if (r < 0)
+ return r;
+
+ config->n_entries++;
+ return 0;
+}
+
void boot_config_free(BootConfig *config) {
assert(config);
@@ -397,14 +422,9 @@ static int boot_entries_find_type1(
if (r == 0) /* inode already seen or otherwise not relevant */
continue;
- if (!GREEDY_REALLOC0(config->entries, config->n_entries + 1))
- return log_oom();
-
- r = boot_entry_load_type1(f, root, dir, de->d_name, config->entries + config->n_entries);
- if (r < 0)
- continue;
-
- config->n_entries++;
+ r = boot_config_load_type1(config, f, root, dir, de->d_name);
+ if (r == -ENOMEM)
+ return r;
}
return 0;
diff --git a/src/shared/bootspec.h b/src/shared/bootspec.h
index 3ff593a23f..ff54cc2e84 100644
--- a/src/shared/bootspec.h
+++ b/src/shared/bootspec.h
@@ -88,6 +88,13 @@ void boot_config_free(BootConfig *config);
int boot_loader_read_conf(BootConfig *config, FILE *file, const char *path);
+int boot_config_load_type1(
+ BootConfig *config,
+ FILE *f,
+ const char *root,
+ const char *dir,
+ const char *id);
+
int boot_config_finalize(BootConfig *config);
int boot_config_load(BootConfig *config, const char *esp_path, const char *xbootldr_path);
int boot_config_load_auto(BootConfig *config, const char *override_esp_path, const char *override_xbootldr_path);