From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> When setting the filesystem source type, the code forgot to update priv->type. Thus when setting the source element, the incorrect attribute was being used. --- .../libvirt-gconfig-domain-device-private.h | 3 +++ libvirt-gconfig/libvirt-gconfig-domain-device.c | 2 +- libvirt-gconfig/libvirt-gconfig-domain-filesys.c | 28 ++++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-device-private.h b/libvirt-gconfig/libvirt-gconfig-domain-device-private.h index f50946a..3ec83c3 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-device-private.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-device-private.h @@ -37,6 +37,9 @@ GVirConfigDomainDevice * gvir_config_domain_disk_new_from_tree(GVirConfigXmlDoc *doc, xmlNodePtr tree); GVirConfigDomainDevice * +gvir_config_domain_filesys_new_from_tree(GVirConfigXmlDoc *doc, + xmlNodePtr tree); +GVirConfigDomainDevice * gvir_config_domain_graphics_new_from_tree(GVirConfigXmlDoc *doc, xmlNodePtr tree); GVirConfigDomainDevice * diff --git a/libvirt-gconfig/libvirt-gconfig-domain-device.c b/libvirt-gconfig/libvirt-gconfig-domain-device.c index 9a7fae5..60d6bcc 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-device.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-device.c @@ -62,7 +62,7 @@ gvir_config_domain_device_new_from_tree(GVirConfigXmlDoc *doc, if (xmlStrEqual(tree->name, (xmlChar*)"disk")) { return gvir_config_domain_disk_new_from_tree(doc, tree); } else if (xmlStrEqual(tree->name, (xmlChar*)"filesystem")) { - type = GVIR_CONFIG_TYPE_DOMAIN_FILESYS; + return gvir_config_domain_filesys_new_from_tree(doc, tree); } else if (xmlStrEqual(tree->name, (xmlChar*)"controller")) { return gvir_config_domain_controller_new_from_tree(doc, tree); } else if (xmlStrEqual(tree->name, (xmlChar*)"lease")) { diff --git a/libvirt-gconfig/libvirt-gconfig-domain-filesys.c b/libvirt-gconfig/libvirt-gconfig-domain-filesys.c index 904a7a3..cc2f604 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-filesys.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-filesys.c @@ -69,6 +69,33 @@ GVirConfigDomainFilesys *gvir_config_domain_filesys_new_from_xml(const gchar *xm return GVIR_CONFIG_DOMAIN_FILESYS(object); } +GVirConfigDomainDevice * +gvir_config_domain_filesys_new_from_tree(GVirConfigXmlDoc *doc, + xmlNodePtr tree) +{ + GVirConfigObject *object; + GVirConfigDomainFilesys *filesys; + GVirConfigDomainFilesysType type; + const char *type_str; + + type_str = gvir_config_xml_get_attribute_content(tree, "type"); + if (type_str == NULL) + return NULL; + + type = gvir_config_genum_get_value(GVIR_CONFIG_TYPE_DOMAIN_FILESYS_TYPE, + type_str, + GVIR_CONFIG_DOMAIN_FILESYS_FILE); + if (type == -1) + return NULL; + + object = gvir_config_object_new_from_tree(GVIR_CONFIG_TYPE_DOMAIN_FILESYS, + doc, NULL, tree); + filesys = GVIR_CONFIG_DOMAIN_FILESYS(object); + filesys->priv->type = type; + + return GVIR_CONFIG_DOMAIN_DEVICE(object); +} + void gvir_config_domain_filesys_set_type(GVirConfigDomainFilesys *filesys, GVirConfigDomainFilesysType type) { @@ -79,6 +106,7 @@ void gvir_config_domain_filesys_set_type(GVirConfigDomainFilesys *filesys, GVIR_CONFIG_TYPE_DOMAIN_FILESYS_TYPE, type, NULL); + filesys->priv->type = type; } void gvir_config_domain_filesys_set_access_type(GVirConfigDomainFilesys *filesys, -- 1.7.10.2