mirror of
https://github.com/systemd/systemd.git
synced 2024-12-04 15:53:41 +08:00
bootspec: drop ".conf" from BootEntry.filename
The boot loader systemd-boot removes ".conf" from file name of entry configs, and determine which entry is the default entry. However, bootspec, which is used by systemctl and bootctl did not remove ".conf", then sometimes bootctl marks wrong entry as default. This fixes the logic to choose the default entry in bootspec, to match the logic used in systemd-boot boot loader. Fixes #7727.
This commit is contained in:
parent
7629744a3d
commit
263195c6dd
@ -52,22 +52,30 @@ void boot_entry_free(BootEntry *entry) {
|
||||
}
|
||||
|
||||
int boot_entry_load(const char *path, BootEntry *entry) {
|
||||
_cleanup_(boot_entry_free) BootEntry tmp = {};
|
||||
_cleanup_fclose_ FILE *f = NULL;
|
||||
unsigned line = 1;
|
||||
_cleanup_(boot_entry_free) BootEntry tmp = {};
|
||||
char *b, *c;
|
||||
int r;
|
||||
|
||||
assert(path);
|
||||
assert(entry);
|
||||
|
||||
c = endswith_no_case(path, ".conf");
|
||||
if (!c) {
|
||||
log_error("Invalid loader entry filename: %s", path);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
b = basename(path);
|
||||
tmp.filename = strndup(b, c - b);
|
||||
if (!tmp.filename)
|
||||
return log_oom();
|
||||
|
||||
f = fopen(path, "re");
|
||||
if (!f)
|
||||
return log_error_errno(errno, "Failed to open \"%s\": %m", path);
|
||||
|
||||
tmp.filename = strdup(basename(path));
|
||||
if (!tmp.filename)
|
||||
return log_oom();
|
||||
|
||||
for (;;) {
|
||||
_cleanup_free_ char *buf = NULL;
|
||||
char *p;
|
||||
|
Loading…
Reference in New Issue
Block a user