--- cdparanoia-III-alpha9.8/interface/scsi_interface.c~ 2006-10-12 17:15:07 +0400 +++ cdparanoia-III-alpha9.8/interface/scsi_interface.c 2006-10-12 17:18:17 +0400 @@ -621,9 +621,7 @@ static int mode_sense(cdrom_drive *d,int static int atapi_mode_select(cdrom_drive *d, int density, int secsize) { unsigned char *mode; - - ((struct sg_info *)d->sg)->setup_scsi_cmd(d, SCSI_MODE_SELECT_10, 10, 16, 0); - memcpy(((struct sg_info *)d->sg)->dxferp,(char []) { + char xsrc[16] = { /* mode parameter header */ 0, 0, 0, 0, 0, 0, 0, 8, /* Block Descriptor Length */ @@ -631,7 +629,11 @@ static int atapi_mode_select(cdrom_drive 0, /* Density Code */ 0, 0, 0, /* # of Blocks */ 0, /* reserved */ - 0, 0, 0},/* Blocklen */ + 0, 0, 0};/* Blocklen */ + + ((struct sg_info *)d->sg)->setup_scsi_cmd(d, SCSI_MODE_SELECT_10, 10, 16, 0); + memcpy(((struct sg_info *)d->sg)->dxferp, + xsrc, 16); mode = ((struct sg_info *)d->sg)->dxferp; @@ -649,9 +651,7 @@ static int atapi_mode_select(cdrom_drive static int scsi_mode_select(cdrom_drive *d, int density, int secsize) { unsigned char *mode; - - ((struct sg_info *)d->sg)->setup_scsi_cmd(d, SCSI_MODE_SELECT_6, 6, 12, 0); - memcpy(((struct sg_info *)d->sg)->dxferp,(char []) { + char xsrc[12] = { /* mode section */ 0, 0, 0, @@ -659,7 +659,11 @@ static int scsi_mode_select(cdrom_drive 0, /* Density Code */ 0, 0, 0, /* # of Blocks */ 0, /* reserved */ - 0, 0, 0},/* Blocklen */ + 0, 0, 0};/* Blocklen */ + + ((struct sg_info *)d->sg)->setup_scsi_cmd(d, SCSI_MODE_SELECT_6, 6, 12, 0); + memcpy(((struct sg_info *)d->sg)->dxferp, + xsrc, 12); /* prepare to read cds in the previous mode */