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