mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-23 03:42:19 +00:00
fix crash and regression when defining a storage volume without a format
* src/storage_conf.c: fix crash and regression when defining a storage volume without a format (Cole Robinson) Daniel
This commit is contained in:
parent
76944e8137
commit
1d9a22b785
@ -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>
|
Thu Dec 4 09:45:00 EST 2008 Cole Robinson <crobinso@redhat.com>
|
||||||
|
|
||||||
* docs/formatstorage.html.in docs/storage.html.in : Fix some
|
* docs/formatstorage.html.in docs/storage.html.in : Fix some
|
||||||
|
@ -94,6 +94,7 @@ typedef int (*virStoragePoolFormatFromString)(const char *format);
|
|||||||
typedef struct _virStorageVolOptions virStorageVolOptions;
|
typedef struct _virStorageVolOptions virStorageVolOptions;
|
||||||
typedef virStorageVolOptions *virStorageVolOptionsPtr;
|
typedef virStorageVolOptions *virStorageVolOptionsPtr;
|
||||||
struct _virStorageVolOptions {
|
struct _virStorageVolOptions {
|
||||||
|
int defaultFormat;
|
||||||
virStorageVolFormatToString formatToString;
|
virStorageVolFormatToString formatToString;
|
||||||
virStorageVolFormatFromString formatFromString;
|
virStorageVolFormatFromString formatFromString;
|
||||||
};
|
};
|
||||||
@ -139,6 +140,7 @@ static virStoragePoolTypeInfo poolTypeInfo[] = {
|
|||||||
},
|
},
|
||||||
{ .poolType = VIR_STORAGE_POOL_DIR,
|
{ .poolType = VIR_STORAGE_POOL_DIR,
|
||||||
.volOptions = {
|
.volOptions = {
|
||||||
|
.defaultFormat = VIR_STORAGE_VOL_FILE_RAW,
|
||||||
.formatFromString = virStorageVolFormatFileSystemTypeFromString,
|
.formatFromString = virStorageVolFormatFileSystemTypeFromString,
|
||||||
.formatToString = virStorageVolFormatFileSystemTypeToString,
|
.formatToString = virStorageVolFormatFileSystemTypeToString,
|
||||||
},
|
},
|
||||||
@ -150,6 +152,7 @@ static virStoragePoolTypeInfo poolTypeInfo[] = {
|
|||||||
.formatToString = virStoragePoolFormatFileSystemTypeToString,
|
.formatToString = virStoragePoolFormatFileSystemTypeToString,
|
||||||
},
|
},
|
||||||
.volOptions = {
|
.volOptions = {
|
||||||
|
.defaultFormat = VIR_STORAGE_VOL_FILE_RAW,
|
||||||
.formatFromString = virStorageVolFormatFileSystemTypeFromString,
|
.formatFromString = virStorageVolFormatFileSystemTypeFromString,
|
||||||
.formatToString = virStorageVolFormatFileSystemTypeToString,
|
.formatToString = virStorageVolFormatFileSystemTypeToString,
|
||||||
},
|
},
|
||||||
@ -163,6 +166,7 @@ static virStoragePoolTypeInfo poolTypeInfo[] = {
|
|||||||
.formatToString = virStoragePoolFormatFileSystemNetTypeToString,
|
.formatToString = virStoragePoolFormatFileSystemNetTypeToString,
|
||||||
},
|
},
|
||||||
.volOptions = {
|
.volOptions = {
|
||||||
|
.defaultFormat = VIR_STORAGE_VOL_FILE_RAW,
|
||||||
.formatFromString = virStorageVolFormatFileSystemTypeFromString,
|
.formatFromString = virStorageVolFormatFileSystemTypeFromString,
|
||||||
.formatToString = virStorageVolFormatFileSystemTypeToString,
|
.formatToString = virStorageVolFormatFileSystemTypeToString,
|
||||||
},
|
},
|
||||||
@ -184,6 +188,7 @@ static virStoragePoolTypeInfo poolTypeInfo[] = {
|
|||||||
.formatToString = virStoragePoolFormatDiskTypeToString,
|
.formatToString = virStoragePoolFormatDiskTypeToString,
|
||||||
},
|
},
|
||||||
.volOptions = {
|
.volOptions = {
|
||||||
|
.defaultFormat = VIR_STORAGE_VOL_DISK_NONE,
|
||||||
.formatFromString = virStorageVolFormatDiskTypeFromString,
|
.formatFromString = virStorageVolFormatDiskTypeFromString,
|
||||||
.formatToString = virStorageVolFormatDiskTypeToString,
|
.formatToString = virStorageVolFormatDiskTypeToString,
|
||||||
},
|
},
|
||||||
@ -961,7 +966,12 @@ virStorageVolDefParseDoc(virConnectPtr conn,
|
|||||||
ret->target.path = virXPathString(conn, "string(/volume/target/path)", ctxt);
|
ret->target.path = virXPathString(conn, "string(/volume/target/path)", ctxt);
|
||||||
if (options->formatFromString) {
|
if (options->formatFromString) {
|
||||||
char *format = virXPathString(conn, "string(/volume/target/format/@type)", ctxt);
|
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,
|
virStorageReportError(conn, VIR_ERR_XML_ERROR,
|
||||||
_("unknown volume format type %s"), format);
|
_("unknown volume format type %s"), format);
|
||||||
VIR_FREE(format);
|
VIR_FREE(format);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user