Changed pseudo-cdrecord addresses: /dev/hdX = ATA:(X-'a')/2,(X-'a')%2,0

This commit is contained in:
2006-10-11 19:21:26 +00:00
parent be991c61d7
commit 6310bd0c74
3 changed files with 48 additions and 41 deletions

View File

@ -1416,7 +1416,7 @@ int Cdrpreskin_queue_msgs(struct CdrpreskiN *o, int flag)
@param flag Bitfield for control purposes:
bit0= old_pseudo_scsi_adr
@return 1 success, 0=no recognizable format, -1=severe error,
-2 could not find scsi device
-2 could not find scsi device, -3 address format error
*/
int Cdrpreskin__cdrecord_to_dev(char *adr, char device_adr[Cdrskin_adrleN],
int *driveno, int flag)
@ -1469,19 +1469,23 @@ int Cdrpreskin__cdrecord_to_dev(char *adr, char device_adr[Cdrskin_adrleN],
} else if(busno!=0) {
fprintf(stderr,
"cdrskin: FATAL : dev=[Prefix:]Bus,Target,Lun expects Bus out of {0,1,2}\n");
return(0);
return(-3);
}
} else {
if(busno<0) {
fprintf(stderr,
"cdrskin: FATAL : dev=[Prefix:]Bus,Target,Lun expects Bus number >= 0\n");
return(0);
return(-3);
}
if((strncmp(adr,"ATA",3)==0 && (adr[3]==0 || adr[3]==':')) ||
(strncmp(adr,"ATAPI",5)==0 && (adr[5]==0 || adr[5]==':'))) {
/* >>> in future expect busno to have a meaning */
sprintf(device_adr,"/dev/hd%c",'a'+(*driveno));
if(busno>12 || (*driveno)<0 || (*driveno)>1) {
fprintf(stderr,
"cdrskin: FATAL : dev=ATA:Bus,Target,Lun expects Bus {0..12}, Target {0,1}\n");
return(-3);
}
sprintf(device_adr,"/dev/hd%c",'a'+(2*busno)+(*driveno));
#ifdef Cdrskin_libburn_has_convert_scsi_adR
} else {
@ -1966,7 +1970,7 @@ dev_too_long:;
} else {
ret= Cdrpreskin__cdrecord_to_dev(adr,o->device_adr,&driveno,
!!o->old_pseudo_scsi_adr);
if(ret==-2)
if(ret==-2 || ret==-3)
{ret= 0; goto ex;}
if(ret<0)
goto ex;
@ -2945,11 +2949,9 @@ int Cdrskin_driveno_to_btldev(struct CdrskiN *skin, int driveno,
if(strncmp(loc,"/dev/hd",7)==0)
if(loc[7]>='a' && loc[7]<='z')
if(loc[8]==0) {
/* >>> implement new ATA enumeration here */
sprintf(btldev,"2,%d,0",loc[7]-'a');
{ret= 2000002; goto adr_translation;}
bus_no= (loc[7]-'a')/2;
sprintf(btldev,"%d,%d,0",bus_no,(loc[7]-'a')%2);
{ret= 2000000 + bus_no; goto adr_translation;}
}
goto fallback;
} else {
@ -3037,6 +3039,7 @@ int Cdrskin_report_disc_status(struct CdrskiN *skin, enum burn_disc_status s,
int Cdrskin_scanbus(struct CdrskiN *skin, int flag)
{
int ret,i,busno,first_on_bus,pseudo_transport_group= 0,skipped_devices= 0;
int busmax= 16;
char shellsafe[5*Cdrskin_strleN+2],perms[40],btldev[Cdrskin_adrleN];
char adr[Cdrskin_adrleN],*raw_dev,*drives_shown= NULL;
struct stat stbuf;
@ -3097,14 +3100,14 @@ int Cdrskin_scanbus(struct CdrskiN *skin, int flag)
/* >>> fprintf(stderr,"Linux sg driver version: 3.1.25\n"); */
printf("Using libburn version '%s'.\n", Cdrskin_libburn_versioN);
if(pseudo_transport_group!=1000000)
printf(
"cdrskin: NOTE : The printed addresses are not cdrecord compatible !\n");
if(skin->preskin->old_pseudo_scsi_adr)
printf("cdrskin: NOTE : The printed addresses are not cdrecord compatible !\n");
for(busno= 0;busno<=16;busno++) {
for(busno= 0;busno<=busmax;busno++) {
first_on_bus= 1;
for(i=0;i<skin->n_drives;i++) {
ret= Cdrskin_driveno_to_btldev(skin,i,btldev,1);
if(busno==16 && drives_shown[i]==0) {
if(busno==busmax && drives_shown[i]==0) {
if(ret/1000000 != pseudo_transport_group) {
skipped_devices++;
if(skin->verbosity>=Cdrskin_verbose_debuG)
@ -3128,7 +3131,7 @@ int Cdrskin_scanbus(struct CdrskiN *skin, int flag)
printf("cdrskin: NOTE : There were %d drives not shown.\n",
skipped_devices);
else
printf("cdrskin: NOTE : There was 1 drives not shown.\n");
printf("cdrskin: NOTE : There was 1 drive not shown.\n");
printf("cdrskin: HINT : To surely see all drives try option: --devices\n");
if(pseudo_transport_group!=2000000)
printf("cdrskin: HINT : or try options: dev=ATA -scanbus\n");
@ -3683,7 +3686,11 @@ int Cdrskin_burn(struct CdrskiN *skin, int flag)
disc= burn_disc_create();
session= burn_session_create();
burn_disc_add_session(disc,session,BURN_POS_END);
ret= burn_disc_add_session(disc,session,BURN_POS_END);
if(ret==0) {
fprintf(stderr,"cdrskin: FATAL : cannot add session to disc object.\n");
return(0);
}
skin->fixed_size= 0.0;
for(i=0;i<skin->track_counter;i++) {
@ -4594,25 +4601,26 @@ ignore_unknown:;
if(strlen(skin->preskin->raw_device_adr)>0 ||
strlen(skin->preskin->device_adr)>0) {
if(strlen(skin->preskin->device_adr)>0)
ret= Cdrskin_dev_to_driveno(skin,skin->preskin->device_adr,
&(skin->driveno),0);
cpt= skin->preskin->device_adr;
else
ret= Cdrskin_dev_to_driveno(skin,skin->preskin->raw_device_adr,
&(skin->driveno),0);
if(ret<=0)
return(ret);
if(skin->verbosity>=Cdrskin_verbose_cmD) {
cpt= skin->preskin->raw_device_adr;
if(strcmp(cpt,"ATA")!=0 && strcmp(cpt,"ATAPI")!=0 && strcmp(cpt,"SCSI")!=0){
ret= Cdrskin_dev_to_driveno(skin,cpt,&(skin->driveno),0);
if(ret<=0)
return(ret);
if(skin->verbosity>=Cdrskin_verbose_cmD) {
#ifdef Cdrskin_libburn_has_drive_get_adR
ret= burn_drive_get_adr(&(skin->drives[skin->driveno]), adr);
if(ret<=0)
adr[0]= 0;
ret= burn_drive_get_adr(&(skin->drives[skin->driveno]), adr);
if(ret<=0)
adr[0]= 0;
#else
strcpy(adr,skin->drives[skin->driveno].location);
strcpy(adr,skin->drives[skin->driveno].location);
#endif
printf("cdrskin: active drive number : %d '%s'\n",
skin->driveno,adr);
printf("cdrskin: active drive number : %d '%s'\n",
skin->driveno,adr);
}
}
}
if(grab_and_wait_value>0) {