mirror of https://github.com/xqemu/xqemu.git
raw-posix: Detect CDROM via ioctl on linux
Current CDROM detection is hardcoded based on source file name. Make this smarter on linux by attempting a CDROM specific ioctl. This makes '-cdrom /dev/sr0' succeed with no media present. v2: Give ioctl check higher priority than filename check. v3: Actually initialize 'prio' variable. Check for ioctl success rather than absence of specific failure. v4: Explicitly mention that change is linux specific. Signed-off-by: Cole Robinson <crobinso@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
301d2908b9
commit
3baf720e6b
|
@ -1140,9 +1140,25 @@ static int cdrom_open(BlockDriverState *bs, const char *filename, int flags)
|
||||||
|
|
||||||
static int cdrom_probe_device(const char *filename)
|
static int cdrom_probe_device(const char *filename)
|
||||||
{
|
{
|
||||||
|
int fd, ret;
|
||||||
|
int prio = 0;
|
||||||
|
|
||||||
if (strstart(filename, "/dev/cd", NULL))
|
if (strstart(filename, "/dev/cd", NULL))
|
||||||
return 100;
|
prio = 50;
|
||||||
return 0;
|
|
||||||
|
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)
|
||||||
|
prio = 100;
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
out:
|
||||||
|
return prio;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cdrom_is_inserted(BlockDriverState *bs)
|
static int cdrom_is_inserted(BlockDriverState *bs)
|
||||||
|
|
Loading…
Reference in New Issue