[RFC,PATCH 2/4] fwts: Only run firmware detection once

Jeremy Kerr jk at ozlabs.org
Thu Apr 24 08:18:24 UTC 2014


Store the discovered value in a static var, and return this value on
subsequent invocations of fwts_firmware_detect.

Signed-off-by: Jeremy Kerr <jk at ozlabs.org>

---
 src/lib/include/fwts_firmware.h |    2 +-
 src/lib/src/fwts_firmware.c     |   19 +++++++++++++++----
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/src/lib/include/fwts_firmware.h b/src/lib/include/fwts_firmware.h
index bc7c293..1ef5e73 100644
--- a/src/lib/include/fwts_firmware.h
+++ b/src/lib/include/fwts_firmware.h
@@ -21,7 +21,7 @@
 
 #include <stdbool.h>
 
-enum {
+enum firmware_type {
 	FWTS_FIRMWARE_UNKNOWN = 0,
 	FWTS_FIRMWARE_BIOS = 1,
 	FWTS_FIRMWARE_UEFI = 2,
diff --git a/src/lib/src/fwts_firmware.c b/src/lib/src/fwts_firmware.c
index 3d09572..cca0615 100644
--- a/src/lib/src/fwts_firmware.c
+++ b/src/lib/src/fwts_firmware.c
@@ -23,6 +23,9 @@
 
 #include "fwts.h"
 
+static enum firmware_type firmware_type;
+static bool firmware_type_valid;
+
 /*
  *  fwts_memory_map_entry_compare()
  *	callback used to sort memory_map entries on start address
@@ -31,10 +34,18 @@ int fwts_firmware_detect(void)
 {
 	struct stat statbuf;
 
-	if (stat("/sys/firmware/efi", &statbuf))
-		return FWTS_FIRMWARE_BIOS;		/* No UEFI, Assume BIOS */
-	else
-		return FWTS_FIRMWARE_UEFI;
+	if (firmware_type_valid)
+		return firmware_type;
+
+	if (stat("/sys/firmware/efi", &statbuf)) {
+		/* No UEFI, Assume BIOS */
+		firmware_type = FWTS_FIRMWARE_BIOS;
+	} else {
+		firmware_type = FWTS_FIRMWARE_UEFI;
+	}
+
+	firmware_type_valid = true;
+	return firmware_type;
 }
 
 /*



More information about the fwts-devel mailing list