From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Ll9M2-0001KO-8O for qemu-devel@nongnu.org; Sat, 21 Mar 2009 18:07:46 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Ll9Lw-0001JP-Mc for qemu-devel@nongnu.org; Sat, 21 Mar 2009 18:07:44 -0400 Received: from [199.232.76.173] (port=36426 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ll9Lw-0001JK-GA for qemu-devel@nongnu.org; Sat, 21 Mar 2009 18:07:40 -0400 Received: from mail-bw0-f172.google.com ([209.85.218.172]:42600) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Ll9Lv-00079y-SO for qemu-devel@nongnu.org; Sat, 21 Mar 2009 18:07:40 -0400 Received: by bwz20 with SMTP id 20so1147563bwz.34 for ; Sat, 21 Mar 2009 15:07:39 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <49C41240.8030102@codemonkey.ws> References: <49C16D71.7020104@bttr-software.de> <49C41240.8030102@codemonkey.ws> Date: Sat, 21 Mar 2009 23:07:38 +0100 Message-ID: <68676e00903211507o79e84b73j79d63dd03b7750f2@mail.gmail.com> Subject: Re: [Qemu-devel] r6677 broke access to physical FDD on Win32 From: Luca Tettamanti Content-Type: multipart/mixed; boundary=001485f8816ef1d28e0465a842a3 Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org --001485f8816ef1d28e0465a842a3 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Fri, Mar 20, 2009 at 11:01 PM, Anthony Liguori w= rote: > 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 . >> >> 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 >> by >> Anthony Liguori. >> > > I suspect this code: > > block-raw-win32.c:raw_getlength(): > > =C2=A0 case FTYPE_HARDDISK: > =C2=A0 =C2=A0 =C2=A0 status =3D DeviceIoControl(s->hfile, IOCTL_DISK_GET_= DRIVE_GEOMETRY_EX, > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0NULL, 0, &dg, sizeof(dg), &count, NUL= L); > =C2=A0 =C2=A0 =C2=A0 if (status !=3D 0) { > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 l =3D dg.DiskSize; > =C2=A0 =C2=A0 =C2=A0 } > =C2=A0 =C2=A0 =C2=A0 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 =3D GetDriveType(s->drive_path); if (type =3D=3D 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 --001485f8816ef1d28e0465a842a3 Content-Type: application/octet-stream; name="fix-fda.diff" Content-Disposition: attachment; filename="fix-fda.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fskshmsq0 Rml4IGZpbmRfZGV2aWNlX3R5cGUoKSB0byBjb3JyZWN0bHkgaWRlbnRpZnkgZmxvcHB5IGRpc2sg ZGV2aWNlczsKdGhleSBhcmUgcmVwb3J0ZWQgYXMgRFJJVkVfUkVNT1ZBQkxFIGJ5IHdpbjMyLgoK U2lnbmVkLW9mZi1ieTogTHVjYSBUZXR0YW1hbnRpCgpkaWZmIC0tZ2l0IGEvYmxvY2stcmF3LXdp bjMyLmMgYi9ibG9jay1yYXctd2luMzIuYwppbmRleCBkMDM0YjRhLi5iYTliMGNmIDEwMDY0NAot LS0gYS9ibG9jay1yYXctd2luMzIuYworKysgYi9ibG9jay1yYXctd2luMzIuYwpAQCAtNDA4LDEw ICs0MDgsMTUgQEAgc3RhdGljIGludCBmaW5kX2RldmljZV90eXBlKEJsb2NrRHJpdmVyU3RhdGUg KmJzLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKICAgICAgICAgICAgIHJldHVybiBGVFlQRV9IQVJE RElTSzsKICAgICAgICAgc25wcmludGYocy0+ZHJpdmVfcGF0aCwgc2l6ZW9mKHMtPmRyaXZlX3Bh dGgpLCAiJWM6XFwiLCBwWzBdKTsKICAgICAgICAgdHlwZSA9IEdldERyaXZlVHlwZShzLT5kcml2 ZV9wYXRoKTsKLSAgICAgICAgaWYgKHR5cGUgPT0gRFJJVkVfQ0RST00pCisgICAgICAgIHN3aXRj aCAodHlwZSkgeworICAgICAgICBjYXNlIERSSVZFX1JFTU9WQUJMRToKKyAgICAgICAgY2FzZSBE UklWRV9GSVhFRDoKKyAgICAgICAgICAgIHJldHVybiBGVFlQRV9IQVJERElTSzsKKyAgICAgICAg Y2FzZSBEUklWRV9DRFJPTToKICAgICAgICAgICAgIHJldHVybiBGVFlQRV9DRDsKLSAgICAgICAg ZWxzZQorICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIEZUWVBFX0ZJTEU7Cisg ICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICByZXR1cm4gRlRZUEVfRklMRTsKICAgICB9 Cg== --001485f8816ef1d28e0465a842a3--