}
-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 &&
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;
}