Files
fastfetch/src/detection/bootmgr/bootmgr_linux.c
T

33 lines
1.0 KiB
C
Raw Normal View History

2024-05-15 21:36:15 +08:00
#include "bootmgr.h"
2026-01-06 09:48:38 +08:00
#include "common/io.h"
2024-05-16 11:12:52 +08:00
#include "efi_helper.h"
2024-05-15 21:36:15 +08:00
2026-02-09 16:22:17 +08:00
#include <stdalign.h>
2024-05-15 21:36:15 +08:00
#define FF_EFIVARS_PATH_PREFIX "/sys/firmware/efi/efivars/"
2026-03-29 09:28:49 +08:00
const char* ffDetectBootmgr(FFBootmgrResult* result) {
2026-02-09 16:22:17 +08:00
alignas(uint16_t) uint8_t buffer[2048];
2024-05-15 21:36:15 +08:00
2026-03-29 09:28:49 +08:00
if (ffReadFileData(FF_EFIVARS_PATH_PREFIX "BootCurrent-" FF_EFI_GLOBAL_GUID, sizeof(buffer), buffer) != 6) {
2024-05-15 21:36:15 +08:00
return "Failed to read efivar: BootCurrent";
2026-03-29 09:28:49 +08:00
}
2024-05-15 21:36:15 +08:00
2026-03-29 09:28:49 +08:00
result->order = *(uint16_t*) &buffer[4];
2025-03-23 21:30:53 +08:00
snprintf((char*) buffer, sizeof(buffer), FF_EFIVARS_PATH_PREFIX "Boot%04X-" FF_EFI_GLOBAL_GUID, result->order);
2024-05-15 21:36:15 +08:00
ssize_t size = ffReadFileData((const char*) buffer, sizeof(buffer), buffer);
2026-03-29 09:28:49 +08:00
if (size < 5 + (int) sizeof(FFEfiLoadOption) || size == (ssize_t) sizeof(buffer)) {
2024-05-15 21:36:15 +08:00
return "Failed to read efivar: Boot####";
2026-03-29 09:28:49 +08:00
}
2024-05-15 21:36:15 +08:00
2026-03-29 09:28:49 +08:00
ffEfiFillLoadOption((FFEfiLoadOption*) &buffer[4], result);
2024-05-15 21:36:15 +08:00
2026-03-29 09:28:49 +08:00
if (ffReadFileData(FF_EFIVARS_PATH_PREFIX "SecureBoot-" FF_EFI_GLOBAL_GUID, sizeof(buffer), buffer) >= 5) {
2024-05-15 21:36:15 +08:00
result->secureBoot = buffer[4] == 1;
2026-03-29 09:28:49 +08:00
}
2024-05-15 21:36:15 +08:00
2026-07-10 18:08:04 +08:00
return nullptr;
2024-05-15 21:36:15 +08:00
}