|
|
|
@ -35,9 +35,10 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* @param flag bit0= simple readlink(): no normalization, no multi-hop
|
|
|
|
|
bit1= this is potentially a recursion |
|
|
|
|
*/ |
|
|
|
|
int Xorriso_resolve_link(struct XorrisO *xorriso, |
|
|
|
|
char *link_path, char result_path[SfileadrL], int flag) |
|
|
|
|
int Xorriso_resolve_link(struct XorrisO *xorriso, char *link_path, |
|
|
|
|
char result_path[SfileadrL], int flag) |
|
|
|
|
{ |
|
|
|
|
ssize_t l; |
|
|
|
|
struct stat stbuf; |
|
|
|
@ -45,6 +46,19 @@ int Xorriso_resolve_link(struct XorrisO *xorriso, |
|
|
|
|
char *buf= NULL, *dirbuf= NULL, *lpt, *spt; |
|
|
|
|
static int link_limit= 100; |
|
|
|
|
|
|
|
|
|
if(flag & 1) { |
|
|
|
|
xorriso->resolve_link_rec_count++; |
|
|
|
|
if(xorriso->resolve_link_rec_count > xorriso->resolve_link_rec_limit) { |
|
|
|
|
Xorriso_msgs_submit(xorriso, 0, link_path, 0, "ERRFILE", 0); |
|
|
|
|
sprintf(xorriso->info_text, "Too many link recursions before : "); |
|
|
|
|
Text_shellsafe(link_path, xorriso->info_text, 1); |
|
|
|
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, show_errno, |
|
|
|
|
"FAILURE", 0); |
|
|
|
|
{ret= 0; goto ex;} |
|
|
|
|
} |
|
|
|
|
} else |
|
|
|
|
xorriso->resolve_link_rec_count= 0; |
|
|
|
|
|
|
|
|
|
Xorriso_alloc_meM(buf, char, SfileadrL); |
|
|
|
|
Xorriso_alloc_meM(dirbuf, char, SfileadrL); |
|
|
|
|
|
|
|
|
@ -99,8 +113,9 @@ handle_abort:; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
ret= Xorriso_normalize_img_path(xorriso, dirbuf, buf, result_path, 2|4); |
|
|
|
|
if(ret<=0) |
|
|
|
|
if(ret<=0) { |
|
|
|
|
goto ex; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(lstat(result_path, &stbuf)==-1) { |
|
|
|
|
lpt= result_path; |
|
|
|
@ -125,6 +140,8 @@ too_many_hops:; |
|
|
|
|
ex:; |
|
|
|
|
Xorriso_free_meM(buf); |
|
|
|
|
Xorriso_free_meM(dirbuf); |
|
|
|
|
if(xorriso->resolve_link_rec_count > 0) |
|
|
|
|
xorriso->resolve_link_rec_count--; |
|
|
|
|
return(ret); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -806,7 +823,7 @@ int Xorriso_lsx_filev(struct XorrisO *xorriso, char *wd, |
|
|
|
|
|
|
|
|
|
/* Count valid nodes, warn of invalid ones */ |
|
|
|
|
for(i= 0; i<filec; i++) { |
|
|
|
|
ret= Xorriso_make_abs_adr(xorriso, wd, filev[i], path, 1|2|4); |
|
|
|
|
ret= Xorriso_make_abs_adr(xorriso, wd, filev[i], path, 1|2|4|8); |
|
|
|
|
if(ret<=0) { |
|
|
|
|
was_error++; |
|
|
|
|
continue; |
|
|
|
|