Better handling of attempt to manipulate non-existent ISO image
This commit is contained in:
parent
3309d84dc3
commit
b0ac8b67ae
@ -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:;
|
||||
|
@ -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 */
|
||||
|
@ -1 +1 @@
|
||||
#define Xorriso_timestamP "2008.03.20.192317"
|
||||
#define Xorriso_timestamP "2008.03.20.210522"
|
||||
|
@ -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);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user