Split processing of "<auth" into its own function --- src/conf/storage_conf.c | 65 +++++++++++++++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 24 deletions(-) diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index 9bcfced..1097de8 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -523,6 +523,45 @@ cleanup: } static int +virStoragePoolDefParseAuth(xmlXPathContextPtr ctxt, + virStoragePoolSourcePtr source) +{ + int ret = -1; + char *authType = NULL; + + authType = virXPathString("string(./auth/@type)", ctxt); + if (authType == NULL) { + source->authType = VIR_STORAGE_POOL_AUTH_NONE; + ret = 0; + goto cleanup; + } + + if ((source->authType = + virStoragePoolAuthTypeTypeFromString(authType)) < 0) { + virReportError(VIR_ERR_XML_ERROR, + _("unknown auth type '%s'"), + authType); + goto cleanup; + } + + if (source->authType == VIR_STORAGE_POOL_AUTH_CHAP) { + if (virStoragePoolDefParseAuthChap(ctxt, &source->auth.chap) < 0) + goto cleanup; + } + + if (source->authType == VIR_STORAGE_POOL_AUTH_CEPHX) { + if (virStoragePoolDefParseAuthCephx(ctxt, &source->auth.cephx) < 0) + goto cleanup; + } + + ret = 0; + +cleanup: + VIR_FREE(authType); + return ret; +} + +static int virStoragePoolDefParseSource(xmlXPathContextPtr ctxt, virStoragePoolSourcePtr source, int pool_type, @@ -530,7 +569,6 @@ virStoragePoolDefParseSource(xmlXPathContextPtr ctxt, { int ret = -1; xmlNodePtr relnode, *nodeset = NULL; - char *authType = NULL; int nsource; size_t i; virStoragePoolOptionsPtr options; @@ -676,28 +714,8 @@ virStoragePoolDefParseSource(xmlXPathContextPtr ctxt, VIR_STORAGE_POOL_SOURCE_ADAPTER_TYPE_SCSI_HOST; } - authType = virXPathString("string(./auth/@type)", ctxt); - if (authType == NULL) { - source->authType = VIR_STORAGE_POOL_AUTH_NONE; - } else { - if ((source->authType = - virStoragePoolAuthTypeTypeFromString(authType)) < 0) { - virReportError(VIR_ERR_XML_ERROR, - _("unknown auth type '%s'"), - authType); - goto cleanup; - } - } - - if (source->authType == VIR_STORAGE_POOL_AUTH_CHAP) { - if (virStoragePoolDefParseAuthChap(ctxt, &source->auth.chap) < 0) - goto cleanup; - } - - if (source->authType == VIR_STORAGE_POOL_AUTH_CEPHX) { - if (virStoragePoolDefParseAuthCephx(ctxt, &source->auth.cephx) < 0) - goto cleanup; - } + if (virStoragePoolDefParseAuth(ctxt, source) < 0) + goto cleanup; source->vendor = virXPathString("string(./vendor/@name)", ctxt); source->product = virXPathString("string(./product/@name)", ctxt); @@ -707,7 +725,6 @@ cleanup: ctxt->node = relnode; VIR_FREE(port); - VIR_FREE(authType); VIR_FREE(nodeset); VIR_FREE(adapter_type); return ret; -- 1.8.1.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list