#include "efivars.h"
#include "build.h"
#include "util.h"
-#include "utf8.h"
static int verify_esp(const char *p, uint32_t *part, uint64_t *pstart, uint64_t *psize, sd_id128_t *uuid) {
struct statfs sfs;
fprintf(stderr, "Failed to probe partition entry UUID %s: %s\n", p, strerror(-r));
goto fail;
}
- sd_id128_from_string(v, uuid);
+
+ r = sd_id128_from_string(v, uuid);
+ if (r < 0) {
+ fprintf(stderr, "Partition %s has invalid UUID: %s\n", p, v);
+ r = -EIO;
+ goto fail;
+ }
errno = 0;
r = blkid_probe_lookup_value(b, "PART_ENTRY_NUMBER", &v, NULL);
return r;
}
-/* search for "#### LoaderInfo: sd-boot 218 ####" string inside the binary */
+/* search for "#### LoaderInfo: systemd-boot 218 ####" string inside the binary */
static int get_file_version(FILE *f, char **v) {
struct stat st;
char *buf;
r = enumerate_binaries(esp_path, "EFI/systemd", NULL);
if (r == 0)
- fprintf(stderr, "sd-boot not installed in ESP.\n");
+ fprintf(stderr, "systemd-boot not installed in ESP.\n");
else if (r < 0)
return r;
}
static int print_efi_option(uint16_t id, bool in_order) {
- char *title = NULL;
- char *path = NULL;
+ _cleanup_free_ char *title = NULL;
+ _cleanup_free_ char *path = NULL;
sd_id128_t partition;
bool active;
int r = 0;
r = efi_get_boot_option(id, &title, &partition, &path, &active);
if (r < 0)
- goto finish;
+ return r;
/* print only configured entries with partition information */
if (!path || sd_id128_equal(partition, SD_ID128_NULL))
printf(" File: └─%s\n", path);
printf("\n");
-finish:
- free(title);
- free(path);
- return r;
+ return 0;
}
static int status_variables(void) {
_cleanup_free_ char *v = NULL;
int r;
- if (asprintf(&p, SD_BOOTLIBDIR "/%s", name) < 0) {
+ if (asprintf(&p, BOOTLIBDIR "/%s", name) < 0) {
fprintf(stderr, "Out of memory.\n");
return -ENOMEM;
}
r = copy_file(p, q, force);
- if (startswith(name, "sd-boot")) {
+ if (startswith(name, "systemd-boot")) {
int k;
/* Create the EFI default boot loader name (specified for removable devices) */
- if (asprintf(&v, "%s/EFI/Boot/BOOT%s", esp_path, name + strlen("sd-boot")) < 0) {
+ if (asprintf(&v, "%s/EFI/Boot/BOOT%s", esp_path, name + strlen("systemd-boot")) < 0) {
fprintf(stderr, "Out of memory.\n");
return -ENOMEM;
}
return r;
}
- d = opendir(SD_BOOTLIBDIR);
+ d = opendir(BOOTLIBDIR);
if (!d) {
- fprintf(stderr, "Failed to open "SD_BOOTLIBDIR": %m\n");
+ fprintf(stderr, "Failed to open "BOOTLIBDIR": %m\n");
return -errno;
}
if (n_options < 0)
return n_options;
- /* find already existing sd-boot entry */
+ /* find already existing systemd-boot entry */
for (i = 0; i < n_options; i++)
if (same_entry(options[i], uuid, path)) {
new_id = options[i];
}
static int remove_from_order(uint16_t slot) {
- uint16_t *order = NULL;
+ _cleanup_free_ uint16_t *order = NULL;
int n_order;
int i;
int err = 0;
break;
}
- free(order);
return err;
}
if (r < 0)
goto finish;
- if (r > 0 && strncmp(v, "sd-boot ", 10) == 0) {
+ if (r > 0 && strncmp(v, "systemd-boot ", 10) == 0) {
r = unlink(q);
if (r < 0) {
char *p;
int r, q;
- if (asprintf(&p, "%s/EFI/sd-boot", esp_path) < 0) {
+ if (asprintf(&p, "%s/EFI/systemd-boot", esp_path) < 0) {
fprintf(stderr, "Out of memory.\n");
return -ENOMEM;
}
if (q < 0 && r == 0)
r = q;
- q = rmdir_one(esp_path, "EFI/sd-boot");
+ q = rmdir_one(esp_path, "EFI/systemd-boot");
if (q < 0 && r == 0)
r = q;
" --no-variables Don't touch EFI variables\n"
"\n"
"Comands:\n"
- " status Show status of installed sd-boot and EFI variables\n"
- " install Install sd-boot to the ESP and EFI variables\n"
- " update Update sd-boot in the ESP and EFI variables\n"
- " remove Remove sd-boot from the ESP and EFI variables\n",
+ " status Show status of installed systemd-boot and EFI variables\n"
+ " install Install systemd-boot to the ESP and EFI variables\n"
+ " update Update systemd-boot in the ESP and EFI variables\n"
+ " remove Remove systemd-boot from the ESP and EFI variables\n",
program_invocation_short_name);
return 0;
efi_get_variable_string(EFI_VENDOR_LOADER, "LoaderFirmwareType", &fw_type);
efi_get_variable_string(EFI_VENDOR_LOADER, "LoaderFirmwareInfo", &fw_info);
efi_get_variable_string(EFI_VENDOR_LOADER, "LoaderInfo", &loader);
- efi_get_variable_string(EFI_VENDOR_LOADER, "LoaderImageIdentifier", &loader_path);
- efi_tilt_backslashes(loader_path);
+ if (efi_get_variable_string(EFI_VENDOR_LOADER, "LoaderImageIdentifier", &loader_path) > 0)
+ efi_tilt_backslashes(loader_path);
efi_loader_get_device_part_uuid(&loader_part_uuid);
printf("System:\n");
if (arg_touch_variables)
r = install_variables(arg_path,
part, pstart, psize, uuid,
- "/EFI/systemd/sd-boot" EFI_MACHINE_TYPE_NAME ".efi",
+ "/EFI/systemd/systemd-boot" EFI_MACHINE_TYPE_NAME ".efi",
arg_action == ACTION_INSTALL);
break;
r = remove_binaries(arg_path);
if (arg_touch_variables) {
- q = remove_variables(uuid, "/EFI/systemd/sd-boot" EFI_MACHINE_TYPE_NAME ".efi", true);
+ q = remove_variables(uuid, "/EFI/systemd/systemd-boot" EFI_MACHINE_TYPE_NAME ".efi", true);
if (q < 0 && r == 0)
r = q;
}