Add a way to access the <enum name="firmware"/> element's conent from
<os/>.
Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com>
---
.../libvirt-gconfig-domain-capabilities-os.c | 74 ++++++++++++++++++-
.../libvirt-gconfig-domain-capabilities-os.h | 7 +-
libvirt-gconfig/libvirt-gconfig.sym | 1 +
3 files changed, 80 insertions(+), 2 deletions(-)
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-capabilities-os.c b/libvirt-gconfig/libvirt-gconfig-domain-capabilities-os.c
index d3b6e3c..98a1bff 100644
--- a/libvirt-gconfig/libvirt-gconfig-domain-capabilities-os.c
+++ b/libvirt-gconfig/libvirt-gconfig-domain-capabilities-os.c
@@ -33,11 +33,83 @@ struct _GVirConfigDomainCapabilitiesOsPrivate
G_DEFINE_TYPE_WITH_PRIVATE(GVirConfigDomainCapabilitiesOs, gvir_config_domain_capabilities_os, GVIR_CONFIG_TYPE_OBJECT);
-static void gvir_config_domain_capabilities_os_class_init(GVirConfigDomainCapabilitiesOsClass *klass G_GNUC_UNUSED)
+static GList *
+_gvir_config_domain_capabilities_os_get_firmwares(GVirConfigDomainCapabilitiesOs *os);
+
+static void gvir_config_domain_capabilities_os_class_init(GVirConfigDomainCapabilitiesOsClass *klass)
{
+ klass->get_firmwares = _gvir_config_domain_capabilities_os_get_firmwares;
}
static void gvir_config_domain_capabilities_os_init(GVirConfigDomainCapabilitiesOs *os)
{
os->priv = GVIR_CONFIG_DOMAIN_CAPABILITIES_OS_GET_PRIVATE(os);
}
+
+static gboolean add_firmwares(xmlNodePtr node, gpointer opaque)
+{
+ GList **firmwares = opaque;
+ GVirConfigDomainOsFirmware firmware;
+
+ if (node == NULL || node->children == NULL)
+ return TRUE;
+
+ firmware = gvir_config_genum_get_value
+ (GVIR_CONFIG_TYPE_DOMAIN_OS_FIRMWARE,
+ (const gchar *)node->children->content,
+ GVIR_CONFIG_DOMAIN_OS_FIRMWARE_BIOS);
+ *firmwares = g_list_append(*firmwares, GINT_TO_POINTER(firmware));
+
+ return TRUE;
+}
+
+static gboolean search_firmwares(xmlNodePtr node, gpointer opaque)
+{
+ const gchar *content;
+
+ if (!g_str_equal(node->name, "enum"))
+ return TRUE;
+
+ content = gvir_config_xml_get_attribute_content(node, "name");
+ if (content == NULL)
+ return TRUE;
+
+ if (!g_str_equal(content, "firmware"))
+ return TRUE;
+
+ gvir_config_xml_foreach_child(node,
+ add_firmwares,
+ opaque);
+
+ return TRUE;
+}
+
+static GList *
+_gvir_config_domain_capabilities_os_get_firmwares(GVirConfigDomainCapabilitiesOs *os)
+{
+ GList *firmwares = NULL;
+
+ g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_CAPABILITIES_OS(os), NULL);
+
+ gvir_config_object_foreach_child(GVIR_CONFIG_OBJECT(os),
+ NULL,
+ search_firmwares,
+ &firmwares);
+
+ return firmwares;
+}
+
+/**
+ * gvir_config_domain_capabilities_os_get_firmwares:
+ *
+ * Gets the firmwares supported by @os. The returned list should be freed with
+ * g_list_free().
+ *
+ * Returns: (element-type LibvirtGConfig.DomainOsFirmware) (transfer container):
+ * a newly allocated #GList of #GVirConfigDomainOsFirmware.
+ */
+GList *
+gvir_config_domain_capabilities_os_get_firmwares(GVirConfigDomainCapabilitiesOs *os)
+{
+ return GVIR_CONFIG_DOMAIN_CAPABILITIES_OS_GET_CLASS(os)->get_firmwares(os);
+}
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-capabilities-os.h b/libvirt-gconfig/libvirt-gconfig-domain-capabilities-os.h
index dba8572..ce36be2 100644
--- a/libvirt-gconfig/libvirt-gconfig-domain-capabilities-os.h
+++ b/libvirt-gconfig/libvirt-gconfig-domain-capabilities-os.h
@@ -51,11 +51,16 @@ struct _GVirConfigDomainCapabilitiesOsClass
{
GVirConfigObjectClass parent_class;
- gpointer padding[20];
+ GList *(*get_firmwares)(GVirConfigDomainCapabilitiesOs *os);
+
+ gpointer padding[19];
};
GType gvir_config_domain_capabilities_os_get_type(void);
+GList *
+gvir_config_domain_capabilities_os_get_firmwares(GVirConfigDomainCapabilitiesOs *os);
+
G_END_DECLS
#endif /* __LIBVIRT_GCONFIG_DOMAIN_CAPABILITIES_OS_H__ */
diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym
index 783b0d7..d40bb7b 100644
--- a/libvirt-gconfig/libvirt-gconfig.sym
+++ b/libvirt-gconfig/libvirt-gconfig.sym
@@ -778,6 +778,7 @@ global:
gvir_config_domain_capabilities_get_type;
gvir_config_domain_capabilities_new;
gvir_config_domain_capabilities_new_from_xml;
+ gvir_config_domain_capabilities_os_get_firmwares;
gvir_config_domain_capabilities_os_get_type;
gvir_config_domain_os_firmware_get_type;
gvir_config_domain_os_set_firmware;
--
2.21.0
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On 5/10/19 9:12 PM, Fabiano Fidêncio wrote:
> Add a way to access the <enum name="firmware"/> element's conent from
> <os/>.
>
> Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com>
> ---
> .../libvirt-gconfig-domain-capabilities-os.c | 74 ++++++++++++++++++-
> .../libvirt-gconfig-domain-capabilities-os.h | 7 +-
> libvirt-gconfig/libvirt-gconfig.sym | 1 +
> 3 files changed, 80 insertions(+), 2 deletions(-)
>
> diff --git a/libvirt-gconfig/libvirt-gconfig-domain-capabilities-os.c b/libvirt-gconfig/libvirt-gconfig-domain-capabilities-os.c
> index d3b6e3c..98a1bff 100644
> --- a/libvirt-gconfig/libvirt-gconfig-domain-capabilities-os.c
> +++ b/libvirt-gconfig/libvirt-gconfig-domain-capabilities-os.c
> @@ -33,11 +33,83 @@ struct _GVirConfigDomainCapabilitiesOsPrivate
>
> G_DEFINE_TYPE_WITH_PRIVATE(GVirConfigDomainCapabilitiesOs, gvir_config_domain_capabilities_os, GVIR_CONFIG_TYPE_OBJECT);
>
> -static void gvir_config_domain_capabilities_os_class_init(GVirConfigDomainCapabilitiesOsClass *klass G_GNUC_UNUSED)
> +static GList *
> +_gvir_config_domain_capabilities_os_get_firmwares(GVirConfigDomainCapabilitiesOs *os);
> +
> +static void gvir_config_domain_capabilities_os_class_init(GVirConfigDomainCapabilitiesOsClass *klass)
> {
> + klass->get_firmwares = _gvir_config_domain_capabilities_os_get_firmwares;
> }
>
> static void gvir_config_domain_capabilities_os_init(GVirConfigDomainCapabilitiesOs *os)
> {
> os->priv = GVIR_CONFIG_DOMAIN_CAPABILITIES_OS_GET_PRIVATE(os);
> }
> +
> +static gboolean add_firmwares(xmlNodePtr node, gpointer opaque)
> +{
> + GList **firmwares = opaque;
> + GVirConfigDomainOsFirmware firmware;
> +
> + if (node == NULL || node->children == NULL)
> + return TRUE;
> +
> + firmware = gvir_config_genum_get_value
> + (GVIR_CONFIG_TYPE_DOMAIN_OS_FIRMWARE,
> + (const gchar *)node->children->content,
> + GVIR_CONFIG_DOMAIN_OS_FIRMWARE_BIOS);
> + *firmwares = g_list_append(*firmwares, GINT_TO_POINTER(firmware));
> +
> + return TRUE;
> +}
> +
> +static gboolean search_firmwares(xmlNodePtr node, gpointer opaque)
> +{
> + const gchar *content;
> +
> + if (!g_str_equal(node->name, "enum"))
> + return TRUE;
> +
> + content = gvir_config_xml_get_attribute_content(node, "name");
> + if (content == NULL)
> + return TRUE;
> +
> + if (!g_str_equal(content, "firmware"))
> + return TRUE;
> +
> + gvir_config_xml_foreach_child(node,
> + add_firmwares,
> + opaque);
> +
> + return TRUE;
> +}
> +
> +static GList *
> +_gvir_config_domain_capabilities_os_get_firmwares(GVirConfigDomainCapabilitiesOs *os)
> +{
> + GList *firmwares = NULL;
> +
> + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_CAPABILITIES_OS(os), NULL);
> +
> + gvir_config_object_foreach_child(GVIR_CONFIG_OBJECT(os),
> + NULL,
> + search_firmwares,
> + &firmwares);
> +
> + return firmwares;
> +}
> +
> +/**
> + * gvir_config_domain_capabilities_os_get_firmwares:
> + *
> + * Gets the firmwares supported by @os. The returned list should be freed with
> + * g_list_free().
> + *
> + * Returns: (element-type LibvirtGConfig.DomainOsFirmware) (transfer container):
> + * a newly allocated #GList of #GVirConfigDomainOsFirmware.
> + */
> +GList *
> +gvir_config_domain_capabilities_os_get_firmwares(GVirConfigDomainCapabilitiesOs *os)
> +{
> + return GVIR_CONFIG_DOMAIN_CAPABILITIES_OS_GET_CLASS(os)->get_firmwares(os);
> +}
> diff --git a/libvirt-gconfig/libvirt-gconfig-domain-capabilities-os.h b/libvirt-gconfig/libvirt-gconfig-domain-capabilities-os.h
> index dba8572..ce36be2 100644
> --- a/libvirt-gconfig/libvirt-gconfig-domain-capabilities-os.h
> +++ b/libvirt-gconfig/libvirt-gconfig-domain-capabilities-os.h
> @@ -51,11 +51,16 @@ struct _GVirConfigDomainCapabilitiesOsClass
> {
> GVirConfigObjectClass parent_class;
>
> - gpointer padding[20];
> + GList *(*get_firmwares)(GVirConfigDomainCapabilitiesOs *os);
> +
> + gpointer padding[19];
Strictly speaking, this shouldn't be needed as this wasn't released yet,
so we can change the siz of this class. But it's a good practise, so
your call whether we'll do that or not.
Michal
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
© 2016 - 2026 Red Hat, Inc.