Replaced some large local variables by other means in xorriso/disk_ops.c
This commit is contained in:
parent
84d2a2ba9d
commit
59c60d410e
@ -42,9 +42,12 @@ int Xorriso_resolve_link(struct XorrisO *xorriso,
|
||||
ssize_t l;
|
||||
struct stat stbuf;
|
||||
int link_count= 0, ret, show_errno= 0;
|
||||
char buf[SfileadrL], dirbuf[SfileadrL], *lpt, *spt, sfe[5*SfileadrL];
|
||||
char *buf= NULL, *dirbuf= NULL, *lpt, *spt;
|
||||
static int link_limit= 100;
|
||||
|
||||
Xorriso_alloc_meM(buf, char, SfileadrL);
|
||||
Xorriso_alloc_meM(dirbuf, char, SfileadrL);
|
||||
|
||||
if(!(flag&1))
|
||||
if(stat(link_path, &stbuf)==-1)
|
||||
if(errno==ELOOP) {
|
||||
@ -57,35 +60,35 @@ int Xorriso_resolve_link(struct XorrisO *xorriso,
|
||||
if(l==-1) {
|
||||
handle_error:;
|
||||
Xorriso_msgs_submit(xorriso, 0, link_path, 0, "ERRFILE", 0);
|
||||
sprintf(xorriso->info_text, "Cannot obtain link target of : %s",
|
||||
Text_shellsafe(link_path, sfe, 0));
|
||||
sprintf(xorriso->info_text, "Cannot obtain link target of : ");
|
||||
Text_shellsafe(link_path, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FAILURE",0);
|
||||
handle_abort:;
|
||||
if(strcmp(lpt, link_path)!=0) {
|
||||
sprintf(xorriso->info_text,
|
||||
"Problem occured with intermediate path : %s",
|
||||
Text_shellsafe(lpt, sfe, 0));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE",0);
|
||||
"Problem occured with intermediate path : ");
|
||||
Text_shellsafe(lpt, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
}
|
||||
return(0);
|
||||
{ret= 0; goto ex;}
|
||||
}
|
||||
buf[l]= 0;
|
||||
if(l==0) {
|
||||
Xorriso_msgs_submit(xorriso, 0, link_path, 0, "ERRFILE", 0);
|
||||
sprintf(xorriso->info_text, "Empty link target with : %s",
|
||||
Text_shellsafe(link_path, sfe, 0));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FAILURE",0);
|
||||
sprintf(xorriso->info_text, "Empty link target with : ");
|
||||
Text_shellsafe(link_path, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FAILURE", 0);
|
||||
goto handle_abort;
|
||||
}
|
||||
|
||||
if(flag&1) {
|
||||
strcpy(result_path, buf);
|
||||
return(1);
|
||||
{ret= 1; goto ex;}
|
||||
}
|
||||
|
||||
/* normalize relative to disk_path */
|
||||
if(Sfile_str(dirbuf, lpt, 0)<=0)
|
||||
return(-1);
|
||||
{ret= -1; goto ex;}
|
||||
while(1) {
|
||||
spt= strrchr(dirbuf,'/');
|
||||
if(spt!=NULL) {
|
||||
@ -97,7 +100,7 @@ handle_abort:;
|
||||
}
|
||||
ret= Xorriso_normalize_img_path(xorriso, dirbuf, buf, result_path, 2|4);
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
goto ex;
|
||||
|
||||
if(lstat(result_path, &stbuf)==-1) {
|
||||
lpt= result_path;
|
||||
@ -111,14 +114,18 @@ handle_abort:;
|
||||
if(link_count>link_limit) {
|
||||
too_many_hops:;
|
||||
Xorriso_msgs_submit(xorriso, 0, link_path, 0, "ERRFILE", 0);
|
||||
sprintf(xorriso->info_text, "Too many link hops with : %s",
|
||||
Text_shellsafe(link_path, sfe, 0));
|
||||
sprintf(xorriso->info_text, "Too many link hops with : ");
|
||||
Text_shellsafe(link_path, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, show_errno,
|
||||
"FAILURE",0);
|
||||
return(0);
|
||||
"FAILURE", 0);
|
||||
{ret= 0; goto ex;}
|
||||
}
|
||||
}
|
||||
return(1);
|
||||
ret= 1;
|
||||
ex:;
|
||||
Xorriso_free_meM(buf);
|
||||
Xorriso_free_meM(dirbuf);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
@ -174,7 +181,7 @@ int Xorriso_convert_modstring(struct XorrisO *xorriso, char *cmd, char *mode,
|
||||
mode_t *mode_and, mode_t *mode_or, int flag)
|
||||
{
|
||||
int who_val= 0;
|
||||
char sfe[5*SfileadrL], *mpt, *vpt, *opt;
|
||||
char *mpt, *vpt, *opt;
|
||||
unsigned int num= 0;
|
||||
mode_t mode_val,mask;
|
||||
|
||||
@ -260,8 +267,8 @@ int Xorriso_convert_modstring(struct XorrisO *xorriso, char *cmd, char *mode,
|
||||
} else {
|
||||
unrecognizable:;
|
||||
sprintf(xorriso->info_text,
|
||||
"%s: Unrecognizable or faulty permission mode %s\n", cmd,
|
||||
Text_shellsafe(mode, sfe, 0));
|
||||
"%s: Unrecognizable or faulty permission mode ", cmd);
|
||||
Text_shellsafe(mode, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||
return(0);
|
||||
}
|
||||
@ -277,13 +284,12 @@ int Xorriso_hop_link(struct XorrisO *xorriso, char *link_path,
|
||||
{
|
||||
int ret;
|
||||
struct LinkiteM *litm;
|
||||
char sfe[5*SfileadrL];
|
||||
|
||||
if(*link_stack != NULL) {
|
||||
if(Linkitem_get_link_count(*link_stack, 0) >= xorriso->follow_link_limit) {
|
||||
sprintf(xorriso->info_text,
|
||||
"Too many symbolic links in single tree branch at : %s",
|
||||
Text_shellsafe(link_path, sfe, 0));
|
||||
"Too many symbolic links in single tree branch at : ");
|
||||
Text_shellsafe(link_path, xorriso->info_text, 1);
|
||||
if(!(flag&2))
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0,"WARNING",flag&1);
|
||||
return(0);
|
||||
@ -294,9 +300,8 @@ int Xorriso_hop_link(struct XorrisO *xorriso, char *link_path,
|
||||
return(0);
|
||||
ret= Linkitem_find(*link_stack, stbuf->st_dev, stbuf->st_ino, &litm, 0);
|
||||
if(ret>0) {
|
||||
sprintf(xorriso->info_text,
|
||||
"Detected symbolic link loop around : %s",
|
||||
Text_shellsafe(link_path, sfe, 0));
|
||||
sprintf(xorriso->info_text, "Detected symbolic link loop around : ");
|
||||
Text_shellsafe(link_path, xorriso->info_text, 1);
|
||||
if(!(flag&2))
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", flag&1);
|
||||
return(0);
|
||||
@ -700,11 +705,13 @@ int Xorriso_sorted_dir_x(struct XorrisO *xorriso, char *dir_path,
|
||||
int *filec, char ***filev, off_t boss_mem, int flag)
|
||||
{
|
||||
int count= 0, ret;
|
||||
char name[SfileadrL];
|
||||
char *name= NULL;
|
||||
struct DirseQ *dirseq= NULL;
|
||||
off_t mem;
|
||||
struct DirentrY *last= NULL, *current= NULL;
|
||||
|
||||
Xorriso_alloc_meM(name, char, SfileadrL);
|
||||
|
||||
*filec= 0;
|
||||
*filev= NULL;
|
||||
mem= boss_mem;
|
||||
@ -722,22 +729,28 @@ int Xorriso_sorted_dir_x(struct XorrisO *xorriso, char *dir_path,
|
||||
{ret= 0; goto ex;}
|
||||
|
||||
current= (struct DirentrY *) calloc(1, sizeof(struct DirentrY));
|
||||
if(current==NULL)
|
||||
if(current==NULL) {
|
||||
Xorriso_no_malloc_memory(xorriso, NULL, 0);
|
||||
{ret= -1; goto ex;}
|
||||
}
|
||||
current->adr= NULL;
|
||||
current->next= last;
|
||||
last= current;
|
||||
last->adr= strdup(name);
|
||||
if(last->adr==NULL)
|
||||
if(last->adr==NULL) {
|
||||
Xorriso_no_malloc_memory(xorriso, NULL, 0);
|
||||
{ret= -1; goto ex;}
|
||||
}
|
||||
count++;
|
||||
}
|
||||
*filec= count;
|
||||
if(count==0)
|
||||
{ret= 1; goto ex;}
|
||||
(*filev)= (char **) calloc(count, sizeof(char *));
|
||||
if(*filev==NULL)
|
||||
if(*filev==NULL) {
|
||||
Xorriso_no_malloc_memory(xorriso, NULL, 0);
|
||||
{ret= -1; goto ex; }
|
||||
}
|
||||
count= 0;
|
||||
for(current= last; current!=NULL; current= last) {
|
||||
last= current->next;
|
||||
@ -752,6 +765,7 @@ ex:;
|
||||
free(current->adr);
|
||||
free((char *) current);
|
||||
}
|
||||
Xorriso_free_meM(name);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
@ -765,11 +779,14 @@ int Xorriso_lsx_filev(struct XorrisO *xorriso, char *wd,
|
||||
int filec, char **filev, off_t boss_mem, int flag)
|
||||
{
|
||||
int i, ret, was_error= 0, dfilec= 0, pass, passes;
|
||||
char sfe[5*SfileadrL], sfe2[5*SfileadrL], path[SfileadrL], *acl_text= NULL;
|
||||
char *rpt, link_target[SfileadrL], **dfilev= NULL;
|
||||
char *path= NULL, *acl_text= NULL;
|
||||
char *rpt, *link_target= NULL, **dfilev= NULL;
|
||||
off_t size;
|
||||
struct stat stbuf;
|
||||
|
||||
Xorriso_alloc_meM(path, char, SfileadrL);
|
||||
Xorriso_alloc_meM(link_target, char, SfileadrL);
|
||||
|
||||
rpt= xorriso->result_line;
|
||||
|
||||
Sort_argv(filec, filev, 0);
|
||||
@ -783,8 +800,8 @@ int Xorriso_lsx_filev(struct XorrisO *xorriso, char *wd,
|
||||
}
|
||||
ret= lstat(path, &stbuf);
|
||||
if(ret==-1) {
|
||||
sprintf(xorriso->info_text, "Not found in local filesystem: %s",
|
||||
Text_shellsafe(path, sfe, 0));
|
||||
sprintf(xorriso->info_text, "Not found in local filesystem: ");
|
||||
Text_shellsafe(path, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 1);
|
||||
was_error++;
|
||||
continue;
|
||||
@ -795,7 +812,7 @@ int Xorriso_lsx_filev(struct XorrisO *xorriso, char *wd,
|
||||
sprintf(xorriso->info_text,"Valid local files found: %d\n",filec-was_error);
|
||||
Xorriso_info(xorriso,1);
|
||||
if(filec-was_error<=0)
|
||||
return(!was_error);
|
||||
{ret= !was_error; goto ex;}
|
||||
}
|
||||
|
||||
passes= 1+!(flag&(4|8));
|
||||
@ -821,7 +838,8 @@ int Xorriso_lsx_filev(struct XorrisO *xorriso, char *wd,
|
||||
if(filec>1) {
|
||||
strcpy(xorriso->result_line, "\n");
|
||||
Xorriso_result(xorriso,0);
|
||||
sprintf(xorriso->result_line, "%s:\n", Text_shellsafe(filev[i], sfe,0));
|
||||
Text_shellsafe(filev[i], xorriso->result_line, 0);
|
||||
strcat(xorriso->result_line, ":\n");
|
||||
Xorriso_result(xorriso,0);
|
||||
}
|
||||
ret= Xorriso_sorted_dir_x(xorriso, path, &dfilec, &dfilev, boss_mem, 0);
|
||||
@ -862,22 +880,27 @@ int Xorriso_lsx_filev(struct XorrisO *xorriso, char *wd,
|
||||
ret= Xorriso_show_dux_subs(xorriso, path, filev[i], &size, boss_mem,
|
||||
NULL, flag&1);
|
||||
if(ret<0)
|
||||
return(-1);
|
||||
{ret= -1; goto ex;}
|
||||
if(ret==0)
|
||||
continue;
|
||||
}
|
||||
sprintf(rpt, "%7.f ",(double) (size/1024));
|
||||
}
|
||||
if(link_target[0])
|
||||
sprintf(xorriso->result_line+strlen(xorriso->result_line), "%s -> %s\n",
|
||||
Text_shellsafe(filev[i], sfe, 0),
|
||||
Text_shellsafe(link_target, sfe2, 0));
|
||||
else
|
||||
sprintf(xorriso->result_line+strlen(xorriso->result_line), "%s\n",
|
||||
Text_shellsafe(filev[i], sfe, 0));
|
||||
if(link_target[0]) {
|
||||
Text_shellsafe(filev[i], xorriso->result_line, 1);
|
||||
strcat(xorriso->result_line, " -> ");
|
||||
Text_shellsafe(link_target, xorriso->result_line, 1);
|
||||
} else {
|
||||
Text_shellsafe(filev[i], xorriso->result_line, 1);
|
||||
}
|
||||
strcat(xorriso->result_line, "\n");
|
||||
Xorriso_result(xorriso, 0);
|
||||
}
|
||||
return(!was_error);
|
||||
ret= !was_error;
|
||||
ex:;
|
||||
Xorriso_free_meM(path);
|
||||
Xorriso_free_meM(link_target);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
@ -1086,11 +1109,13 @@ int Xorriso_findx_action(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
gid_t group= 0;
|
||||
time_t date= 0;
|
||||
mode_t mode_or= 0, mode_and= ~1;
|
||||
char *target, *text_2, sfe[5*SfileadrL], *disk_prefix, iso_path[SfileadrL];
|
||||
char *target, *text_2, *wdi_mem= NULL, *disk_prefix, *iso_path= NULL;
|
||||
char *basename;
|
||||
struct FindjoB *subjob;
|
||||
struct stat stbuf;
|
||||
|
||||
Xorriso_alloc_meM(iso_path, char, SfileadrL);
|
||||
|
||||
action= Findjob_get_action_parms(job, &target, &text_2, &user, &group,
|
||||
&mode_and, &mode_or, &type, &date, &subjob, 0);
|
||||
if(action<0)
|
||||
@ -1116,7 +1141,8 @@ int Xorriso_findx_action(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
ret= Xorriso_iso_lstat(xorriso, iso_path, &stbuf, 0);
|
||||
if(ret<0)
|
||||
{ret= 1; goto ex;}
|
||||
sprintf(xorriso->result_line, "%s\n", Text_shellsafe(show_path, sfe, 0));
|
||||
Text_shellsafe(show_path, xorriso->result_line, 0);
|
||||
strcat(xorriso->result_line, "\n");
|
||||
Xorriso_result(xorriso, 0);
|
||||
ret= 1;
|
||||
} else if(action==16) { /* not_in_iso */
|
||||
@ -1147,8 +1173,8 @@ int Xorriso_findx_action(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
{ret= 1; goto ex;}
|
||||
ret= Xorriso_rmi(xorriso, NULL, (off_t) 0, iso_path, 1|32);
|
||||
if(ret>0) {
|
||||
sprintf(xorriso->info_text, "Emptied directory %s",
|
||||
Text_shellsafe(iso_path, sfe, 0));
|
||||
sprintf(xorriso->info_text, "Emptied directory ");
|
||||
Text_shellsafe(iso_path, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "UPDATE", 0);
|
||||
}
|
||||
} else if(action==20) { /* is_full_in_iso */
|
||||
@ -1157,14 +1183,19 @@ int Xorriso_findx_action(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
{ret= 1; goto ex;}
|
||||
if(!S_ISDIR(stbuf.st_mode))
|
||||
{ret= 1; goto ex;}
|
||||
strcpy(sfe, xorriso->wdi);
|
||||
wdi_mem= strdup(xorriso->wdi);
|
||||
if(wdi_mem == NULL) {
|
||||
Xorriso_no_malloc_memory(xorriso, NULL, 0);
|
||||
{ret= -1; goto ex;}
|
||||
}
|
||||
strcpy(xorriso->wdi, iso_path);
|
||||
ret= Xorriso_ls(xorriso, 4|8);
|
||||
strcpy(xorriso->wdi, sfe);
|
||||
strcpy(xorriso->wdi, wdi_mem);
|
||||
if(ret>0) {
|
||||
sprintf(xorriso->result_line,
|
||||
"d %s (ISO) : non-empty directory (would not match mount point)\n",
|
||||
Text_shellsafe(iso_path, sfe, 0));
|
||||
strcpy(xorriso->result_line, "d ");
|
||||
Text_shellsafe(iso_path, xorriso->result_line, 1);
|
||||
strcat(xorriso->result_line,
|
||||
" (ISO) : non-empty directory (would not match mount point)\n");
|
||||
Xorriso_result(xorriso,0);
|
||||
}
|
||||
{ret= 1; goto ex;}
|
||||
@ -1179,7 +1210,8 @@ int Xorriso_findx_action(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
ret= Xorriso_estimate_file_size(xorriso, job, basename, stbuf.st_mode,
|
||||
stbuf.st_size, 0);
|
||||
} else {
|
||||
sprintf(xorriso->result_line, "%s\n", Text_shellsafe(show_path, sfe, 0));
|
||||
Text_shellsafe(show_path, xorriso->result_line, 0);
|
||||
strcat(xorriso->result_line, "\n");
|
||||
Xorriso_result(xorriso, 0);
|
||||
ret= 1;
|
||||
}
|
||||
@ -1187,6 +1219,9 @@ ex:;
|
||||
if(action==15 || action==16 || action==18 || action==19 || action==20)
|
||||
if(xorriso->no_volset_present)
|
||||
xorriso->request_to_abort= 1; /* Need an image. No use to try again. */
|
||||
if(wdi_mem != NULL)
|
||||
free(wdi_mem);
|
||||
Xorriso_free_meM(iso_path);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
@ -1209,16 +1244,12 @@ int Xorriso_findx(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
if(xorriso->request_to_abort)
|
||||
{ret= 0; goto ex;}
|
||||
|
||||
sfe= malloc(5*SfileadrL);
|
||||
name= malloc(SfileadrL);
|
||||
path= malloc(SfileadrL);
|
||||
abs_dir_path_data= malloc(SfileadrL);
|
||||
abs_path= malloc(SfileadrL);
|
||||
if(name==NULL || sfe==NULL || path==NULL ||
|
||||
abs_dir_path_data==NULL || abs_path==NULL) {
|
||||
Xorriso_no_malloc_memory(xorriso, &sfe, 0);
|
||||
{ret= -1; goto ex;}
|
||||
}
|
||||
Xorriso_alloc_meM(sfe, char, 5*SfileadrL);
|
||||
Xorriso_alloc_meM(name, char, SfileadrL);
|
||||
Xorriso_alloc_meM(path, char, SfileadrL);
|
||||
Xorriso_alloc_meM(abs_dir_path_data, char, SfileadrL);
|
||||
Xorriso_alloc_meM(abs_path, char, SfileadrL);
|
||||
|
||||
own_link_stack= link_stack;
|
||||
abs_dir_path= abs_dir_parm;
|
||||
if(abs_dir_path[0]==0) {
|
||||
@ -1338,16 +1369,11 @@ int Xorriso_findx(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
|
||||
ret= 1;
|
||||
ex:;
|
||||
if(sfe!=NULL)
|
||||
free(sfe);
|
||||
if(name!=NULL)
|
||||
free(name);
|
||||
if(path!=NULL)
|
||||
free(path);
|
||||
if(abs_dir_path_data!=NULL)
|
||||
free(abs_dir_path_data);
|
||||
if(abs_path!=NULL)
|
||||
free(abs_path);
|
||||
Xorriso_free_meM(sfe);
|
||||
Xorriso_free_meM(name);
|
||||
Xorriso_free_meM(path);
|
||||
Xorriso_free_meM(abs_dir_path_data);
|
||||
Xorriso_free_meM(abs_path);
|
||||
Dirseq_destroy(&dirseq, 0);
|
||||
return(ret);
|
||||
}
|
||||
@ -1447,7 +1473,6 @@ ex:;
|
||||
int Xorriso_reassure_restore(struct XorrisO *xorriso, char *path, int flag)
|
||||
{
|
||||
int ret;
|
||||
char sfe[5*SfileadrL];
|
||||
|
||||
while((xorriso->do_reassure==1 || (xorriso->do_reassure==2 && !(flag&4)))
|
||||
&& !xorriso->request_not_to_ask) {
|
||||
@ -1467,8 +1492,8 @@ int Xorriso_reassure_restore(struct XorrisO *xorriso, char *path, int flag)
|
||||
goto ex;
|
||||
if(xorriso->request_to_abort) {
|
||||
sprintf(xorriso->info_text,
|
||||
"Removal operation aborted by user before file: %s",
|
||||
Text_shellsafe(path, sfe, 0));
|
||||
"Removal operation aborted by user before file: ");
|
||||
Text_shellsafe(path, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
ret= 3; goto ex;
|
||||
}
|
||||
@ -1481,8 +1506,8 @@ int Xorriso_reassure_restore(struct XorrisO *xorriso, char *path, int flag)
|
||||
break;
|
||||
}
|
||||
if(ret==1) { /* no */
|
||||
sprintf(xorriso->info_text, "Kept in existing state: %s",
|
||||
Text_shellsafe(path, sfe, 0));
|
||||
sprintf(xorriso->info_text, "Kept in existing state: ");
|
||||
Text_shellsafe(path, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
ret= 3; goto ex;
|
||||
}
|
||||
@ -1532,59 +1557,67 @@ int Xorriso_make_tmp_path(struct XorrisO *xorriso, char *orig_path,
|
||||
int Xorriso_auto_chmod(struct XorrisO *xorriso, char *disk_path, int flag)
|
||||
{
|
||||
int ret, is_link= 0;
|
||||
char *path_pt, sfe[5*SfileadrL], link_target[SfileadrL];
|
||||
char *path_pt, *link_target= NULL;
|
||||
mode_t mode, desired= S_IRUSR | S_IWUSR | S_IXUSR;
|
||||
struct stat stbuf;
|
||||
|
||||
Xorriso_alloc_meM(link_target, char, SfileadrL);
|
||||
|
||||
if(!(xorriso->do_auto_chmod || (flag & 1)))
|
||||
return(0);
|
||||
{ret= 0; goto ex;}
|
||||
|
||||
if(flag & 2)
|
||||
desired &= ~S_IWUSR;
|
||||
path_pt= disk_path;
|
||||
ret= lstat(path_pt, &stbuf);
|
||||
if(ret==-1)
|
||||
return(0);
|
||||
{ret= 0; goto ex;}
|
||||
if(S_ISLNK(stbuf.st_mode)) {
|
||||
is_link= 1;
|
||||
ret= stat(path_pt, &stbuf);
|
||||
if(ret==-1)
|
||||
return(0);
|
||||
{ret= 0; goto ex;}
|
||||
}
|
||||
if(!S_ISDIR(stbuf.st_mode))
|
||||
return(0);
|
||||
{ret= 0; goto ex;}
|
||||
if(is_link) {
|
||||
ret= Xorriso_resolve_link(xorriso, path_pt, link_target, 0);
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
goto ex;
|
||||
path_pt= link_target;
|
||||
}
|
||||
if((stbuf.st_mode & desired) == desired)
|
||||
return(0);
|
||||
{ret= 0; goto ex;}
|
||||
if(stbuf.st_uid!=geteuid())
|
||||
return(-2);
|
||||
{ret= -2; goto ex;}
|
||||
|
||||
mode= (stbuf.st_mode | desired) & 07777;
|
||||
ret= chmod(path_pt, mode);
|
||||
if(ret==-1) {
|
||||
sprintf(xorriso->info_text,
|
||||
"Cannot change access permissions of disk directory: chmod %o %s",
|
||||
(unsigned int) (mode & 07777), Text_shellsafe(path_pt, sfe, 0));
|
||||
"Cannot change access permissions of disk directory: chmod %o ",
|
||||
(unsigned int) (mode & 07777));
|
||||
Text_shellsafe(path_pt, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "SORRY", 0);
|
||||
return(-2);
|
||||
{ret= -2; goto ex;}
|
||||
}
|
||||
ret= Permstack_push(&(xorriso->perm_stack), path_pt, &stbuf, 0);
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
return(1);
|
||||
goto ex;
|
||||
ret= 1;
|
||||
ex:;
|
||||
Xorriso_free_meM(link_target);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_make_accessible(struct XorrisO *xorriso, char *disk_path, int flag)
|
||||
{
|
||||
int done= 0, ret, just_rx= 2;
|
||||
char *npt, *apt, path[SfileadrL], *wpt;
|
||||
|
||||
char *npt, *apt, *path, *wpt;
|
||||
|
||||
Xorriso_alloc_meM(path, char, SfileadrL);
|
||||
|
||||
apt= disk_path;
|
||||
wpt= path;
|
||||
for(npt= apt; !done; apt= npt + 1) {
|
||||
@ -1598,11 +1631,14 @@ int Xorriso_make_accessible(struct XorrisO *xorriso, char *disk_path, int flag)
|
||||
*wpt= 0;
|
||||
ret= Xorriso_auto_chmod(xorriso, path, just_rx);
|
||||
if(ret == -1)
|
||||
return(-1);
|
||||
{ret= -1; goto ex;}
|
||||
if(ret == -2)
|
||||
return(0);
|
||||
{ret= 0; goto ex;}
|
||||
}
|
||||
return(1);
|
||||
ret= 1;
|
||||
ex:
|
||||
Xorriso_free_meM(path);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
@ -1735,16 +1771,17 @@ int Xorriso_make_mount_cmd(struct XorrisO *xorriso, char *cmd,
|
||||
char *devadr, char result[SfileadrL], int flag)
|
||||
{
|
||||
int ret, reg_file= 0, is_safe= 0, sys_code= 0;
|
||||
char form[6*SfileadrL], session_text[12], track_text[12], lba_text[12];
|
||||
char *vars[5][2], sfe[5*SfileadrL], volid_sfe[5*80+1], *cpt, *sysname;
|
||||
char *form= NULL, session_text[12], track_text[12], lba_text[12];
|
||||
char *vars[5][2], *sfe= NULL, *volid_sfe= NULL, *cpt, *sysname;
|
||||
struct stat stbuf;
|
||||
|
||||
Xorriso_alloc_meM(form, char, 6 * SfileadrL);
|
||||
Xorriso_alloc_meM(sfe, char, 5 * SfileadrL);
|
||||
Xorriso_alloc_meM(volid_sfe, char, 5 * 80 + 1);
|
||||
|
||||
if(strlen(cmd) > SfileadrL) {
|
||||
/*
|
||||
too_long:;
|
||||
*/
|
||||
Xorriso_msgs_submit(xorriso, 0, "Argument much too long", 0, "FAILURE", 0);
|
||||
return(0);
|
||||
{ret= 0; goto ex;}
|
||||
}
|
||||
ret= stat(devadr, &stbuf);
|
||||
if(ret != -1)
|
||||
@ -1769,7 +1806,7 @@ too_long:;
|
||||
Xorriso_msgs_submit(xorriso, 0,
|
||||
"-mount*: Cannot determine current system type",
|
||||
0, "FAILURE", 0);
|
||||
return(0);
|
||||
{ret= 0; goto ex;}
|
||||
} else if(strcmp(sysname, "FreeBSD") == 0 ||
|
||||
strcmp(sysname, "GNU/kFreeBSD") == 0) {
|
||||
/* "GNU/kFreeBSD" = Debian kfreebsd */
|
||||
@ -1780,7 +1817,7 @@ too_long:;
|
||||
sprintf(xorriso->info_text, "-mount*: Unsupported system type %s",
|
||||
Text_shellsafe(sysname, sfe, 0));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
{ret= 0; goto ex;}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1810,7 +1847,7 @@ too_long:;
|
||||
Xorriso_msgs_submit(xorriso, 0,
|
||||
"Command mdconfig -a -t vnode -f can create a device node which uses the file",
|
||||
0, "HINT", 0);
|
||||
return(0);
|
||||
{ret= 0; goto ex;}
|
||||
} else {
|
||||
sprintf(form,
|
||||
"%smount_cd9660 -o noexec,nosuid -s %%sbsector%% %%device%% %s",
|
||||
@ -1837,8 +1874,13 @@ too_long:;
|
||||
vars[4][1]= Text_shellsafe(devadr, sfe, 0);
|
||||
ret= Sregex_resolve_var(form, vars, 5, "%", "%", "%", result, SfileadrL, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
return(1 + is_safe);
|
||||
goto ex;
|
||||
ret= 1 + is_safe;
|
||||
ex:;
|
||||
Xorriso_free_meM(form);
|
||||
Xorriso_free_meM(sfe);
|
||||
Xorriso_free_meM(volid_sfe);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1 +1 @@
|
||||
#define Xorriso_timestamP "2011.05.02.121907"
|
||||
#define Xorriso_timestamP "2011.05.02.191704"
|
||||
|
Loading…
Reference in New Issue
Block a user