cdrom_id: Fix DVD blank detection for sloppy firmware
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>
This commit is contained in:
committed by
Martin Pitt
parent
2458db3edd
commit
5e267ea5a3
@@ -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)) {
|
||||
|
||||
Reference in New Issue
Block a user