File Add-osinfo_firmware_is_recommended.patch of Package libosinfo
Subject: Add osinfo_firmware_is_recommended()
From: Charles Arnold carnold@suse.com Mon Feb 9 10:29:46 2026 -0700
Date: Mon Feb 9 22:48:58 2026 +0100:
Git: 2229c890d4ee1dcae59fa60aec7b7f6a058e3189
The function allows an OS to declare efi as recommended for
its security features while still supporting legacy bios.
Tools like virt-manager may then query the database for this
attribute and default to the recommended firmware if specified.
Signed-off-by: Charles Arnold <carnold@suse.com>
diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
index ae5fee3..a47fbc7 100644
--- a/osinfo/libosinfo.syms
+++ b/osinfo/libosinfo.syms
@@ -646,6 +646,12 @@ LIBOSINFO_1.10.0 {
osinfo_tree_matches;
} LIBOSINFO_1.8.0;
+LIBOSINFO_1.13.0 {
+ global:
+
+ osinfo_firmware_is_recommended;
+} LIBOSINFO_1.10.0;
+
/* Symbols in next release...
LIBOSINFO_0.0.2 {
diff --git a/osinfo/osinfo_firmware.c b/osinfo/osinfo_firmware.c
index c397c70..3be35ad 100644
--- a/osinfo/osinfo_firmware.c
+++ b/osinfo/osinfo_firmware.c
@@ -214,3 +214,19 @@ gboolean osinfo_firmware_is_supported(OsinfoFirmware *firmware)
return osinfo_entity_get_param_value_boolean(OSINFO_ENTITY(firmware),
OSINFO_FIRMWARE_PROP_SUPPORTED);
}
+
+/**
+ * osinfo_firmware_is_recommended:
+ * @firmware: an #OsinfoFirmware instance
+ *
+ * Whether the @firmware is recommended or not
+ *
+ * Returns: TRUE if recommended, FALSE otherwise.
+ *
+ * Since: 1.13.0
+ */
+gboolean osinfo_firmware_is_recommended(OsinfoFirmware *firmware)
+{
+ return osinfo_entity_get_param_value_boolean(OSINFO_ENTITY(firmware),
+ OSINFO_FIRMWARE_PROP_RECOMMENDED);
+}
diff --git a/osinfo/osinfo_firmware.h b/osinfo/osinfo_firmware.h
index 5959788..d7379d9 100644
--- a/osinfo/osinfo_firmware.h
+++ b/osinfo/osinfo_firmware.h
@@ -36,8 +36,10 @@ OSINFO_DECLARE_TYPE_WITH_PRIVATE_AND_CLASS(OsinfoFirmware,
#define OSINFO_FIRMWARE_PROP_ARCHITECTURE "architecture"
#define OSINFO_FIRMWARE_PROP_TYPE "type"
#define OSINFO_FIRMWARE_PROP_SUPPORTED "supported"
+#define OSINFO_FIRMWARE_PROP_RECOMMENDED "recommended"
OsinfoFirmware *osinfo_firmware_new(const gchar *id, const gchar *architecture, const gchar *type);
const gchar *osinfo_firmware_get_architecture(OsinfoFirmware *firmware);
const gchar *osinfo_firmware_get_firmware_type(OsinfoFirmware *firmware);
gboolean osinfo_firmware_is_supported(OsinfoFirmware *firmware);
+gboolean osinfo_firmware_is_recommended(OsinfoFirmware *firmware);
diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c
index b3fd453..0775167 100644
--- a/osinfo/osinfo_loader.c
+++ b/osinfo/osinfo_loader.c
@@ -1350,7 +1350,9 @@ static OsinfoFirmware *osinfo_loader_firmware(OsinfoLoader *loader,
gchar *arch = (gchar *)xmlGetProp(root, BAD_CAST "arch");
gchar *type = (gchar *)xmlGetProp(root, BAD_CAST "type");
gchar *supported = (gchar *)xmlGetProp(root, BAD_CAST "supported");
+ gchar *recommended = (gchar *)xmlGetProp(root, BAD_CAST "recommended");
gboolean is_supported = TRUE;
+ gboolean is_recommended = FALSE;
OsinfoFirmware *firmware = osinfo_firmware_new(id, arch, type);
xmlFree(arch);
@@ -1361,10 +1363,19 @@ static OsinfoFirmware *osinfo_loader_firmware(OsinfoLoader *loader,
xmlFree(supported);
}
+ if (recommended != NULL) {
+ is_recommended = g_str_equal(recommended, "true");
+ xmlFree(recommended);
+ }
+
osinfo_entity_set_param_boolean(OSINFO_ENTITY(firmware),
OSINFO_FIRMWARE_PROP_SUPPORTED,
is_supported);
+ osinfo_entity_set_param_boolean(OSINFO_ENTITY(firmware),
+ OSINFO_FIRMWARE_PROP_RECOMMENDED,
+ is_recommended);
+
return firmware;
}