[libvirt] [RESEND][PATCH] esx: Fix floppy.fileName handling in the vmx file parser

Geoff Hickey ghickey at datagravity.com
Mon Oct 14 22:14:33 UTC 2013


[Updated to include unit tests]

The vmx file parsing code was reporting errors when parsing floppy.fileName
entries if the filename didn't end in .flp. There is no such restriction in
ESX; even using the GUI to configure floppy filenames you can specify any
arbitrary file with any extension.

Fix by changing the vmx parsing code so that it uses the floppy.fileType
value to determine whether floppy.fileName refers to a block device or a
regular file.

Also remove code that would have generated an error if no floppy.fileName
was specified. This is not an error either.

Updated the floppy tests in vmx2xmltest.c and xml2vmxtest.c.
---
 src/vmx/vmx.c                             | 28 ++++------------------------
 tests/vmx2xmldata/vmx2xml-floppy-file.vmx |  3 +++
 tests/vmx2xmldata/vmx2xml-floppy-file.xml |  5 +++++
 tests/xml2vmxdata/xml2vmx-floppy-file.vmx |  4 +++-
 tests/xml2vmxdata/xml2vmx-floppy-file.xml |  4 ++++
 5 files changed, 19 insertions(+), 25 deletions(-)

diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
index 36bc338..48487f8 100644
--- a/src/vmx/vmx.c
+++ b/src/vmx/vmx.c
@@ -2250,27 +2250,14 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con
             goto cleanup;
         }
     } else if (device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) {
-        if (virFileHasSuffix(fileName, ".flp")) {
-            if (fileType != NULL) {
-                if (STRCASENEQ(fileType, "file")) {
-                    virReportError(VIR_ERR_INTERNAL_ERROR,
-                                   _("Expecting VMX entry '%s' to be 'file' but "
-                                     "found '%s'"), fileType_name, fileType);
-                    goto cleanup;
-                }
-            }
-
-            (*def)->type = VIR_DOMAIN_DISK_TYPE_FILE;
-            (*def)->src = ctx->parseFileName(fileName, ctx->opaque);
-
-            if ((*def)->src == NULL) {
-                goto cleanup;
-            }
-        } else if (fileType != NULL && STRCASEEQ(fileType, "device")) {
+        if (fileType != NULL && STRCASEEQ(fileType, "device")) {
             (*def)->type = VIR_DOMAIN_DISK_TYPE_BLOCK;
             (*def)->src = fileName;
 
             fileName = NULL;
+        } else if (fileType != NULL && STRCASEEQ(fileType, "file")) {
+            (*def)->type = VIR_DOMAIN_DISK_TYPE_FILE;
+            (*def)->src = ctx->parseFileName(fileName, ctx->opaque);
         } else {
             virReportError(VIR_ERR_INTERNAL_ERROR,
                            _("Invalid or not yet handled value '%s' "
@@ -3538,13 +3525,6 @@ virVMXFormatFloppy(virVMXContext *ctx, virDomainDiskDefPtr def,
         virBufferAsprintf(buffer, "floppy%d.fileType = \"file\"\n", unit);
 
         if (def->src != NULL) {
-            if (! virFileHasSuffix(def->src, ".flp")) {
-                virReportError(VIR_ERR_INTERNAL_ERROR,
-                               _("Image file for floppy '%s' has unsupported "
-                                 "suffix, expecting '.flp'"), def->dst);
-                return -1;
-            }
-
             fileName = ctx->formatFileName(def->src, ctx->opaque);
 
             if (fileName == NULL) {
diff --git a/tests/vmx2xmldata/vmx2xml-floppy-file.vmx b/tests/vmx2xmldata/vmx2xml-floppy-file.vmx
index b9ee81b..344ac78 100644
--- a/tests/vmx2xmldata/vmx2xml-floppy-file.vmx
+++ b/tests/vmx2xmldata/vmx2xml-floppy-file.vmx
@@ -3,3 +3,6 @@ virtualHW.version = "4"
 floppy0.present = "true"
 floppy0.fileType = "file"
 floppy0.fileName = "floppy.flp"
+floppy1.present = "true"
+floppy1.fileType = "file"
+floppy1.fileName = "floppy"
\ No newline at end of file
diff --git a/tests/vmx2xmldata/vmx2xml-floppy-file.xml b/tests/vmx2xmldata/vmx2xml-floppy-file.xml
index f62320f..40f70d3 100644
--- a/tests/vmx2xmldata/vmx2xml-floppy-file.xml
+++ b/tests/vmx2xmldata/vmx2xml-floppy-file.xml
@@ -16,6 +16,11 @@
       <target dev='fda' bus='fdc'/>
       <address type='drive' controller='0' bus='0' target='0' unit='0'/>
     </disk>
+    <disk type='file' device='floppy'>
+      <source file='[datastore] directory/floppy'/>
+      <target dev='fdb' bus='fdc'/>
+      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
+    </disk>
     <controller type='fdc' index='0'/>
     <video>
       <model type='vmvga' vram='4096'/>
diff --git a/tests/xml2vmxdata/xml2vmx-floppy-file.vmx b/tests/xml2vmxdata/xml2vmx-floppy-file.vmx
index 11ffb01..b8ffc1e 100644
--- a/tests/xml2vmxdata/xml2vmx-floppy-file.vmx
+++ b/tests/xml2vmxdata/xml2vmx-floppy-file.vmx
@@ -9,4 +9,6 @@ numvcpus = "1"
 floppy0.present = "true"
 floppy0.fileType = "file"
 floppy0.fileName = "/vmfs/volumes/testing/floppy.flp"
-floppy1.present = "false"
+floppy1.present = "true"
+floppy1.fileType = "file"
+floppy1.fileName = "/vmfs/volumes/testing/floppy1"
diff --git a/tests/xml2vmxdata/xml2vmx-floppy-file.xml b/tests/xml2vmxdata/xml2vmx-floppy-file.xml
index 83598b3..119113a 100644
--- a/tests/xml2vmxdata/xml2vmx-floppy-file.xml
+++ b/tests/xml2vmxdata/xml2vmx-floppy-file.xml
@@ -10,5 +10,9 @@
       <source file='[testing] floppy.flp'/>
       <target dev='fda' bus='fdc'/>
     </disk>
+    <disk type='file' device='floppy'>
+      <source file='[testing] floppy1'/>
+      <target dev='fdb' bus='fdc'/>
+    </disk>
   </devices>
 </domain>
-- 
1.8.1.2




More information about the libvir-list mailing list