
Hey, On Tue, Jul 07, 2015 at 04:26:02PM +0200, Cédric Bosdonnat wrote:
When setting filesystem driver format first and type, only the type remained and vice-versa. --- libvirt-gconfig/libvirt-gconfig-domain-filesys.c | 8 ++++++-- tests/test-gconfig.c | 2 +- tests/xml/gconfig-domain-device-filesys.xml | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-filesys.c b/libvirt-gconfig/libvirt-gconfig-domain-filesys.c index 9b73af5..4e33d5f 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-filesys.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-filesys.c @@ -125,7 +125,9 @@ void gvir_config_domain_filesys_set_driver_type(GVirConfigDomainFilesys *filesys GVirConfigObject *node;
g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_FILESYS(filesys)); - node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(filesys), "driver"); + node = gvir_config_object_get_child(GVIR_CONFIG_OBJECT(filesys), "driver"); + if (!node) + node = gvir_config_object_add_child(GVIR_CONFIG_OBJECT(filesys), "driver");
This is unintuitive, but after looking at the code and a quick test, I think _add_child() will create the node if it does not exist, and return the existing node if it already exists. So I think this could become: + node = gvir_config_object_add_child(GVIR_CONFIG_OBJECT(filesys), "driver");
g_return_if_fail(GVIR_CONFIG_IS_OBJECT(node)); if (type != GVIR_CONFIG_DOMAIN_FILESYS_DRIVER_DEFAULT) gvir_config_object_set_attribute_with_type( @@ -143,7 +145,9 @@ void gvir_config_domain_filesys_set_driver_format(GVirConfigDomainFilesys *files GVirConfigObject *node;
g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_FILESYS(filesys)); - node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(filesys), "driver"); + node = gvir_config_object_get_child(GVIR_CONFIG_OBJECT(filesys), "driver"); + if (!node) + node = gvir_config_object_add_child(GVIR_CONFIG_OBJECT(filesys), "driver");
and same here. Christophe