To allow reusing this function in the qemu driver we need to allow to
specify the storage format. Also separate return of the backing store
path now isn't necessary.
---
src/storage/storage_backend_gluster.c | 5 ++++-
src/util/virstoragefile.c | 31 ++++++++++++++-----------------
src/util/virstoragefile.h | 2 +-
3 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/src/storage/storage_backend_gluster.c
b/src/storage/storage_backend_gluster.c
index 1a2b4ec..5ecc098 100644
--- a/src/storage/storage_backend_gluster.c
+++ b/src/storage/storage_backend_gluster.c
@@ -294,10 +294,13 @@ virStorageBackendGlusterRefreshVol(virStorageBackendGlusterStatePtr
state,
goto cleanup;
if (!(meta = virStorageFileGetMetadataFromBuf(name, header, len,
- &vol->backingStore.path,
+ VIR_STORAGE_FILE_AUTO,
&vol->backingStore.format)))
goto cleanup;
+ vol->backingStore.path = meta->backingStoreRaw;
+ meta->backingStoreRaw = NULL;
+
vol->target.format = meta->format;
if (vol->backingStore.path &&
vol->backingStore.format < 0)
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index 01d4a7e..7ae4642 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -930,13 +930,15 @@ virStorageFileMetadataNew(const char *path,
* @path: name of file, for error messages
* @buf: header bytes from @path
* @len: length of @buf
- * @backing: output malloc'd name of backing image, if any
+ * @format: format of the storage file
* @backingFormat: format of @backing
*
- * Extract metadata about the storage volume, including probing its
- * format. Does not recurse. Callers are advised not to trust the
- * learned format if a guest has ever used the volume when it was
- * raw, since a malicious guest can turn a raw file into any
+ * Extract metadata about the storage volume with the specified
+ * image format. If image format is VIR_STORAGE_FILE_AUTO, it
+ * will probe to automatically identify the format. Does not recurse.
+ *
+ * Callers are advised never to use VIR_STORAGE_FILE_AUTO as a
+ * format, since a malicious guest can turn a raw file into any
* other non-raw format at will.
*
* If the returned @backingFormat is VIR_STORAGE_FILE_AUTO
@@ -950,25 +952,20 @@ virStorageSourcePtr
virStorageFileGetMetadataFromBuf(const char *path,
char *buf,
size_t len,
- char **backing,
+ int format,
int *backingFormat)
{
virStorageSourcePtr ret = NULL;
- virStorageSourcePtr meta = NULL;
- if (!(meta = virStorageFileMetadataNew(path, VIR_STORAGE_FILE_AUTO)))
+ if (!(ret = virStorageFileMetadataNew(path, format)))
return NULL;
- if (virStorageFileGetMetadataInternal(meta, buf, len,
- backingFormat) < 0)
- goto cleanup;
- if (VIR_STRDUP(*backing, meta->backingStoreRaw) < 0)
- goto cleanup;
+ if (virStorageFileGetMetadataInternal(ret, buf, len,
+ backingFormat) < 0) {
+ virStorageSourceFree(ret);
+ return NULL;
+ }
- ret = meta;
- meta = NULL;
- cleanup:
- virStorageSourceFree(meta);
return ret;
}
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
index 4f7357b..89ecc1e 100644
--- a/src/util/virstoragefile.h
+++ b/src/util/virstoragefile.h
@@ -290,7 +290,7 @@ virStorageSourcePtr virStorageFileGetMetadataFromFD(const char *path,
virStorageSourcePtr virStorageFileGetMetadataFromBuf(const char *path,
char *buf,
size_t len,
- char **backing,
+ int format,
int *backingFormat)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(4)
ATTRIBUTE_NONNULL(5);
--
2.0.0