Fixed bug with -as mkisofs -x and pattern expansion

This commit is contained in:
Thomas Schmitt 2008-07-09 06:08:03 +00:00
parent 6797fdcce1
commit 74cb92535d
2 changed files with 31 additions and 17 deletions

View File

@ -7270,13 +7270,27 @@ no_volunteer:;
strncpy(speed, cpt, 79); strncpy(speed, cpt, 79);
speed[79]= 0; speed[79]= 0;
} else if(strcmp(argv[i], "-multi")==0) { } else if(strcmp(argv[i], "-multi")==0) {
/* >>> MULTI : allow -multi */
sprintf(xorriso->info_text, "-as %s: Option -multi not supported.", whom); sprintf(xorriso->info_text, "-as %s: Option -multi not supported.", whom);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex; ret= 0; goto ex;
} else if(strcmp(argv[i], "-msinfo")==0) { } else if(strcmp(argv[i], "-msinfo")==0) {
/* >>> MULTI : allow -msinfo */
sprintf(xorriso->info_text, "-as %s: Option -msinfo not supported.",whom); sprintf(xorriso->info_text, "-as %s: Option -msinfo not supported.",whom);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex; ret= 0; goto ex;
/* >>> MULTI : allow --grow_overwriteable_iso */
/* >>> MULTI : allow write_start_address= */
/* >>> MULTI : combine write_start_address=32 with --grow_overwriteable_iso */
/* >>> MULTI : ??? how about cdrskin. shouldn't it combine too ? */
} else if(strcmp(argv[i], "--devices")==0) { } else if(strcmp(argv[i], "--devices")==0) {
do_scanbus= 2; do_scanbus= 2;
} else if(strcmp(argv[i], "-scanbus")==0) { } else if(strcmp(argv[i], "-scanbus")==0) {
@ -7427,6 +7441,9 @@ no_volunteer:;
goto ex; goto ex;
} }
if(track_source[0]) { if(track_source[0]) {
/* >>> MULTI : do not close if -multi */
xorriso->do_close= 1; xorriso->do_close= 1;
ret= Xorriso_burn_track(xorriso, track_source, 0); ret= Xorriso_burn_track(xorriso, track_source, 0);
aq_ret= Xorriso_reaquire_outdev(xorriso, 2*(ret>0)); aq_ret= Xorriso_reaquire_outdev(xorriso, 2*(ret>0));
@ -7458,7 +7475,7 @@ ex:;
int Xorriso_genisofs(struct XorrisO *xorriso, char *whom, int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
int argc, char **argv, int flag) int argc, char **argv, int flag)
{ {
int ret, i, k, was_path= 0, was_other_option= 0, mem_graft_points; int ret, i, k, was_path= 0, was_other_option= 0, mem_graft_points, mem;
int do_print_size= 0, idx_offset= 0, fd, idx; int do_print_size= 0, idx_offset= 0, fd, idx;
char sfe[5*SfileadrL], adr[SfileadrL+8], ra_text[80], pathspec[2*SfileadrL]; char sfe[5*SfileadrL], adr[SfileadrL+8], ra_text[80], pathspec[2*SfileadrL];
char *ept, *add_pt, eff_path[SfileadrL], indev[SfileadrL+8], msc[80], *cpt; char *ept, *add_pt, eff_path[SfileadrL], indev[SfileadrL+8], msc[80], *cpt;
@ -7506,15 +7523,6 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
strcpy(ra_text, xorriso->report_about_text); strcpy(ra_text, xorriso->report_about_text);
#ifdef NIX
/* <<< MULTI : */
if(xorriso->in_drive_handle != NULL) {
ret= Xorriso_option_dev(xorriso, "", 1); /* give up indev */
if(ret!=1)
return(ret);
}
#endif
adr[0]= indev[0]= msc[0]= 0; adr[0]= indev[0]= msc[0]= 0;
for(i= 0; i<argc; i++) { for(i= 0; i<argc; i++) {
if(strcmp(argv[i], "-version")==0) { if(strcmp(argv[i], "-version")==0) {
@ -7542,10 +7550,7 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
if(i+1>=argc) if(i+1>=argc)
goto not_enough_args; goto not_enough_args;
i++; i++;
indev[0]= 0; strcpy(indev, "stdio:");
ret= Xorriso_libburn_adr(xorriso, argv[i], sfe, 0);
if(ret<=0)
strcpy(indev, "stdio:");
if(Sfile_str(indev+strlen(indev), argv[i], 0)<=0) if(Sfile_str(indev+strlen(indev), argv[i], 0)<=0)
{ret= -1; goto ex;} {ret= -1; goto ex;}
} else if(strcmp(argv[i], "-C")==0 || } else if(strcmp(argv[i], "-C")==0 ||
@ -7615,7 +7620,7 @@ illegal_c:;
sfe[cpt-msc]= 0; sfe[cpt-msc]= 0;
if(strcmp(sfe, "16")==0) /* growisofs uses 16 to avoid a bug in mkisofs */ if(strcmp(sfe, "16")==0) /* growisofs uses 16 to avoid a bug in mkisofs */
strcpy(sfe, "0"); strcpy(sfe, "0");
if(xorriso->in_drive_handle!=NULL) { if(xorriso->in_drive_handle!=NULL && indev[0]) {
/* give up indev before setting the load address */ /* give up indev before setting the load address */
ret= Xorriso_option_dev(xorriso, "", 1); ret= Xorriso_option_dev(xorriso, "", 1);
if(ret<=0) if(ret<=0)
@ -7717,18 +7722,24 @@ not_enough_args:;
if(i+1>=argc) if(i+1>=argc)
goto not_enough_args; goto not_enough_args;
i++; i++;
mem= xorriso->do_disk_pattern;
xorriso->do_disk_pattern= 1;
if(strchr(argv[i], '/')!=NULL) { if(strchr(argv[i], '/')!=NULL) {
idx= i; idx= i;
ret= Xorriso_option_not_paths(xorriso, i+1, argv, &idx, 0); ret= Xorriso_option_not_paths(xorriso, i+1, argv, &idx, 0);
} else } else
ret= Xorriso_option_not_leaf(xorriso, argv[i], 0); ret= Xorriso_option_not_leaf(xorriso, argv[i], 0);
xorriso->do_disk_pattern= mem;
if(ret<=0) if(ret<=0)
goto ex; goto ex;
} else if(strcmp(argv[i], "-exclude-list")==0) { } else if(strcmp(argv[i], "-exclude-list")==0) {
if(i+1>=argc) if(i+1>=argc)
goto not_enough_args; goto not_enough_args;
i++; i++;
ret= Xorriso_option_not_leaf(xorriso, argv[i], 0); mem= xorriso->do_disk_pattern;
xorriso->do_disk_pattern= 1;
ret= Xorriso_option_not_list(xorriso, argv[i], 0);
xorriso->do_disk_pattern= mem;
if(ret<=0) if(ret<=0)
goto ex; goto ex;
} else if(strcmp(argv[i], "-v")==0 || strcmp(argv[i], "-quiet")==0) { } else if(strcmp(argv[i], "-v")==0 || strcmp(argv[i], "-quiet")==0) {
@ -10956,7 +10967,7 @@ int Xorriso_option_not_paths(struct XorrisO *xorriso, int argc, char **argv,
end_idx= Xorriso_end_idx(xorriso, argc, argv, *idx, end_idx= Xorriso_end_idx(xorriso, argc, argv, *idx,
xorriso->do_disk_pattern==1); (xorriso->do_disk_pattern==1) | 2);
if(end_idx<=0) if(end_idx<=0)
return(end_idx); return(end_idx);
num_descr= end_idx - *idx; num_descr= end_idx - *idx;

View File

@ -407,6 +407,9 @@ int Xorriso_option_no_rc(struct XorrisO *xorriso, int flag);
/* Option -not_leaf */ /* Option -not_leaf */
int Xorriso_option_not_leaf(struct XorrisO *xorriso, char *pattern, int flag); int Xorriso_option_not_leaf(struct XorrisO *xorriso, char *pattern, int flag);
/* Option -not_list */
int Xorriso_option_not_list(struct XorrisO *xorriso, char *adr, int flag);
/* Option -not_paths */ /* Option -not_paths */
int Xorriso_option_not_paths(struct XorrisO *xorriso, int argc, char **argv, int Xorriso_option_not_paths(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag); int *idx, int flag);