Converting a floppy image from RAW to VPC and back will generate a zero-padded file of the wrong size, because the geometry is not computed correctly. Special case floppy disk images, handling standard MS-DOS capacities (160/180/320/360 for low density 5.25" disks, 1200 for high density 5.25" disks, 720/1440/2880 for 3.5" disks).
Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> --- block/vpc.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-) diff --git a/block/vpc.c b/block/vpc.c index cb6c570..549a632 100644 --- a/block/vpc.c +++ b/block/vpc.c @@ -463,6 +463,14 @@ static int calculate_geometry(int64_t total_sectors, uint16_t* cyls, { uint32_t cyls_times_heads; + if (total_sectors <= 5760) { + /* Floppy disk geometry */ + *heads = total_sectors < 640 ? 1 : 2; /* 1 = single side 5.25" */ + *cyls = total_sectors < 1440 ? 40 : 80; /* 40 = low density 5.25" */ + *secs_per_cyl = total_sectors / *heads / *cyls; + return 0; + } + if (total_sectors > 65535 * 16 * 255) return -EFBIG; -- 1.7.6