static int status_variables(void) { int n_options, n_order; uint16_t *options = NULL, *order = NULL; int r, i; if (!is_efi_boot()) { fprintf(stderr, "Not booted with EFI, not showing EFI variables.\n"); return 0; } n_options = efi_get_boot_options(&options); if (n_options < 0) { if (n_options == -ENOENT) fprintf(stderr, "Failed to access EFI variables, " "efivarfs needs to be available at /sys/firmware/efi/efivars/.\n"); else fprintf(stderr, "Failed to read EFI boot entries: %s\n", strerror(-n_options)); r = n_options; goto finish; } printf("Boot Loader Entries in EFI Variables:\n"); n_order = efi_get_boot_order(&order); if (n_order == -ENOENT) { n_order = 0; } else if (n_order < 0) { fprintf(stderr, "Failed to read EFI boot order.\n"); r = n_order; goto finish; } /* print entries in BootOrder first */ for (i = 0; i < n_order; i++) print_efi_option(order[i], true); /* print remaining entries */ for (i = 0; i < n_options; i++) { int j; bool found = false; for (j = 0; j < n_order; j++) if (options[i] == order[j]) { found = true; break; } if (found) continue; print_efi_option(options[i], false); } r = 0; finish: free(options); free(order); return r; }
static int status_variables(void) { int n_options, n_order; _cleanup_free_ uint16_t *options = NULL, *order = NULL; int i; if (!is_efi_boot()) { log_notice("Not booted with EFI, not showing EFI variables."); return 0; } n_options = efi_get_boot_options(&options); if (n_options == -ENOENT) return log_error_errno(ENOENT, "Failed to access EFI variables, efivarfs" " needs to be available at /sys/firmware/efi/efivars/."); else if (n_options < 0) return log_error_errno(n_options, "Failed to read EFI boot entries: %m"); n_order = efi_get_boot_order(&order); if (n_order == -ENOENT) n_order = 0; else if (n_order < 0) return log_error_errno(n_order, "Failed to read EFI boot order."); /* print entries in BootOrder first */ printf("Boot Loader Entries in EFI Variables:\n"); for (i = 0; i < n_order; i++) print_efi_option(order[i], true); /* print remaining entries */ for (i = 0; i < n_options; i++) { int j; for (j = 0; j < n_order; j++) if (options[i] == order[j]) goto next; print_efi_option(options[i], false); next: continue; } return 0; }