Better handling of attempt to manipulate non-existent ISO image

This commit is contained in:
Thomas Schmitt 2008-03-20 21:20:19 +00:00
parent 3309d84dc3
commit b0ac8b67ae
4 changed files with 32 additions and 13 deletions

View File

@ -2780,6 +2780,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
m->in_drive_handle= NULL;
m->in_volset_handle= NULL;
m->volset_change_pending= 0;
m->no_volset_present= 0;
m->outdev[0]= 0;
m->out_drive_handle= NULL;
m->dev_fd_1= -1;
@ -6167,24 +6168,24 @@ int Xorriso_findx_action(struct XorrisO *xorriso, struct FindjoB *job,
if(action<0)
action= 0;
if(action==15 || action==16 || action==18 || action==19 || action==20) {
/* in_iso , not_in_iso, add_missing */
/* in_iso , not_in_iso, add_missing , empty_iso_dir , is_full_in_iso */
Findjob_get_start_path(job, &disk_prefix, 0);
if(strncmp(abs_path, disk_prefix, strlen(disk_prefix))!=0)
return(-1);
{ret= -1; goto ex;}
dpl= strlen(disk_prefix);
if(strlen(target)+strlen(abs_path)-dpl >= SfileadrL)
return(-1);
{ret= -1; goto ex;}
if(abs_path[dpl]=='/')
dpl++;
ret= Xorriso_make_abs_adr(xorriso, target, abs_path+dpl, iso_path, 4);
if(ret<=0)
return(ret);
{goto ex;}
}
if(action==15) { /* in_iso */
ret= Xorriso_iso_lstat(xorriso, iso_path, &stbuf, 0);
if(ret==-1)
return(1);
{ret= 1; goto ex;}
sprintf(xorriso->result_line, "%s\n", Text_shellsafe(show_path, sfe, 0));
Xorriso_result(xorriso, 0);
ret= 1;
@ -6211,9 +6212,9 @@ int Xorriso_findx_action(struct XorrisO *xorriso, struct FindjoB *job,
} else if(action==19) { /* empty_iso_dir */
ret= Xorriso_iso_lstat(xorriso, iso_path, &stbuf, 0);
if(ret==-1)
return(1);
{ret= 1; goto ex;}
if(!S_ISDIR(stbuf.st_mode))
return(1);
{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",
@ -6223,9 +6224,9 @@ int Xorriso_findx_action(struct XorrisO *xorriso, struct FindjoB *job,
} else if(action==20) { /* is_full_in_iso */
ret= Xorriso_iso_lstat(xorriso, iso_path, &stbuf, 0);
if(ret==-1)
return(1);
{ret= 1; goto ex;}
if(!S_ISDIR(stbuf.st_mode))
return(1);
{ret= 1; goto ex;}
strcpy(sfe, xorriso->wdi);
strcpy(xorriso->wdi, iso_path);
ret= Xorriso_ls(xorriso, 4|8);
@ -6236,12 +6237,16 @@ int Xorriso_findx_action(struct XorrisO *xorriso, struct FindjoB *job,
Text_shellsafe(iso_path, sfe, 0));
Xorriso_result(xorriso,0);
}
return(1);
{ret= 1; goto ex;}
} else {
sprintf(xorriso->result_line, "%s\n", Text_shellsafe(show_path, sfe, 0));
Xorriso_result(xorriso, 0);
ret= 1;
}
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. */
return(ret);
}
@ -6308,11 +6313,15 @@ int Xorriso_findx(struct XorrisO *xorriso, struct FindjoB *job,
ret= Xorriso_findx_action(xorriso, job, abs_dir_path, dir_path, depth,
flag&1);
if(ret<=0) {
if(xorriso->request_to_abort)
goto ex;
if(Xorriso_eval_problem_status(xorriso, ret, 1|2)<0)
goto ex;
}
}
}
if(xorriso->request_to_abort)
{ret= 1; goto ex;}
if(!S_ISDIR(dir_stbuf->st_mode))
{ret= 2; goto ex;}
@ -6360,6 +6369,8 @@ int Xorriso_findx(struct XorrisO *xorriso, struct FindjoB *job,
if(ret>0) {
ret= Xorriso_findx_action(xorriso, job, abs_path, path, depth, flag&1);
if(ret<=0) {
if(xorriso->request_to_abort)
goto ex;
if(Xorriso_eval_problem_status(xorriso, ret, 1|2)<0)
goto ex;
}
@ -7940,6 +7951,7 @@ int Xorriso_option_commit(struct XorrisO *xorriso, int flag)
if(ret<=0)
return(ret);
xorriso->volset_change_pending= 0;
xorriso->no_volset_present= 0;
if(flag&1)
return(1);
strcpy(newdev, xorriso->outdev);
@ -10903,6 +10915,7 @@ int Xorriso_dialog(struct XorrisO *xorriso, int flag)
if(ret==3)
break;
xorriso->did_something_useful= 1;
xorriso->no_volset_present= 0; /* Re-enable "No ISO image present." */
}
ret= 1;
ex:;

View File

@ -110,6 +110,7 @@ struct XorrisO { /* the global context of xorriso */
void *in_volset_handle; /* interpreted only by xorrisoburn.c */
int volset_change_pending; /* whether -commit would make sense */
int no_volset_present; /* set to 1 on first failure */
char outdev[SfileadrL];
void *out_drive_handle; /* interpreted only by xorrisoburn.c */

View File

@ -1 +1 @@
#define Xorriso_timestamP "2008.03.20.192317"
#define Xorriso_timestamP "2008.03.20.210522"

View File

@ -443,6 +443,7 @@ int Xorriso_create_empty_iso(struct XorrisO *xorriso, int flag)
xorriso->in_volset_handle= NULL;
xorriso->loaded_volid[0]= 0;
xorriso->volset_change_pending= 0;
xorriso->no_volset_present= 0;
}
ret= isoburn_ropt_new(&ropts, 0);
@ -464,6 +465,7 @@ int Xorriso_create_empty_iso(struct XorrisO *xorriso, int flag)
xorriso->in_volset_handle= (void *) volset;
Xorriso_update_volid(xorriso, 0);
xorriso->volset_change_pending= 0;
xorriso->no_volset_present= 0;
return(1);
}
@ -706,7 +708,7 @@ int Xorriso_give_up_drive(struct XorrisO *xorriso, int flag)
xorriso->in_volset_handle= NULL;
xorriso->loaded_volid[0]= 0;
xorriso->volset_change_pending= 0;
xorriso->no_volset_present= 0;
in_is_out_too= 0;
}
if((flag&2) && xorriso->out_drive_handle!=NULL) {
@ -1257,10 +1259,13 @@ int Xorriso_get_volume(struct XorrisO *xorriso, IsoImage **volume,
sprintf(xorriso->info_text+strlen(xorriso->info_text),
" Possible program error with drive '%s'.", xorriso->indev);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
if(!xorriso->no_volset_present)
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
xorriso->no_volset_present= 1;
return(0);
}
*volume= (IsoImage *) xorriso->in_volset_handle;
xorriso->no_volset_present= 0;
return(*volume != NULL);
}