Removed bug prone implementation of link resolving (now only via libburn)
This commit is contained in:
parent
7227dfc6b4
commit
0a652dbd02
@ -1255,37 +1255,6 @@ int Cdrpreskin_destroy(struct CdrpreskiN **preskin, int flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Evaluate wether the given address would surely be enumerated by libburn */
|
|
||||||
int Cdrpreskin__is_enumerable_adr(char *adr, int flag)
|
|
||||||
{
|
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_has_is_enumerablE
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret= burn_drive_is_enumerable_adr(adr);
|
|
||||||
return(!!ret);
|
|
||||||
|
|
||||||
#else
|
|
||||||
int i;
|
|
||||||
char dev[80];
|
|
||||||
|
|
||||||
for(i=0;i<32;i++) {
|
|
||||||
sprintf(dev,"/dev/sg%d",i);
|
|
||||||
if(strcmp(adr,dev)==0)
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
for(i=0;i<26;i++) {
|
|
||||||
sprintf(dev,"/dev/hd%c",'a'+i);
|
|
||||||
if(strcmp(adr,dev)==0)
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
return(0);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** Convert a cdrecord-style device address into a libburn device address or
|
/** Convert a cdrecord-style device address into a libburn device address or
|
||||||
into a libburn drive number. It depends on the "scsibus" number of the
|
into a libburn drive number. It depends on the "scsibus" number of the
|
||||||
cdrecord-style address which kind of libburn address emerges:
|
cdrecord-style address which kind of libburn address emerges:
|
||||||
@ -1389,13 +1358,7 @@ return:
|
|||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
int i,ret,bragg_with_audio= 0;
|
int i,ret,bragg_with_audio= 0;
|
||||||
char *value_pt,link_adr[Cdrskin_strleN+1];
|
char *value_pt;
|
||||||
|
|
||||||
#ifndef Cdrskin_libburn_has_convert_fs_adR
|
|
||||||
int k;
|
|
||||||
char link_target[Cdrskin_strleN+1];
|
|
||||||
struct stat stbuf;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef Cdrskin_extra_leaN
|
#ifndef Cdrskin_extra_leaN
|
||||||
if(argc>1)
|
if(argc>1)
|
||||||
@ -1794,56 +1757,26 @@ dev_too_long:;
|
|||||||
{ret= 0; goto ex;}
|
{ret= 0; goto ex;}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!o->no_follow_links) {
|
|
||||||
strcpy(link_adr,o->device_adr);
|
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_has_convert_fs_adR
|
#ifdef Cdrskin_libburn_has_convert_fs_adR
|
||||||
|
|
||||||
ret = burn_drive_convert_fs_adr(link_adr,o->device_adr);
|
if(!o->no_follow_links) {
|
||||||
if(ret<0) {
|
int lret;
|
||||||
|
char link_adr[Cdrskin_strleN+1];
|
||||||
|
|
||||||
|
strcpy(link_adr,o->device_adr);
|
||||||
|
lret = burn_drive_convert_fs_adr(link_adr,o->device_adr);
|
||||||
|
if(lret<0) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"cdrskin: NOTE : Please inform libburn-hackers@pykix.org about:\n");
|
"cdrskin: NOTE : Please inform libburn-hackers@pykix.org about:\n");
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
" burn_drive_convert_fs_adr() returned %d\n",ret);
|
" burn_drive_convert_fs_adr() returned %d\n",lret);
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
while(lstat(link_adr,&stbuf)!=-1) {
|
|
||||||
if(Cdrpreskin__is_enumerable_adr(link_adr,0))
|
|
||||||
break;
|
|
||||||
if((stbuf.st_mode&S_IFMT)!=S_IFLNK)
|
|
||||||
break;
|
|
||||||
ret= readlink(link_adr,link_target,Cdrskin_strleN+1);
|
|
||||||
if(ret==-1)
|
|
||||||
goto after_resolving_links;
|
|
||||||
if(ret>=Cdrskin_strleN) {
|
|
||||||
link_too_long:;
|
|
||||||
fprintf(stderr,
|
|
||||||
"cdrskin: FATAL : Link target address too long (max. %d chars)\n",
|
|
||||||
Cdrskin_strleN-1);
|
|
||||||
{ret= 0; goto ex;}
|
|
||||||
}
|
|
||||||
for(k=0;k<ret;k++)
|
|
||||||
link_adr[k]= link_target[k];
|
|
||||||
link_adr[k]= 0;
|
|
||||||
}
|
|
||||||
if(strcmp(link_adr,o->device_adr)!=0) {
|
|
||||||
fprintf(stderr,"cdrskin: NOTE : Followed link '%s' to target '%s'\n",
|
|
||||||
o->device_adr,link_adr);
|
|
||||||
if(strlen(link_adr)>=sizeof(o->device_adr))
|
|
||||||
goto link_too_long;
|
|
||||||
strcpy(o->device_adr,link_adr);
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* Cdrskin_libburn_has_convert_fs_adR */
|
#endif /* Cdrskin_libburn_has_convert_fs_adR */
|
||||||
|
|
||||||
}
|
|
||||||
#ifndef Cdrskin_libburn_has_convert_fs_adR
|
|
||||||
after_resolving_links:;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
ret= 1;
|
|
||||||
ex:;
|
ex:;
|
||||||
|
|
||||||
#ifndef Cdrskin_extra_leaN
|
#ifndef Cdrskin_extra_leaN
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Cdrskin_timestamP "2006.09.22.172307"
|
#define Cdrskin_timestamP "2006.09.22.195414"
|
||||||
|
Loading…
Reference in New Issue
Block a user