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 <[email protected]> --- 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; } -- 2.4.3
