diff --git a/src/bootloaders/shim-systemd.c b/src/bootloaders/shim-systemd.c index 06a9d11..a600d18 100644 --- a/src/bootloaders/shim-systemd.c +++ b/src/bootloaders/shim-systemd.c @@ -126,10 +126,9 @@ static bool shim_systemd_remove_kernel(const BootManager *manager, const Kernel } static bool shim_systemd_set_default_kernel(const BootManager *manager, const Kernel *kernel) { - (void)manager; - (void)kernel; - fprintf(stderr, "%s is not implemented\n", __func__); - return true; + /* this writes systemd config. systemd has the configuration paths + * hardcoded, hence whatever sd_class is doing is OK. */ + return sd_class_set_default_kernel_impl(manager, kernel, NULL); } static bool exists_identical(const char *path, const char *spath) { diff --git a/src/bootloaders/systemd-class.c b/src/bootloaders/systemd-class.c index 85ad830..b5efa62 100644 --- a/src/bootloaders/systemd-class.c +++ b/src/bootloaders/systemd-class.c @@ -300,13 +300,14 @@ bool sd_class_remove_kernel(const BootManager *manager, const Kernel *kernel) return true; } -bool sd_class_set_default_kernel(const BootManager *manager, const Kernel *kernel) +bool sd_class_set_default_kernel_impl(const BootManager *manager, const Kernel *kernel, + bool (*ensure_layout)(const BootManager *)) { if (!manager) { return false; } - if (!sd_class_ensure_dirs(manager)) { + if (ensure_layout && !ensure_layout(manager)) { LOG_FATAL("Failed to create required directories for %s", sd_config->name); return false; } @@ -366,6 +367,10 @@ write_config: return true; } +bool sd_class_set_default_kernel(const BootManager *manager, const Kernel *kernel) { + return sd_class_set_default_kernel_impl(manager, kernel, sd_class_ensure_dirs); +} + bool sd_class_needs_install(const BootManager *manager) { if (!manager) { diff --git a/src/bootloaders/systemd-class.h b/src/bootloaders/systemd-class.h index 6347096..5003039 100644 --- a/src/bootloaders/systemd-class.h +++ b/src/bootloaders/systemd-class.h @@ -41,6 +41,9 @@ bool sd_class_remove_kernel(const BootManager *manager, const Kernel *kernel); bool sd_class_set_default_kernel(const BootManager *manager, const Kernel *kernel); +bool sd_class_set_default_kernel_impl(const BootManager *manager, const Kernel *kernel, + bool (*ensure_layout)(const BootManager *)); + bool sd_class_needs_install(const BootManager *manager); bool sd_class_needs_update(const BootManager *manager);