From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NUTSa-0002KS-6j for qemu-devel@nongnu.org; Mon, 11 Jan 2010 18:14:08 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NUTSW-0002Jz-1M for qemu-devel@nongnu.org; Mon, 11 Jan 2010 18:14:07 -0500 Received: from [199.232.76.173] (port=41927 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NUTSV-0002Jw-Of for qemu-devel@nongnu.org; Mon, 11 Jan 2010 18:14:03 -0500 Received: from kirsty.vergenet.net ([202.4.237.240]:53431) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NUTSV-00058f-51 for qemu-devel@nongnu.org; Mon, 11 Jan 2010 18:14:03 -0500 Date: Tue, 12 Jan 2010 10:13:57 +1100 From: Simon Horman Subject: Re: [Qemu-devel] [PATCH] raw-posix: Detect CDROM via ioctl Message-ID: <20100111231357.GF8096@verge.net.au> References: <1263234619-14522-1-git-send-email-crobinso@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1263234619-14522-1-git-send-email-crobinso@redhat.com> List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Cole Robinson Cc: qemu-devel@nongnu.org On Mon, Jan 11, 2010 at 01:30:18PM -0500, Cole Robinson wrote: > Current CDROM detection is hardcoded based on source file name. > Make this smarter by attempting a CDROM specific ioctl. > > This makes '-cdrom /dev/sr0' succeed with no media present. > > Signed-off-by: Cole Robinson > --- > block/raw-posix.c | 18 +++++++++++++++++- > 1 files changed, 17 insertions(+), 1 deletions(-) > > diff --git a/block/raw-posix.c b/block/raw-posix.c > index 5a6a22b..3ec58d0 100644 > --- a/block/raw-posix.c > +++ b/block/raw-posix.c > @@ -1140,9 +1140,25 @@ static int cdrom_open(BlockDriverState *bs, const char *filename, int flags) > > static int cdrom_probe_device(const char *filename) > { > + int fd, ret; > + > if (strstart(filename, "/dev/cd", NULL)) > return 100; > - return 0; > + > + fd = open(filename, O_RDONLY | O_NONBLOCK); > + if (fd < 0) { > + return 0; > + } > + > + /* Attempt to detect via a CDROM specific ioctl */ > + if (ioctl(fd, CDROM_DRIVE_STATUS, CDSL_CURRENT) < 0 && errno == EINVAL) { > + ret = 0; > + } else { > + ret = 100; > + } > + > + close(fd); > + return ret; > } > > static int cdrom_is_inserted(BlockDriverState *bs) Does this render the remaining "/dev/cd" check unnecessary? Likewise for the similar change that you posted for floppies.