diff mbox

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

Message ID 1398327504.317765.288944209345.2.gpush@pablo
State Rejected
Headers show

Commit Message

Jeremy Kerr April 24, 2014, 8:18 a.m. UTC
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@ozlabs.org>

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

Patch

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;
 }
 
 /*