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 :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list