X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fefivars.c;h=4fb77428f22a2b94d79f1ca349a225b40d898582;hb=9f26c90cb50c45d4549c4dd569917b4ac143b94d;hp=840e4e0c350cbbbfeb873375c19f783317f523ae;hpb=9db11a99beaf25f6eb948348202a4c783e1d31a6;p=elogind.git diff --git a/src/shared/efivars.c b/src/shared/efivars.c index 840e4e0c3..4fb77428f 100644 --- a/src/shared/efivars.c +++ b/src/shared/efivars.c @@ -28,10 +28,42 @@ #include "utf8.h" #include "efivars.h" +#ifdef ENABLE_EFI + bool is_efi_boot(void) { return access("/sys/firmware/efi", F_OK) >= 0; } +static int read_flag(const char *varname) { + int r; + void *v; + size_t s; + uint8_t b; + + r = efi_get_variable(EFI_VENDOR_GLOBAL, varname, NULL, &v, &s); + if (r < 0) + return r; + + if (s != 1) { + r = -EINVAL; + goto finish; + } + + b = *(uint8_t *)v; + r = b > 0; +finish: + free(v); + return r; +} + +int is_efi_secure_boot(void) { + return read_flag("SecureBoot"); +} + +int is_efi_secure_boot_setup_mode(void) { + return read_flag("SetupMode"); +} + int efi_get_variable( sd_id128_t vendor, const char *name, @@ -306,12 +338,7 @@ static int boot_id_hex(const char s[4]) { static int cmp_uint16(const void *_a, const void *_b) { const uint16_t *a = _a, *b = _b; - if (*a < *b) - return -1; - if (*a > *b) - return 1; - - return 0; + return (int)*a - (int)*b; } int efi_get_boot_options(uint16_t **options) { @@ -469,3 +496,5 @@ int efi_get_loader_device_part_uuid(sd_id128_t *u) { return 0; } + +#endif