chiark / gitweb /
udevadm: control - add comment to man page about --reload-rules
[elogind.git] / extras / cdrom_id / cdrom_id.c
index 371d6a2dbd197898c69d381d2cee4fe5267662b5..921e5346c920f2d10d168c9e97c58d4e196af3be 100644 (file)
@@ -197,6 +197,16 @@ static int cd_capability_compat(struct udev *udev, int fd)
        return 0;
 }
 
+static int cd_media_compat(struct udev *udev, int fd)
+{
+       if (ioctl(fd, CDROM_DRIVE_STATUS, CDSL_CURRENT) != CDS_DISC_OK) {
+               info(udev, "CDROM_DRIVE_STATUS != CDS_DISC_OK\n");
+               return -1;
+       }
+       cd_media = 1;
+       return 0;
+}
+
 static int cd_inquiry(struct udev *udev, int fd) {
        struct scsi_cmd sc;
        unsigned char inq[128];
@@ -416,8 +426,10 @@ static int cd_media_info(struct udev *udev, int fd)
 
        info(udev, "disk type %02x\n", header[8]);
 
-       if ((header[2] & 3) < 4)
+       /* exclude plain CDROM, some fake cdroms return 0 for "blank" media here */
+       if (!cd_media_cd_rom && (header[2] & 3) < 4)
                cd_media_state = media_status[header[2] & 3];
+
        if ((header[2] & 3) != 2)
                cd_media_session_next = header[10] << 8 | header[5];
        cd_media_session_count = header[9] << 8 | header[4];
@@ -569,7 +581,11 @@ int main(int argc, char *argv[])
                goto exit;
        }
 
-       /* check drive */
+       /* check for media */
+       if (cd_media_compat(udev, fd) < 0)
+               goto print;
+
+       /* check if drive talks MMC */
        if (cd_inquiry(udev, fd) < 0)
                goto print;