bootctl: make bootspec-util.c independent of bootctl.c

This changes boot_config_load_and_select() to also take the root path as
input, just like the ESP and XBOOTLDR path.

This has the benefit of making the whole file independent of bootctl.c,
which means we can link it into a separate test, and is preparatory work
for a follow-up commit.
This commit is contained in:
Lennart Poettering
2026-04-17 18:52:35 +02:00
parent f85415498c
commit b54af7ce9a
5 changed files with 13 additions and 10 deletions
+1 -1
View File
@@ -109,7 +109,7 @@ int verb_cleanup(int argc, char *argv[], uintptr_t _data, void *userdata) {
return r;
_cleanup_(boot_config_free) BootConfig config = BOOT_CONFIG_NULL;
r = boot_config_load_and_select(&config, arg_esp_path, esp_devid, arg_xbootldr_path, xbootldr_devid);
r = boot_config_load_and_select(&config, arg_root, arg_esp_path, esp_devid, arg_xbootldr_path, xbootldr_devid);
if (r < 0)
return r;
+7 -5
View File
@@ -615,9 +615,11 @@ int verb_status(int argc, char *argv[], uintptr_t _data, void *userdata) {
if (arg_esp_path || arg_xbootldr_path) {
_cleanup_(boot_config_free) BootConfig config = BOOT_CONFIG_NULL;
k = boot_config_load_and_select(&config,
arg_esp_path, esp_devid,
arg_xbootldr_path, xbootldr_devid);
k = boot_config_load_and_select(
&config,
arg_root,
arg_esp_path, esp_devid,
arg_xbootldr_path, xbootldr_devid);
RET_GATHER(r, k);
if (k >= 0)
@@ -654,7 +656,7 @@ int verb_list(int argc, char *argv[], uintptr_t _data, void *userdata) {
if (r < 0)
return r;
r = boot_config_load_and_select(&config, arg_esp_path, esp_devid, arg_xbootldr_path, xbootldr_devid);
r = boot_config_load_and_select(&config, arg_root, arg_esp_path, esp_devid, arg_xbootldr_path, xbootldr_devid);
if (r < 0)
return r;
@@ -700,7 +702,7 @@ int vl_method_list_boot_entries(sd_varlink *link, sd_json_variant *parameters, s
if (r < 0)
return r;
r = boot_config_load_and_select(&config, arg_esp_path, esp_devid, arg_xbootldr_path, xbootldr_devid);
r = boot_config_load_and_select(&config, arg_root, arg_esp_path, esp_devid, arg_xbootldr_path, xbootldr_devid);
if (r < 0)
return r;
+1
View File
@@ -227,6 +227,7 @@ int verb_unlink(int argc, char *argv[], uintptr_t _data, void *userdata) {
_cleanup_(boot_config_free) BootConfig config = BOOT_CONFIG_NULL;
r = boot_config_load_and_select(
&config,
arg_root,
arg_esp_path,
esp_devid,
arg_xbootldr_path,
+3 -3
View File
@@ -1,6 +1,5 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include "bootctl.h"
#include "bootspec-util.h"
#include "devnum-util.h"
#include "efi-loader.h"
@@ -10,6 +9,7 @@
int boot_config_load_and_select(
BootConfig *config,
const char *root,
const char *esp_path,
dev_t esp_devid,
const char *xbootldr_path,
@@ -25,7 +25,7 @@ int boot_config_load_and_select(
if (r < 0)
return r;
if (!arg_root) {
if (!root) {
_cleanup_strv_free_ char **efi_entries = NULL;
r = efi_loader_get_entries(&efi_entries);
@@ -37,5 +37,5 @@ int boot_config_load_and_select(
(void) boot_config_augment_from_loader(config, efi_entries, /* auto_only= */ false);
}
return boot_config_select_special_entries(config, /* skip_efivars= */ !!arg_root);
return boot_config_select_special_entries(config, /* skip_efivars= */ !!root);
}
+1 -1
View File
@@ -3,4 +3,4 @@
#include "bootspec.h"
int boot_config_load_and_select(BootConfig *config, const char *esp_path, dev_t esp_devid, const char *xbootldr_path, dev_t xbootldr_devid);
int boot_config_load_and_select(BootConfig *config, const char *root, const char *esp_path, dev_t esp_devid, const char *xbootldr_path, dev_t xbootldr_devid);