This makes it possible to use the other GVirConfigObject helpers
with the new child, and hides libxml from one more place in our API.
---
libvirt-gconfig/libvirt-gconfig-domain-disk.c | 29 ++++++++++++----------
libvirt-gconfig/libvirt-gconfig-object-private.h | 4 +-
libvirt-gconfig/libvirt-gconfig-object.c | 13 +++++++--
3 files changed, 28 insertions(+), 18 deletions(-)
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-disk.c
b/libvirt-gconfig/libvirt-gconfig-domain-disk.c
index dfdb381..0c42384 100644
--- a/libvirt-gconfig/libvirt-gconfig-domain-disk.c
+++ b/libvirt-gconfig/libvirt-gconfig-domain-disk.c
@@ -142,44 +142,47 @@ void gvir_config_domain_disk_set_source(GVirConfigDomainDisk *disk,
void gvir_config_domain_disk_set_driver_name(GVirConfigDomainDisk *disk,
const char *driver_name)
{
- xmlNodePtr node;
+ GVirConfigObject *node;
g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_DISK(disk));
node = gvir_config_object_add_child(GVIR_CONFIG_OBJECT(disk), "driver");
- g_return_if_fail(node != NULL);
- xmlNewProp(node, (xmlChar*)"name", (xmlChar*)driver_name);
-
+ g_return_if_fail(GVIR_IS_CONFIG_OBJECT(node));
+ gvir_config_object_set_attribute(node, "name", driver_name, NULL);
+ g_object_unref(G_OBJECT(node));
}
void gvir_config_domain_disk_set_driver_type(GVirConfigDomainDisk *disk,
const char *driver_type)
{
- xmlNodePtr node;
+ GVirConfigObject *node;
g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_DISK(disk));
node = gvir_config_object_add_child(GVIR_CONFIG_OBJECT(disk), "driver");
- g_return_if_fail(node != NULL);
- xmlNewProp(node, (xmlChar*)"type", (xmlChar*)driver_type);
+ g_return_if_fail(GVIR_IS_CONFIG_OBJECT(node));
+ gvir_config_object_set_attribute(node, "type", driver_type, NULL);
+ g_object_unref(G_OBJECT(node));
}
void gvir_config_domain_disk_set_target_bus(GVirConfigDomainDisk *disk,
const char *bus)
{
- xmlNodePtr node;
+ GVirConfigObject *node;
g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_DISK(disk));
node = gvir_config_object_add_child(GVIR_CONFIG_OBJECT(disk), "target");
- g_return_if_fail(node != NULL);
- xmlNewProp(node, (xmlChar*)"bus", (xmlChar*)bus);
+ g_return_if_fail(GVIR_IS_CONFIG_OBJECT(node));
+ gvir_config_object_set_attribute(node, "bus", bus, NULL);
+ g_object_unref(G_OBJECT(node));
}
void gvir_config_domain_disk_set_target_dev(GVirConfigDomainDisk *disk,
const char *dev)
{
- xmlNodePtr node;
+ GVirConfigObject *node;
g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_DISK(disk));
node = gvir_config_object_add_child(GVIR_CONFIG_OBJECT(disk), "target");
- g_return_if_fail(node != NULL);
- xmlNewProp(node, (xmlChar*)"dev", (xmlChar*)dev);
+ g_return_if_fail(GVIR_IS_CONFIG_OBJECT(node));
+ gvir_config_object_set_attribute(node, "dev", dev, NULL);
+ g_object_unref(G_OBJECT(node));
}
diff --git a/libvirt-gconfig/libvirt-gconfig-object-private.h
b/libvirt-gconfig/libvirt-gconfig-object-private.h
index 071d45c..8f9b943 100644
--- a/libvirt-gconfig/libvirt-gconfig-object-private.h
+++ b/libvirt-gconfig/libvirt-gconfig-object-private.h
@@ -35,8 +35,8 @@ void gvir_config_object_set_node_content(GVirConfigObject *object,
void gvir_config_object_set_node_content_uint64(GVirConfigObject *object,
const char *node_name,
guint64 value);
-xmlNodePtr gvir_config_object_add_child(GVirConfigObject *object,
- const char *child_name);
+GVirConfigObject *gvir_config_object_add_child(GVirConfigObject *object,
+ const char *child_name);
xmlNodePtr gvir_config_object_replace_child(GVirConfigObject *object,
const char *child_name);
void gvir_config_object_set_child(GVirConfigObject *object,
diff --git a/libvirt-gconfig/libvirt-gconfig-object.c
b/libvirt-gconfig/libvirt-gconfig-object.c
index 67507d8..70d0608 100644
--- a/libvirt-gconfig/libvirt-gconfig-object.c
+++ b/libvirt-gconfig/libvirt-gconfig-object.c
@@ -341,7 +341,7 @@ gvir_config_object_set_child(GVirConfigObject *object, xmlNodePtr
child)
gvir_config_object_set_child_internal(object, child, TRUE);
}
-G_GNUC_INTERNAL xmlNodePtr
+G_GNUC_INTERNAL GVirConfigObject *
gvir_config_object_add_child(GVirConfigObject *object,
const char *child_name)
{
@@ -349,16 +349,23 @@ gvir_config_object_add_child(GVirConfigObject *object,
xmlNodePtr old_node;
g_return_val_if_fail(GVIR_IS_CONFIG_OBJECT(object), NULL);
+ g_return_val_if_fail(child_name != NULL, NULL);
new_node = xmlNewDocNode(NULL, NULL, (xmlChar *)child_name, NULL);
old_node = gvir_config_object_set_child_internal(object, new_node,
FALSE);
if (old_node != NULL) {
xmlFreeNode(new_node);
- return old_node;
+ return GVIR_CONFIG_OBJECT(g_object_new(GVIR_TYPE_CONFIG_OBJECT,
+ "doc", object->priv->doc,
+ "node", old_node,
+ NULL));
}
- return new_node;
+ return GVIR_CONFIG_OBJECT(g_object_new(GVIR_TYPE_CONFIG_OBJECT,
+ "doc", object->priv->doc,
+ "node", new_node,
+ NULL));
}
G_GNUC_INTERNAL xmlNodePtr
--
1.7.7.3