Daniel P. Berrange e3a592
From cab428b1d4d432965cee6f5afb67265557706715 Mon Sep 17 00:00:00 2001
Daniel P. Berrange e3a592
From: Daniel P. Berrange <berrange@redhat.com>
Daniel P. Berrange e3a592
Date: Mon, 14 Jun 2010 16:39:32 +0100
Daniel P. Berrange e3a592
Subject: [PATCH 02/11] Remove 'type' field from FileTypeInfo struct
Daniel P. Berrange e3a592
Daniel P. Berrange e3a592
Instead of including a field in FileTypeInfo struct for the
Daniel P. Berrange e3a592
disk format, rely on the array index matching the format.
Daniel P. Berrange e3a592
Use verify() to assert the correct number of elements in the
Daniel P. Berrange e3a592
array.
Daniel P. Berrange e3a592
Daniel P. Berrange e3a592
* src/util/storage_file.c: remove type field from FileTypeInfo
Daniel P. Berrange e3a592
---
Daniel P. Berrange e3a592
 src/util/storage_file.c |  108 +++++++++++++++++++++++-----------------------
Daniel P. Berrange e3a592
 1 files changed, 54 insertions(+), 54 deletions(-)
Daniel P. Berrange e3a592
Daniel P. Berrange e3a592
diff --git a/src/util/storage_file.c b/src/util/storage_file.c
Daniel P. Berrange e3a592
index 80f743e..df0e3a1 100644
Daniel P. Berrange e3a592
--- a/src/util/storage_file.c
Daniel P. Berrange e3a592
+++ b/src/util/storage_file.c
Daniel P. Berrange e3a592
@@ -58,7 +58,6 @@ enum {
Daniel P. Berrange e3a592
 
Daniel P. Berrange e3a592
 /* Either 'magic' or 'extension' *must* be provided */
Daniel P. Berrange e3a592
 struct FileTypeInfo {
Daniel P. Berrange e3a592
-    int type;           /* One of the constants above */
Daniel P. Berrange e3a592
     const char *magic;  /* Optional string of file magic
Daniel P. Berrange e3a592
                          * to check at head of file */
Daniel P. Berrange e3a592
     const char *extension; /* Optional file extension to check */
Daniel P. Berrange e3a592
@@ -108,58 +107,59 @@ static int vmdk4GetBackingStore(char **, int *,
Daniel P. Berrange e3a592
 
Daniel P. Berrange e3a592
 
Daniel P. Berrange e3a592
 static struct FileTypeInfo const fileTypeInfo[] = {
Daniel P. Berrange e3a592
-    /* Bochs */
Daniel P. Berrange e3a592
-    /* XXX Untested
Daniel P. Berrange e3a592
-    { VIR_STORAGE_FILE_BOCHS, "Bochs Virtual HD Image", NULL,
Daniel P. Berrange e3a592
-      LV_LITTLE_ENDIAN, 64, 0x20000,
Daniel P. Berrange e3a592
-      32+16+16+4+4+4+4+4, 8, 1, -1, NULL },*/
Daniel P. Berrange e3a592
-    /* CLoop */
Daniel P. Berrange e3a592
-    /* XXX Untested
Daniel P. Berrange e3a592
-    { VIR_STORAGE_VOL_CLOOP, "#!/bin/sh\n#V2.0 Format\nmodprobe cloop file=$0 && mount -r -t iso9660 /dev/cloop $1\n", NULL,
Daniel P. Berrange e3a592
-      LV_LITTLE_ENDIAN, -1, 0,
Daniel P. Berrange e3a592
-      -1, 0, 0, -1, NULL }, */
Daniel P. Berrange e3a592
-    /* Cow */
Daniel P. Berrange e3a592
-    { VIR_STORAGE_FILE_COW, "OOOM", NULL,
Daniel P. Berrange e3a592
-      LV_BIG_ENDIAN, 4, 2,
Daniel P. Berrange e3a592
-      4+4+1024+4, 8, 1, -1, cowGetBackingStore },
Daniel P. Berrange e3a592
-    /* DMG */
Daniel P. Berrange e3a592
-    /* XXX QEMU says there's no magic for dmg, but we should check... */
Daniel P. Berrange e3a592
-    { VIR_STORAGE_FILE_DMG, NULL, ".dmg",
Daniel P. Berrange e3a592
-      0, -1, 0,
Daniel P. Berrange e3a592
-      -1, 0, 0, -1, NULL },
Daniel P. Berrange e3a592
-    /* XXX there's probably some magic for iso we can validate too... */
Daniel P. Berrange e3a592
-    { VIR_STORAGE_FILE_ISO, NULL, ".iso",
Daniel P. Berrange e3a592
-      0, -1, 0,
Daniel P. Berrange e3a592
-      -1, 0, 0, -1, NULL },
Daniel P. Berrange e3a592
-    /* Parallels */
Daniel P. Berrange e3a592
-    /* XXX Untested
Daniel P. Berrange e3a592
-    { VIR_STORAGE_FILE_PARALLELS, "WithoutFreeSpace", NULL,
Daniel P. Berrange e3a592
-      LV_LITTLE_ENDIAN, 16, 2,
Daniel P. Berrange e3a592
-      16+4+4+4+4, 4, 512, -1, NULL },
Daniel P. Berrange e3a592
-    */
Daniel P. Berrange e3a592
-    /* QCow */
Daniel P. Berrange e3a592
-    { VIR_STORAGE_FILE_QCOW, "QFI", NULL,
Daniel P. Berrange e3a592
-      LV_BIG_ENDIAN, 4, 1,
Daniel P. Berrange e3a592
-      QCOWX_HDR_IMAGE_SIZE, 8, 1, QCOW1_HDR_CRYPT, qcow1GetBackingStore },
Daniel P. Berrange e3a592
-    /* QCow 2 */
Daniel P. Berrange e3a592
-    { VIR_STORAGE_FILE_QCOW2, "QFI", NULL,
Daniel P. Berrange e3a592
-      LV_BIG_ENDIAN, 4, 2,
Daniel P. Berrange e3a592
-      QCOWX_HDR_IMAGE_SIZE, 8, 1, QCOW2_HDR_CRYPT, qcow2GetBackingStore },
Daniel P. Berrange e3a592
-    /* VMDK 3 */
Daniel P. Berrange e3a592
-    /* XXX Untested
Daniel P. Berrange e3a592
-    { VIR_STORAGE_FILE_VMDK, "COWD", NULL,
Daniel P. Berrange e3a592
-      LV_LITTLE_ENDIAN, 4, 1,
Daniel P. Berrange e3a592
-      4+4+4, 4, 512, -1, NULL },
Daniel P. Berrange e3a592
-    */
Daniel P. Berrange e3a592
-    /* VMDK 4 */
Daniel P. Berrange e3a592
-    { VIR_STORAGE_FILE_VMDK, "KDMV", NULL,
Daniel P. Berrange e3a592
-      LV_LITTLE_ENDIAN, 4, 1,
Daniel P. Berrange e3a592
-      4+4+4, 8, 512, -1, vmdk4GetBackingStore },
Daniel P. Berrange e3a592
-    /* Connectix / VirtualPC */
Daniel P. Berrange e3a592
-    { VIR_STORAGE_FILE_VPC, "conectix", NULL,
Daniel P. Berrange e3a592
-      LV_BIG_ENDIAN, 12, 0x10000,
Daniel P. Berrange e3a592
-      8 + 4 + 4 + 8 + 4 + 4 + 2 + 2 + 4, 8, 1, -1, NULL},
Daniel P. Berrange e3a592
+    [VIR_STORAGE_FILE_RAW] = { NULL, NULL, LV_LITTLE_ENDIAN, -1, 0, 0, 0, 0, 0, NULL },
Daniel P. Berrange e3a592
+    [VIR_STORAGE_FILE_DIR] = { NULL, NULL, LV_LITTLE_ENDIAN, -1, 0, 0, 0, 0, 0, NULL },
Daniel P. Berrange e3a592
+    [VIR_STORAGE_FILE_BOCHS] = {
Daniel P. Berrange e3a592
+        /*"Bochs Virtual HD Image", */ /* Untested */ NULL,
Daniel P. Berrange e3a592
+        NULL,
Daniel P. Berrange e3a592
+        LV_LITTLE_ENDIAN, 64, 0x20000,
Daniel P. Berrange e3a592
+        32+16+16+4+4+4+4+4, 8, 1, -1, NULL
Daniel P. Berrange e3a592
+    },
Daniel P. Berrange e3a592
+    [VIR_STORAGE_FILE_CLOOP] = {
Daniel P. Berrange e3a592
+        /*"#!/bin/sh\n#V2.0 Format\nmodprobe cloop file=$0 && mount -r -t iso9660 /dev/cloop $1\n", */ /* Untested */ NULL,
Daniel P. Berrange e3a592
+        NULL,
Daniel P. Berrange e3a592
+        LV_LITTLE_ENDIAN, -1, 0,
Daniel P. Berrange e3a592
+        -1, 0, 0, -1, NULL
Daniel P. Berrange e3a592
+    },
Daniel P. Berrange e3a592
+    [VIR_STORAGE_FILE_COW] = {
Daniel P. Berrange e3a592
+        "OOOM", NULL,
Daniel P. Berrange e3a592
+        LV_BIG_ENDIAN, 4, 2,
Daniel P. Berrange e3a592
+        4+4+1024+4, 8, 1, -1, cowGetBackingStore
Daniel P. Berrange e3a592
+    },
Daniel P. Berrange e3a592
+    [VIR_STORAGE_FILE_DMG] = {
Daniel P. Berrange e3a592
+        NULL, /* XXX QEMU says there's no magic for dmg, but we should check... */
Daniel P. Berrange e3a592
+        ".dmg",
Daniel P. Berrange e3a592
+        0, -1, 0,
Daniel P. Berrange e3a592
+        -1, 0, 0, -1, NULL
Daniel P. Berrange e3a592
+    },
Daniel P. Berrange e3a592
+    [VIR_STORAGE_FILE_ISO] = {
Daniel P. Berrange e3a592
+        NULL, /* XXX there's probably some magic for iso we can validate too... */
Daniel P. Berrange e3a592
+        ".iso",
Daniel P. Berrange e3a592
+        0, -1, 0,
Daniel P. Berrange e3a592
+        -1, 0, 0, -1, NULL
Daniel P. Berrange e3a592
+    },
Daniel P. Berrange e3a592
+    [VIR_STORAGE_FILE_QCOW] = {
Daniel P. Berrange e3a592
+        "QFI", NULL,
Daniel P. Berrange e3a592
+        LV_BIG_ENDIAN, 4, 1,
Daniel P. Berrange e3a592
+        QCOWX_HDR_IMAGE_SIZE, 8, 1, QCOW1_HDR_CRYPT, qcow1GetBackingStore,
Daniel P. Berrange e3a592
+    },
Daniel P. Berrange e3a592
+    [VIR_STORAGE_FILE_QCOW2] = {
Daniel P. Berrange e3a592
+        "QFI", NULL,
Daniel P. Berrange e3a592
+        LV_BIG_ENDIAN, 4, 2,
Daniel P. Berrange e3a592
+        QCOWX_HDR_IMAGE_SIZE, 8, 1, QCOW2_HDR_CRYPT, qcow2GetBackingStore,
Daniel P. Berrange e3a592
+    },
Daniel P. Berrange e3a592
+    [VIR_STORAGE_FILE_VMDK] = {
Daniel P. Berrange e3a592
+        "KDMV", NULL,
Daniel P. Berrange e3a592
+        LV_LITTLE_ENDIAN, 4, 1,
Daniel P. Berrange e3a592
+        4+4+4, 8, 512, -1, vmdk4GetBackingStore
Daniel P. Berrange e3a592
+    },
Daniel P. Berrange e3a592
+    [VIR_STORAGE_FILE_VPC] = {
Daniel P. Berrange e3a592
+        "conectix", NULL,
Daniel P. Berrange e3a592
+        LV_BIG_ENDIAN, 12, 0x10000,
Daniel P. Berrange e3a592
+        8 + 4 + 4 + 8 + 4 + 4 + 2 + 2 + 4, 8, 1, -1, NULL
Daniel P. Berrange e3a592
+    },
Daniel P. Berrange e3a592
 };
Daniel P. Berrange e3a592
+verify(ARRAY_CARDINALITY(fileTypeInfo) == VIR_STORAGE_FILE_LAST);
Daniel P. Berrange e3a592
 
Daniel P. Berrange e3a592
 static int
Daniel P. Berrange e3a592
 cowGetBackingStore(char **res,
Daniel P. Berrange e3a592
@@ -506,7 +506,7 @@ virStorageFileGetMetadataFromFD(const char *path,
Daniel P. Berrange e3a592
         }
Daniel P. Berrange e3a592
 
Daniel P. Berrange e3a592
         /* Validation passed, we know the file format now */
Daniel P. Berrange e3a592
-        meta->format = fileTypeInfo[i].type;
Daniel P. Berrange e3a592
+        meta->format = i;
Daniel P. Berrange e3a592
         if (fileTypeInfo[i].getBackingStore != NULL) {
Daniel P. Berrange e3a592
             char *backing;
Daniel P. Berrange e3a592
             int backingFormat;
Daniel P. Berrange e3a592
@@ -546,7 +546,7 @@ virStorageFileGetMetadataFromFD(const char *path,
Daniel P. Berrange e3a592
         if (!virFileHasSuffix(path, fileTypeInfo[i].extension))
Daniel P. Berrange e3a592
             continue;
Daniel P. Berrange e3a592
 
Daniel P. Berrange e3a592
-        meta->format = fileTypeInfo[i].type;
Daniel P. Berrange e3a592
+        meta->format = i;
Daniel P. Berrange e3a592
         return 0;
Daniel P. Berrange e3a592
     }
Daniel P. Berrange e3a592
 
Daniel P. Berrange e3a592
-- 
Daniel P. Berrange e3a592
1.7.1.1
Daniel P. Berrange e3a592