From: Zbigniew Jędrzejewski-Szmek Date: Fri, 6 May 2022 12:44:05 +0000 (+0200) Subject: shared/bootspec: also export boot_config_load_type1() X-Git-Tag: v251-rc3~39^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a847b539de828bf7e877cf0f8a014a8360d32a79;p=thirdparty%2Fsystemd.git shared/bootspec: also export boot_config_load_type1() The reallocation of memory and counter incrementation is moved from the only caller to the function. This way the callers can remain oblivious of the BootConfig internals. --- diff --git a/src/shared/bootspec.c b/src/shared/bootspec.c index 7215c9fc142..50875021d42 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 3ff593a23f7..ff54cc2e848 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);