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

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to