[libvirt] [libvirt-glib 19/23] Add gvir_config_object_set_node_content

Christophe Fergeau cfergeau at redhat.com
Fri Oct 7 09:41:04 UTC 2011


It's used to set the content of a node in a GVirConfigObject to
a given value, and will replace any existing node with the same
value.
---
 libvirt-gconfig/libvirt-gconfig-domain.c |   22 ++--------------------
 libvirt-gconfig/libvirt-gconfig-object.c |   30 ++++++++++++++++++++++++++++++
 libvirt-gconfig/libvirt-gconfig-object.h |    3 +++
 3 files changed, 35 insertions(+), 20 deletions(-)

diff --git a/libvirt-gconfig/libvirt-gconfig-domain.c b/libvirt-gconfig/libvirt-gconfig-domain.c
index 66ea7cb..039e551 100644
--- a/libvirt-gconfig/libvirt-gconfig-domain.c
+++ b/libvirt-gconfig/libvirt-gconfig-domain.c
@@ -146,25 +146,7 @@ char *gvir_config_domain_get_name(GVirConfigDomain *domain)
 
 void gvir_config_domain_set_name(GVirConfigDomain *domain, const char *name)
 {
-    xmlNodePtr parent_node;
-    xmlNodePtr old_node;
-    xmlNodePtr new_node;
-    xmlChar *encoded_name;
-
-    parent_node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(domain));
-    encoded_name = xmlEncodeEntitiesReentrant(parent_node->doc,
-                                              (xmlChar *)name);
-    new_node = xmlNewDocNode(parent_node->doc, NULL,
-                             (xmlChar *)"name", encoded_name);
-    xmlFree(encoded_name);
-
-    old_node = gvir_config_xml_get_element(parent_node, "name", NULL);
-    if (old_node) {
-        old_node = xmlReplaceNode(old_node, new_node);
-        xmlFreeNode(old_node);
-    } else {
-        xmlAddChild(parent_node, new_node);
-    }
-
+    gvir_config_object_set_node_content(GVIR_CONFIG_OBJECT(domain),
+                                        "name", name);
     g_object_notify(G_OBJECT(domain), "name");
 }
diff --git a/libvirt-gconfig/libvirt-gconfig-object.c b/libvirt-gconfig/libvirt-gconfig-object.c
index 8855ff8..679c3f9 100644
--- a/libvirt-gconfig/libvirt-gconfig-object.c
+++ b/libvirt-gconfig/libvirt-gconfig-object.c
@@ -292,3 +292,33 @@ char *gvir_config_object_get_node_content(GVirConfigObject *object,
 
     return gvir_config_xml_get_child_element_content_glib(node, node_name);
 }
+
+/* FIXME: if there are multiple nodes with the same name, this function
+ * won't behave as expected. Should we get rid of the duplicated node names
+ * here?
+ */
+void gvir_config_object_set_node_content(GVirConfigObject *object,
+                                         const char *node_name,
+                                         const char *value)
+{
+    xmlNodePtr parent_node;
+    xmlNodePtr old_node;
+    xmlNodePtr new_node;
+    xmlChar *encoded_name;
+
+    parent_node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(object));
+    encoded_name = xmlEncodeEntitiesReentrant(parent_node->doc,
+                                              (xmlChar *)value);
+    new_node = xmlNewDocNode(parent_node->doc, NULL,
+                             (xmlChar *)node_name, encoded_name);
+    xmlFree(encoded_name);
+
+    old_node = gvir_config_xml_get_element(parent_node, node_name, NULL);
+    if (old_node) {
+        old_node = xmlReplaceNode(old_node, new_node);
+        xmlFreeNode(old_node);
+    } else {
+        xmlAddChild(parent_node, new_node);
+    }
+}
+
diff --git a/libvirt-gconfig/libvirt-gconfig-object.h b/libvirt-gconfig/libvirt-gconfig-object.h
index 1a82490..ab99279 100644
--- a/libvirt-gconfig/libvirt-gconfig-object.h
+++ b/libvirt-gconfig/libvirt-gconfig-object.h
@@ -68,6 +68,9 @@ const gchar *gvir_config_object_get_schema(GVirConfigObject *config);
 xmlNodePtr gvir_config_object_get_xml_node(GVirConfigObject *config);
 char *gvir_config_object_get_node_content(GVirConfigObject *object,
                                           const char *node_name);
+void gvir_config_object_set_node_content(GVirConfigObject *object,
+                                         const char *node_name,
+                                         const char *value);
 
 /* FIXME: move to a libvirt-gconfig-helpers.h file? */
 xmlNodePtr gvir_config_object_parse(const char *xml, const char *root_node, GError **err);
-- 
1.7.6.4




More information about the libvir-list mailing list