
On Fri, Oct 07, 2011 at 11:40:53AM +0200, Christophe Fergeau wrote:
--- libvirt-gconfig/libvirt-gconfig-domain.c | 27 +++++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 1 + 3 files changed, 29 insertions(+), 0 deletions(-)
diff --git a/libvirt-gconfig/libvirt-gconfig-domain.c b/libvirt-gconfig/libvirt-gconfig-domain.c index 7ae10b8..06fc3fa 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain.c +++ b/libvirt-gconfig/libvirt-gconfig-domain.c @@ -130,3 +130,30 @@ char *gvir_config_domain_get_name(GVirConfigDomain *domain) return gvir_config_xml_get_child_element_content_glib(node, "name");
} + +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), + NULL); + 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); + } + + g_object_notify(G_OBJECT(domain), "name"); +}
Perhaps we want another helper method for setting XML elements too. In python-virtinst, they had a helper which allowed a very simple xpath like use.eg gvir_config_xml_set_element(parent_node, "/name", node); Or gvir_config_xml_set_element(parent_node, "/foo/bar/name", node); automagically creating foo & bar in the process. Perhaps even have wrappers to avoid needing to pass in a node for the value gvir_config_xml_set_data_element(parent_node, "/name", "foobar"); And setting NULL terminated list of attributes gvir_config_xml_set_element_attrs(parent_node, "/blah", "someattr", "somevalue", "otherattr", "othervalue", NULL); etc,m
diff --git a/libvirt-gconfig/libvirt-gconfig-domain.h b/libvirt-gconfig/libvirt-gconfig-domain.h index baa94c6..f6ceef1 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain.h +++ b/libvirt-gconfig/libvirt-gconfig-domain.h @@ -63,6 +63,7 @@ GVirConfigDomain *gvir_config_domain_new_from_xml(const gchar *xml); GVirConfigDomain *gvir_config_domain_new(void);
char *gvir_config_domain_get_name(GVirConfigDomain *domain); +void gvir_config_domain_set_name(GVirConfigDomain *domain, const char *name);
G_END_DECLS
diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 8702a76..2571c05 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -7,6 +7,7 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_domain_new; gvir_config_domain_new_from_xml; gvir_config_domain_get_name; + gvir_config_domain_set_name;
gvir_config_domain_snapshot_get_type; gvir_config_domain_snapshot_new;
ACK to this patch anyway, since convenience helpers can be added later as desired Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|