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)
|
||||
{
|
||||
int fd, ret;
|
||||
int prio = 0;
|
||||
|
||||
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)
|
||||
prio = 100;
|
||||
|
||||
close(fd);
|
||||
out:
|
||||
return prio;
|
||||
}
|
||||
|
||||
static int cdrom_is_inserted(BlockDriverState *bs)
|
||||
|
Loading…
Reference in New Issue
Block a user