qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [Qemu-ppc] real cdrom access failure


From: Kevin Wolf
Subject: Re: [Qemu-devel] [Qemu-ppc] real cdrom access failure
Date: Mon, 10 Jun 2013 17:15:24 +0200
User-agent: Mutt/1.5.21 (2010-09-15)

Am 10.06.2013 um 16:45 hat Andreas Färber geschrieben:
> Am 10.06.2013 16:33, schrieb Kevin Wolf:
> > Am 10.06.2013 um 16:22 hat Andreas Färber geschrieben:
> >> Am 10.06.2013 15:41, schrieb Alexander Graf:
> >>> On 06/10/2013 03:39 PM, Programmingkid wrote:
> >>>> On Jun 9, 2013, at 12:34 PM, Alexander Graf wrote:
> >>>>> On 09.06.2013, at 18:28, Programmingkid wrote:
> >>>>>
> >>>>>> I am trying to access the cdrom drive in QEMU 1.5.0, but can't. This
> >>>>>> is the error I see: qemu-system-ppc: -cdrom /dev/cdrom: could not
> >>>>>> open disk image /dev/cdrom: No such file or directory. I think this
> >>>>>> is a bug with version 1.5.0 on Mac OS X. Anybody else notice this
> >>>>>> problem?
> >>>>> Mac OS X doesn't provide a /dev/cdrom link. You have to point it
> >>>>> directly to the target device. To get a list of available devices, try
> >>>>>
> >>>>>    $ diskutil list
> >>>>>
> >>>>> Also make sure that all partitions and file systems on top of the
> >>>>> CD-ROM are unmounted (diskutil unmount or just umount), as OSX won't
> >>>>> allow direct access to /dev/disk1 otherwise.
> >>>>
> >>>> The -cdrom /dev/cdrom option always worked in the past. Just not with
> >>>> version 1.5.0.
> >>>
> >>> Hrm. CC'ing Andreas and Peter. They're the best matches to people
> >>> knowing their way around OSX host support :).
> >>
> >> The translation of /dev/cdrom happens in block/raw-posix.c:hdev_open().
> >>
> >> For v1.5.0 a filename parameter was dropped from the block API, so
> >> currently the Mac OS X code is changing the local variable so the
> >> modified filename variable never makes it into the QDict *options. :/
> > 
> > Oh nice, magic filenames. Whoever thought this was a good idea...
> > 
> > It's easy enough to fix, just put the string back to the QDict in the
> > end. It feels wrong to do something like this, but if we have been doing
> > it before, I guess we must keep doing so.
> 
> block.c: * Detect host devices. By convention, /dev/cdrom[N] is always
> block/raw-posix.c:    if (strstart(filename, "/dev/cdrom", NULL))
> block/raw-posix.c:    if (strstart(filename, "/dev/cdrom", NULL)) {
> block/raw-win32.c:    if (strstart(filename, "/dev/cdrom", NULL))
> block/raw-win32.c:    if (strstart(filename, "/dev/cdrom", NULL)) {
> 
> I happened to know about this issue because we have similar downstream
> block drivers that need to translate the filename and broke with v1.5.
> 
> I'll look into fixing this if no one beats me to it. We'll probably need
> a g_strdup() since bsdPath[] is on the stack.

Not necessary, qstring_from_str() creates a copy anyway. I can't test
it, but does the following work for you?

Kevin

diff --git a/block/raw-posix.c b/block/raw-posix.c
index c0ccf27..90ce9f8 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -1350,6 +1350,7 @@ static int hdev_open(BlockDriverState *bs, QDict 
*options, int flags)
                 qemu_close(fd);
             }
             filename = bsdPath;
+            qdict_put(options, "filename", qstring_from_str(filename));
         }
 
         if ( mediaIterator )




reply via email to

[Prev in Thread] Current Thread [Next in Thread]