From 8c6b6684a8e4d9e6e270b533b58453c1b4ce5281 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Mon, 16 Oct 2017 13:23:51 +0200 Subject: [PATCH] storage: Extract common code to retrieve driver backend for support check The 'file access' module of the storage driver has few feature checks to determine whether libvirt supports given storage driver method. The code to retrieve the driver struct needed for the check is the same so it can be extracted. --- src/storage/storage_source.c | 43 ++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/src/storage/storage_source.c b/src/storage/storage_source.c index 419fa3d43f..e3c5c3285a 100644 --- a/src/storage/storage_source.c +++ b/src/storage/storage_source.c @@ -44,24 +44,30 @@ virStorageFileIsInitialized(const virStorageSource *src) } -static bool -virStorageFileSupportsBackingChainTraversal(virStorageSourcePtr src) +static virStorageFileBackendPtr +virStorageFileGetBackendForSupportCheck(const virStorageSource *src) { int actualType; - virStorageFileBackendPtr backend; if (!src) - return false; + return NULL; + + if (src->drv) + return src->drv->backend; + actualType = virStorageSourceGetActualType(src); - if (src->drv) { - backend = src->drv->backend; - } else { - if (!(backend = virStorageFileBackendForTypeInternal(actualType, - src->protocol, - false))) - return false; - } + return virStorageFileBackendForTypeInternal(actualType, src->protocol, false); +} + + +static bool +virStorageFileSupportsBackingChainTraversal(virStorageSourcePtr src) +{ + virStorageFileBackendPtr backend; + + if (!(backend = virStorageFileGetBackendForSupportCheck(src))) + return false; return backend->storageFileGetUniqueIdentifier && backend->storageFileRead && @@ -80,21 +86,10 @@ virStorageFileSupportsBackingChainTraversal(virStorageSourcePtr src) bool virStorageFileSupportsSecurityDriver(const virStorageSource *src) { - int actualType; virStorageFileBackendPtr backend; - if (!src) + if (!(backend = virStorageFileGetBackendForSupportCheck(src))) return false; - actualType = virStorageSourceGetActualType(src); - - if (src->drv) { - backend = src->drv->backend; - } else { - if (!(backend = virStorageFileBackendForTypeInternal(actualType, - src->protocol, - false))) - return false; - } return !!backend->storageFileChown; } -- GitLab