diff --git a/xorriso/xorriso.c b/xorriso/xorriso.c index d6b6adc7..fa00182b 100644 --- a/xorriso/xorriso.c +++ b/xorriso/xorriso.c @@ -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:; diff --git a/xorriso/xorriso_private.h b/xorriso/xorriso_private.h index f566f597..acec4194 100644 --- a/xorriso/xorriso_private.h +++ b/xorriso/xorriso_private.h @@ -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 */ diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 4595a21d..e751d6e0 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2008.03.20.192317" +#define Xorriso_timestamP "2008.03.20.210522" diff --git a/xorriso/xorrisoburn.c b/xorriso/xorrisoburn.c index a837fd61..ec7824ea 100644 --- a/xorriso/xorrisoburn.c +++ b/xorriso/xorrisoburn.c @@ -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); }