summaryrefslogtreecommitdiffstats
path: root/src/basic/efivars.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/basic/efivars.c')
-rw-r--r--src/basic/efivars.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/basic/efivars.c b/src/basic/efivars.c
index aa08ad2e27..b79ca8efd7 100644
--- a/src/basic/efivars.c
+++ b/src/basic/efivars.c
@@ -244,10 +244,16 @@ int efi_set_variable_string(sd_id128_t vendor, const char *name, const char *v)
}
bool is_efi_boot(void) {
- if (detect_container() > 0)
- return false;
+ static int cache = -1;
- return access("/sys/firmware/efi/", F_OK) >= 0;
+ if (cache < 0) {
+ if (detect_container() > 0)
+ cache = false;
+ else
+ cache = access("/sys/firmware/efi/", F_OK) >= 0;
+ }
+
+ return cache;
}
static int read_flag(const char *varname) {
@@ -271,11 +277,21 @@ static int read_flag(const char *varname) {
}
bool is_efi_secure_boot(void) {
- return read_flag("SecureBoot") > 0;
+ static int cache = -1;
+
+ if (cache < 0)
+ cache = read_flag("SecureBoot");
+
+ return cache > 0;
}
bool is_efi_secure_boot_setup_mode(void) {
- return read_flag("SetupMode") > 0;
+ static int cache = -1;
+
+ if (cache < 0)
+ cache = read_flag("SetupMode");
+
+ return cache > 0;
}
int systemd_efi_options_variable(char **line) {