From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NVCod-0004Kn-Q4 for qemu-devel@nongnu.org; Wed, 13 Jan 2010 18:39:55 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NVCoY-0004Jp-OP for qemu-devel@nongnu.org; Wed, 13 Jan 2010 18:39:55 -0500 Received: from [199.232.76.173] (port=43104 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NVCoY-0004Jm-Ke for qemu-devel@nongnu.org; Wed, 13 Jan 2010 18:39:50 -0500 Received: from mail2.shareable.org ([80.68.89.115]:58657) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1NVCoY-0004tL-83 for qemu-devel@nongnu.org; Wed, 13 Jan 2010 18:39:50 -0500 Date: Wed, 13 Jan 2010 23:39:45 +0000 From: Jamie Lokier Subject: Re: [Qemu-devel] [PATCH v2] raw-posix: Detect CDROM via ioctl Message-ID: <20100113233945.GA18418@shareable.org> References: <1263310152-4443-1-git-send-email-crobinso@redhat.com> <20100112171114.GB31233@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20100112171114.GB31233@lst.de> List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Christoph Hellwig Cc: qemu-devel@nongnu.org, Cole Robinson Christoph Hellwig wrote: > On Tue, Jan 12, 2010 at 10:29:11AM -0500, Cole Robinson wrote: > > static int cdrom_probe_device(const char *filename) > > { > > + int fd, ret, prio; > > + > > if (strstart(filename, "/dev/cd", NULL)) > > - return 100; > > - return 0; > > + prio = 50; > > + > > + fd = open(filename, O_RDONLY | O_NONBLOCK); > > + if (fd < 0) { > > + goto out; > > + } > > + > > + /* Attempt to detect via a CDROM specific ioctl */ > > + ret = ioctl(fd, CDROM_DRIVE_STATUS, CDSL_CURRENT); > > + if (!(ret < 0 && errno == EINVAL)) > > + prio = 100; > > + > > + close(fd); > > +out: > > + return prio; > > } > > Looks good. We'll now get an open each from the cdrom and floppy > drivers for each image we're trying to open, but I guess that should be > fine. A theoretical problem, that applies to all devices detected in this way: A few ioctl values (the integers which the names expand to) overlap between different devices. It's not policy but it has happened. This shows up in strace sometimes, for example on Linux the isatty() C library function uses TCGETS, but in strace it shows as: SNDCTL_TMR_TIMEBASE or TCGETS I tried isatty() on Linux sound devices and it seemed to be reliable anyway :-) But, in theory, on some host or other, the CD-ROM and floppy checks could do accidentally do something else on the wrong sort of device. I don't know how assiduous hosts are about keeping the number spaces separate. -- Jamie