chiark / gitweb /
cdrom_id: Fix DVD blank detection for sloppy firmware
authorJan Drzewiecki <jonie@icpnet.pl>
Mon, 30 Aug 2010 22:37:28 +0000 (00:37 +0200)
committerMartin Pitt <martin.pitt@ubuntu.com>
Mon, 30 Aug 2010 22:41:35 +0000 (00:41 +0200)
Reportedly, many CD drive firmwares will only consider the MSB in a READ
command, thus if we request 17 blocks to be read, we'll actually only get 16 in
many cases, and thus miss out the interesting sector #17. This would lead to
falsely considering nonempty DVDs as blank.

Fetch 32 blocks now, which should work everywhere.

Signed-off-by: Martin Pitt <martin.pitt@ubuntu.com>
extras/cdrom_id/cdrom_id.c

index 8480d7b334d1ecdb2ccbaa16141561a1e7099b32..0153af66330aeccc7be0248ca6a3656585b4274c 100644 (file)
@@ -590,7 +590,7 @@ static int cd_media_info(struct udev *udev, int fd)
         * always "complete", DVD-RAM are "other" or "complete" if the disc is
         * write protected; we need to check the contents if it is blank */
        if ((cd_media_dvd_rw_ro || cd_media_dvd_plus_rw || cd_media_dvd_plus_rw_dl || cd_media_dvd_ram) && (header[2] & 3) > 1) {
-               unsigned char buffer[17 * 2048];
+               unsigned char buffer[32 * 2048];
                unsigned char result, len;
                int block, offset;
 
@@ -661,7 +661,7 @@ static int cd_media_info(struct udev *udev, int fd)
                scsi_cmd_init(udev, &sc, buffer, sizeof(buffer));
                scsi_cmd_set(udev, &sc, 0, 0x28);
                scsi_cmd_set(udev, &sc, 5, 0);
-               scsi_cmd_set(udev, &sc, 8, 17);
+               scsi_cmd_set(udev, &sc, 8, 32);
                scsi_cmd_set(udev, &sc, 9, 0);
                err = scsi_cmd_run(udev, &sc, fd, buffer, sizeof(buffer));
                if ((err != 0)) {