On Fri, Mar 20, 2009 at 11:01 PM, Anthony Liguori <address@hidden> wrote:
Robert Riebisch wrote:
Hi!
If I run QEMU on Win32 with option "-fda a:", then I'm unable to access
physical floppies from guest OS. "Physical" also includes virtual drives
created by <http://chitchat.at.infoseek.co.jp/vmware/vfd.html>.
I'm also unable to boot such floppies ("-boot a"). Error message is:
"Boot failed: not a bootable floppy disk"
By doing some builds I narrowed the problem down to
<http://svn.savannah.gnu.org/viewvc?view=rev&root=qemu&revision=6677> by
Anthony Liguori.
I suspect this code:
block-raw-win32.c:raw_getlength():
case FTYPE_HARDDISK:
status = DeviceIoControl(s->hfile, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX,
NULL, 0, &dg, sizeof(dg), &count, NULL);
if (status != 0) {
l = dg.DiskSize;
}
break;
Is not doing the correct thing.
Sort of; the real problem is in find_device_type(), it thinks that the
device is a file :S
The bug is here:
type = GetDriveType(s->drive_path);
if (type == DRIVE_CDROM)
return FTYPE_CD;
else
return FTYPE_FILE;
GetDriveType("a:") returns DRIVE_REMOVABLE, which according to MSDN
means "The drive has removable media; for example, a floppy drive,
thumb drive, or flash card reader."; the code is not expecting such a
value so it sets the type to FTYPE_FILE; raw_getlength() then uses
GetFileSize() which of course fails...
Here's a patch for properly handling the return value of GetDriveType
(sorry for the attachment, but I'm currently using a remote VM over
RDP and don't have a decent mailer installed).
Luca