Bug fix: Old MMC-1 drives were rejected because of mode page 2Ah length

This commit is contained in:
Thomas Schmitt 2009-06-03 08:58:18 +00:00
parent 3013dd0856
commit 09efaa21bc
2 changed files with 18 additions and 13 deletions

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2009.06.02.172201"
#define Cdrskin_timestamP "2009.06.03.085637"

View File

@ -291,7 +291,7 @@ void spc_allow(struct burn_drive *d)
}
/*
ts A70518 : Do not call with *alloc_len < 8
ts A70518 - A90603 : Do not call with *alloc_len < 10
*/
/** flag&1= do only inquire alloc_len */
static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
@ -308,7 +308,7 @@ static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
/* ts A61225 : 1 = report about post-MMC-1 speed descriptors */
static int speed_debug = 0;
if (*alloc_len < 8)
if (*alloc_len < 10)
return 0;
/* ts A90602 : Clearing mdata before command execution */
@ -347,15 +347,20 @@ static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
in MMC-3 6.3.11 there are at least 28 bytes plus a variable length
set of speed descriptors. In MMC-5 E.11 it is declared "legacy".
*/
/* ts A90603 :
SPC-1 8.3.3 enumerates mode page format bytes from 0 to n and
defines Page Length as (n-1).
*/
page_length = page[1];
old_alloc_len = *alloc_len;
*alloc_len = page_length + 8;
*alloc_len = page_length + 10;
if (flag & 1)
return !was_error;
if (page_length + 8 > old_alloc_len)
page_length = old_alloc_len - 8;
if (page_length < 22) {
/* ts A90602 */
if (page_length + 10 > old_alloc_len)
page_length = old_alloc_len - 10;
/* ts A90602 : 20 to asserts page[21]. (see SPC-1 8.3.3) */
if (page_length < 20) {
m->valid = -1;
sprintf(msg, "MODE SENSE page 2A too short: %s : %d",
d->devname, page_length);
@ -400,7 +405,7 @@ static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
mmc_get_configuration(d);
/* ts A61225 : end of MMC-1 , begin of MMC-3 */
if (page_length < 32) /* no write speed descriptors ? */
if (page_length < 30) /* no write speed descriptors ? */
goto try_mmc_get_performance;
m->cur_write_speed = page[28] * 256 + page[29];
@ -470,7 +475,7 @@ try_mmc_get_performance:;
void spc_sense_caps(struct burn_drive *d)
{
int alloc_len, start_len = 22, ret;
int alloc_len, start_len = 30, ret;
if (mmc_function_spy(d, "sense_caps") <= 0)
return;