]> xenbits.xensource.com Git - libvirt.git/commitdiff
fix crash and regression when defining a storage volume without a format
authorDaniel Veillard <veillard@redhat.com>
Thu, 4 Dec 2008 15:22:04 +0000 (15:22 +0000)
committerDaniel Veillard <veillard@redhat.com>
Thu, 4 Dec 2008 15:22:04 +0000 (15:22 +0000)
* src/storage_conf.c: fix crash and regression when defining
  a storage volume without a format (Cole Robinson)
Daniel

ChangeLog
src/storage_conf.c

index a690a52ef346140765c46b612b389c5c2036cc05..4bb4c45beb941aa465dbd3388ffada05fbd62a10 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Thu Dec  4 16:20:20 CET 2008 Daniel Veillard <veillard@redhat.com>
+
+       * src/storage_conf.c: fix crash and regression when defining
+         a storage volume without a format (Cole Robinson)
+
 Thu Dec  4 09:45:00 EST 2008 Cole Robinson <crobinso@redhat.com>
 
        * docs/formatstorage.html.in docs/storage.html.in : Fix some
index 18a0d1c86722db4651bfd8fb932c1cfd00628946..192932b23bf9bc5bd4842fc0bb4a50634eca3dab 100644 (file)
@@ -94,6 +94,7 @@ typedef int (*virStoragePoolFormatFromString)(const char *format);
 typedef struct _virStorageVolOptions virStorageVolOptions;
 typedef virStorageVolOptions *virStorageVolOptionsPtr;
 struct _virStorageVolOptions {
+    int defaultFormat;
     virStorageVolFormatToString formatToString;
     virStorageVolFormatFromString formatFromString;
 };
@@ -139,6 +140,7 @@ static virStoragePoolTypeInfo poolTypeInfo[] = {
     },
     { .poolType = VIR_STORAGE_POOL_DIR,
       .volOptions = {
+            .defaultFormat = VIR_STORAGE_VOL_FILE_RAW,
             .formatFromString = virStorageVolFormatFileSystemTypeFromString,
             .formatToString = virStorageVolFormatFileSystemTypeToString,
         },
@@ -150,6 +152,7 @@ static virStoragePoolTypeInfo poolTypeInfo[] = {
             .formatToString = virStoragePoolFormatFileSystemTypeToString,
         },
       .volOptions = {
+            .defaultFormat = VIR_STORAGE_VOL_FILE_RAW,
             .formatFromString = virStorageVolFormatFileSystemTypeFromString,
             .formatToString = virStorageVolFormatFileSystemTypeToString,
         },
@@ -163,6 +166,7 @@ static virStoragePoolTypeInfo poolTypeInfo[] = {
             .formatToString = virStoragePoolFormatFileSystemNetTypeToString,
         },
       .volOptions = {
+            .defaultFormat = VIR_STORAGE_VOL_FILE_RAW,
             .formatFromString = virStorageVolFormatFileSystemTypeFromString,
             .formatToString = virStorageVolFormatFileSystemTypeToString,
         },
@@ -184,6 +188,7 @@ static virStoragePoolTypeInfo poolTypeInfo[] = {
             .formatToString = virStoragePoolFormatDiskTypeToString,
         },
       .volOptions = {
+            .defaultFormat = VIR_STORAGE_VOL_DISK_NONE,
             .formatFromString = virStorageVolFormatDiskTypeFromString,
             .formatToString = virStorageVolFormatDiskTypeToString,
         },
@@ -961,7 +966,12 @@ virStorageVolDefParseDoc(virConnectPtr conn,
     ret->target.path = virXPathString(conn, "string(/volume/target/path)", ctxt);
     if (options->formatFromString) {
         char *format = virXPathString(conn, "string(/volume/target/format/@type)", ctxt);
-        if ((ret->target.format = (options->formatFromString)(format)) < 0) {
+        if (format == NULL)
+            ret->target.format = options->defaultFormat;
+        else
+            ret->target.format = (options->formatFromString)(format);
+
+        if (ret->target.format < 0) {
             virStorageReportError(conn, VIR_ERR_XML_ERROR,
                                   _("unknown volume format type %s"), format);
             VIR_FREE(format);