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 )