| From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
| From: "Eduardo Lima (Etrunko)" <etrunko@redhat.com> |
| Date: Thu, 18 May 2017 17:53:33 -0300 |
| Subject: [PATCH] utils: Retrieve node attributes in ovirt_resource_parse_xml() |
| |
| This commit adds a new field to the OvirtXmlElement struct, which is |
| used to retrieve an attribute from the xml node. It is optional, meaning |
| that, if not informed, the function will still retrieve the node |
| contents instead. |
| |
| We also introduce ovirt_rest_xml_node_get_attr_from_path() function, |
| to retrieve the given attribute value from the path below the node, much |
| similar to ovirt_rest_xml_node_get_content_from_path(). |
| |
| Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com> |
| |
| govirt/ovirt-utils.c | 15 ++++++++++++++- |
| govirt/ovirt-utils.h | 1 + |
| 2 files changed, 15 insertions(+), 1 deletion(-) |
| |
| diff --git a/govirt/ovirt-utils.c b/govirt/ovirt-utils.c |
| index c0541e9..b9b7c15 100644 |
| |
| |
| @@ -84,6 +84,16 @@ ovirt_rest_xml_node_get_content_from_path(RestXmlNode *node, const char *path) |
| return node->content; |
| } |
| |
| +static const char * |
| +ovirt_rest_xml_node_get_attr_from_path(RestXmlNode *node, const char *path, const char *attr) |
| +{ |
| + node = ovirt_rest_xml_node_find(node, path); |
| + if (node == NULL) |
| + return NULL; |
| + |
| + return rest_xml_node_get_attr(node, attr); |
| +} |
| + |
| static gboolean |
| _set_property_value_from_type(GValue *value, |
| GType type, |
| @@ -141,7 +151,10 @@ ovirt_rest_xml_node_parse(RestXmlNode *node, |
| const char *value_str; |
| GValue value = { 0, }; |
| |
| - value_str = ovirt_rest_xml_node_get_content_from_path(node, elements->xml_path); |
| + if (elements->xml_attr != NULL) |
| + value_str = ovirt_rest_xml_node_get_attr_from_path(node, elements->xml_path, elements->xml_attr); |
| + else |
| + value_str = ovirt_rest_xml_node_get_content_from_path(node, elements->xml_path); |
| |
| g_value_init(&value, elements->type); |
| if (_set_property_value_from_type(&value, elements->type, value_str, node)) |
| diff --git a/govirt/ovirt-utils.h b/govirt/ovirt-utils.h |
| index e786311..545847a 100644 |
| |
| |
| @@ -33,6 +33,7 @@ struct _OvirtXmlElement |
| const char *prop_name; |
| GType type; |
| const char *xml_path; |
| + const char *xml_attr; /* if NULL, retrieve node content instead of attribute */ |
| }; |
| |
| RestXmlNode *ovirt_rest_xml_node_from_call(RestProxyCall *call); |