[Top][All Lists]

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

[Qemu-devel] [PATCH v4 05/12] fdc: Throw an assertion on misconfigured f

From: John Snow
Subject: [Qemu-devel] [PATCH v4 05/12] fdc: Throw an assertion on misconfigured fd_formats table
Date: Wed, 20 Jan 2016 01:51:27 -0500

pick_geometry is a convoluted function that makes it difficult to tell
at a glance what QEMU's current behavior for choosing a floppy drive
type is when it can't quite identify the diskette.

If drive type is NONE, it considers all drive types in the candidate
geometry table to be a match, and saves the first such one as
"first_match." If drive_type is not NONE, first_match is set to the first
candidate geometry in the table that matched our specific drive type.

This means:

- If drive type is NONE, the default is truly fd_formats[0], a 1.44MB
  type, because first_match will always get set to the first item.

- If drive type is not NONE, pick_geometry gets fussier and attempts to
  only pick a geometry if it matches our drive type. In this case,
  first_match must always be set because all known drive types have
  candidate geometries listed in the table.

- If drive type is not NONE and the fd_formats table lists no options for
  our drive type, we choose fd_formats[1], an incomprehensibly bizarre
  choice that can never happen anyway.

Correct this: If first_match is -1, it can ONLY mean we didn't edit our
fd_formats table correctly. Throw an assertion instead.

Signed-off-by: John Snow <address@hidden>
 hw/block/fdc.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/hw/block/fdc.c b/hw/block/fdc.c
index e72a906..370ece1 100644
--- a/hw/block/fdc.c
+++ b/hw/block/fdc.c
@@ -273,7 +273,9 @@ static void pick_geometry(FDrive *drv)
     if (match == -1) {
         if (first_match == -1) {
-            match = 1;
+            error_setg(&error_abort, "No candidate geometries present in table 
+                       " for floppy drive type '%s'",
+                       FloppyDriveType_lookup[drv->drive]);
         } else {
             match = first_match;

reply via email to

[Prev in Thread] Current Thread [Next in Thread]