Re: [PATCH 08/30] storagefile: Push 'start' into qcow2GetBackingStoreFormat

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 10/7/19 6:49 PM, Cole Robinson wrote:
This is a step towards making this qcow2GetBackingStoreFormat into
a generic qcow2 extensions parser

Signed-off-by: Cole Robinson <crobinso@xxxxxxxxxx>
---

Reviewed-by: Daniel Henrique Barboza <danielhb413@xxxxxxxxx>

  src/util/virstoragefile.c | 33 +++++++++++++++++----------------
  1 file changed, 17 insertions(+), 16 deletions(-)

diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index a9a6c3e132..4a3c9df7a2 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -430,10 +430,22 @@ static int
  qcow2GetBackingStoreFormat(int *format,
                             const char *buf,
                             size_t buf_size,
-                           size_t extension_start,
                             size_t extension_end)
  {
-    size_t offset = extension_start;
+    size_t offset;
+    size_t extension_start;
+    int version = virReadBufInt32BE(buf + QCOWX_HDR_VERSION);
+
+    if (version < 2) {
+        /* QCow1 doesn't have the extensions capability
+         * used to store backing format */
+        return 0;
+    }
+
+    if (version == 2)
+        extension_start = QCOW2_HDR_TOTAL_SIZE;
+    else
+        extension_start = virReadBufInt32BE(buf + QCOW2v3_HDR_SIZE);
/*
       * The extensions take format of
@@ -445,6 +457,7 @@ qcow2GetBackingStoreFormat(int *format,
       * Unknown extensions can be ignored by skipping
       * over "length" bytes in the data stream.
       */
+    offset = extension_start;
      while (offset < (buf_size-8) &&
             offset < (extension_end-8)) {
          unsigned int magic = virReadBufInt32BE(buf + offset);
@@ -487,8 +500,6 @@ qcowXGetBackingStore(char **res,
  {
      unsigned long long offset;
      unsigned int size;
-    unsigned long long start;
-    int version;
*res = NULL;
      *format = VIR_STORAGE_FILE_AUTO;
@@ -546,18 +557,8 @@ qcowXGetBackingStore(char **res,
       * is stored at QCOW2v3_HDR_SIZE
       */
- version = virReadBufInt32BE(buf + QCOWX_HDR_VERSION);
-    if (version >= 2) {
-        /* QCow1 doesn't have the extensions capability
-         * used to store backing format */
-        if (version == 2)
-            start = QCOW2_HDR_TOTAL_SIZE;
-        else
-            start = virReadBufInt32BE(buf + QCOW2v3_HDR_SIZE);
-        if (qcow2GetBackingStoreFormat(format, buf, buf_size,
-                                       start, offset) < 0)
-            return BACKING_STORE_INVALID;
-    }
+    if (qcow2GetBackingStoreFormat(format, buf, buf_size, offset) < 0)
+        return BACKING_STORE_INVALID;
return BACKING_STORE_OK;
  }

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



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux