static virStorageEncryptionSecretPtr virStorageEncryptionSecretParse(xmlXPathContextPtr ctxt, xmlNodePtr node) { xmlNodePtr old_node; virStorageEncryptionSecretPtr ret; char *type_str = NULL; char *uuidstr = NULL; if (VIR_ALLOC(ret) < 0) return NULL; old_node = ctxt->node; ctxt->node = node; if (!(type_str = virXPathString("string(./@type)", ctxt))) { virReportError(VIR_ERR_XML_ERROR, "%s", _("unknown volume encryption secret type")); goto cleanup; } if ((ret->type = virStorageEncryptionSecretTypeFromString(type_str)) < 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unknown volume encryption secret type %s"), type_str); goto cleanup; } VIR_FREE(type_str); if ((uuidstr = virXPathString("string(./@uuid)", ctxt))) { if (virUUIDParse(uuidstr, ret->uuid) < 0) { virReportError(VIR_ERR_XML_ERROR, _("malformed volume encryption uuid '%s'"), uuidstr); goto cleanup; } VIR_FREE(uuidstr); } else { virReportError(VIR_ERR_XML_ERROR, "%s", _("missing volume encryption uuid")); goto cleanup; } ctxt->node = old_node; return ret; cleanup: VIR_FREE(type_str); virStorageEncryptionSecretFree(ret); VIR_FREE(uuidstr); ctxt->node = old_node; return NULL; }
static virStorageEncryptionSecretPtr virStorageEncryptionSecretParse(xmlXPathContextPtr ctxt, xmlNodePtr node) { xmlNodePtr old_node; virStorageEncryptionSecretPtr ret; char *type_str = NULL; char *uuidstr = NULL; char *usagestr = NULL; if (VIR_ALLOC(ret) < 0) return NULL; old_node = ctxt->node; ctxt->node = node; if (!(type_str = virXPathString("string(./@type)", ctxt))) { virReportError(VIR_ERR_XML_ERROR, "%s", _("unknown volume encryption secret type")); goto cleanup; } if ((ret->type = virStorageEncryptionSecretTypeFromString(type_str)) < 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unknown volume encryption secret type %s"), type_str); goto cleanup; } if (virSecretLookupParseSecret(node, &ret->seclookupdef) < 0) goto cleanup; VIR_FREE(type_str); ctxt->node = old_node; return ret; cleanup: VIR_FREE(type_str); virStorageEncryptionSecretFree(ret); VIR_FREE(uuidstr); VIR_FREE(usagestr); ctxt->node = old_node; return NULL; }