Now recognizing fused single character -as mkisofs options without parameters
This commit is contained in:
parent
b58a4ded8d
commit
2deeff2779
@ -954,6 +954,97 @@ int Xorriso_genisofs_strip_dash(struct XorrisO *xorriso, char *arg_in,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Interprets a string of single-char options which have no parameters
|
||||||
|
@param flag bit0=check whether string is ok
|
||||||
|
bit1=this is pass 1
|
||||||
|
@return with flag bit0: 0=no , 1=yes, 2= with bit1: non-pass-1 options seen
|
||||||
|
else : 1 = ok , <= 0 indicates error
|
||||||
|
*/
|
||||||
|
int Xorriso_genisofs_fused_options(struct XorrisO *xorriso, char *whom,
|
||||||
|
char *opts,
|
||||||
|
int *option_d, int *iso_level, int *lower_r,
|
||||||
|
char ra_text[80], int flag)
|
||||||
|
{
|
||||||
|
int ret, non_pass1= 0;
|
||||||
|
char *cpt;
|
||||||
|
static char pass1_covered[]= {"fvz"};
|
||||||
|
static char covered[]= {"dDfJlNRrTUvz"};
|
||||||
|
|
||||||
|
if(flag & 1) {
|
||||||
|
for(cpt= opts; *cpt != 0; cpt++) {
|
||||||
|
if(strchr(covered, *cpt) == NULL)
|
||||||
|
{ret= 0; goto ex;}
|
||||||
|
if(flag & 2)
|
||||||
|
if(strchr(pass1_covered, *cpt) == NULL)
|
||||||
|
non_pass1= 1;
|
||||||
|
}
|
||||||
|
ret= 1 + non_pass1; goto ex;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(cpt= opts; *cpt != 0; cpt++) {
|
||||||
|
if(*cpt == 'd') {
|
||||||
|
if(flag & 2)
|
||||||
|
continue;
|
||||||
|
Xorriso_relax_compliance(xorriso, "no_force_dots", 0);
|
||||||
|
} else if(*cpt == 'D') {
|
||||||
|
if(flag & 2)
|
||||||
|
continue;
|
||||||
|
*option_d= 1;
|
||||||
|
} else if(*cpt == 'f') {
|
||||||
|
if(!(flag & 2))
|
||||||
|
continue;
|
||||||
|
ret= Xorriso_option_follow(xorriso, "on", 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto ex;
|
||||||
|
} else if(*cpt == 'J') {
|
||||||
|
if(flag & 2)
|
||||||
|
continue;
|
||||||
|
xorriso->do_joliet= 1;
|
||||||
|
} else if(*cpt == 'l') {
|
||||||
|
if(flag & 2)
|
||||||
|
continue;
|
||||||
|
if(xorriso->iso_level <= 2)
|
||||||
|
Xorriso_relax_compliance(xorriso, "iso_9660_level=2", 0);
|
||||||
|
if(*iso_level <= 2)
|
||||||
|
*iso_level= 2;
|
||||||
|
} else if(*cpt == 'N') {
|
||||||
|
if(flag & 2)
|
||||||
|
continue;
|
||||||
|
Xorriso_relax_compliance(xorriso, "omit_version", 0);
|
||||||
|
} else if(*cpt == 'R') {
|
||||||
|
/* inavoidable */;
|
||||||
|
} else if(*cpt == 'r') {
|
||||||
|
if(flag & 2)
|
||||||
|
continue;
|
||||||
|
*lower_r= 1;
|
||||||
|
} else if(*cpt == 'T') {
|
||||||
|
/* ignored */;
|
||||||
|
} else if(*cpt == 'U') {
|
||||||
|
if(flag & 2)
|
||||||
|
continue;
|
||||||
|
Xorriso_relax_compliance(xorriso,
|
||||||
|
"no_force_dots:long_paths:long_names:omit_version:full_ascii:lowercase",
|
||||||
|
0);
|
||||||
|
} else if(*cpt == 'v') {
|
||||||
|
if(!(flag & 2))
|
||||||
|
continue;
|
||||||
|
strcpy(ra_text, "UPDATE");
|
||||||
|
} else if(*cpt == 'z') {
|
||||||
|
if(!(flag & 2))
|
||||||
|
continue;
|
||||||
|
Xorriso_option_zisofs(xorriso, "by_magic=on", 0);
|
||||||
|
} else {
|
||||||
|
sprintf(xorriso->info_text, "-as %s: Unsupported option -%c", whom, *cpt);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
ret= 0; goto ex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ret= 1;
|
||||||
|
ex:;
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* micro emulation of mkisofs */
|
/* micro emulation of mkisofs */
|
||||||
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)
|
||||||
@ -1079,12 +1170,16 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
|
|||||||
} else if(strcmp(argpt, "-help")==0) {
|
} else if(strcmp(argpt, "-help")==0) {
|
||||||
Xorriso_genisofs_help(xorriso, 0);
|
Xorriso_genisofs_help(xorriso, 0);
|
||||||
} else if(strcmp(argpt, "-v")==0 || strcmp(argpt, "-verbose")==0) {
|
} else if(strcmp(argpt, "-v")==0 || strcmp(argpt, "-verbose")==0) {
|
||||||
strcpy(ra_text, "UPDATE");
|
ret= Xorriso_genisofs_fused_options(xorriso, whom, "v",
|
||||||
|
&option_d, &iso_level, &lower_r, ra_text, 2);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto problem_handler_1;
|
||||||
} else if(strcmp(argpt, "-quiet")==0) {
|
} else if(strcmp(argpt, "-quiet")==0) {
|
||||||
strcpy(ra_text, "SORRY");
|
strcpy(ra_text, "SORRY");
|
||||||
} else if(strcmp(argpt, "-f")==0 || strcmp(argpt, "-follow-links")==0) {
|
} else if(strcmp(argpt, "-f")==0 || strcmp(argpt, "-follow-links")==0) {
|
||||||
ret= Xorriso_option_follow(xorriso, "on", 0);
|
ret= Xorriso_genisofs_fused_options(xorriso, whom, "f",
|
||||||
if(ret<=0)
|
&option_d, &iso_level, &lower_r, ra_text, 2);
|
||||||
|
if(ret <= 0)
|
||||||
goto problem_handler_1;
|
goto problem_handler_1;
|
||||||
} else if(strcmp(argpt, "-iso-level")==0) {
|
} else if(strcmp(argpt, "-iso-level")==0) {
|
||||||
if(i+1>=argc)
|
if(i+1>=argc)
|
||||||
@ -1197,6 +1292,10 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
|
|||||||
Xorriso_option_md5(xorriso, "on", 0);
|
Xorriso_option_md5(xorriso, "on", 0);
|
||||||
} else if(strcmp(argpt, "-z")==0 ||
|
} else if(strcmp(argpt, "-z")==0 ||
|
||||||
strcmp(argpt, "-transparent-compression")==0) {
|
strcmp(argpt, "-transparent-compression")==0) {
|
||||||
|
ret= Xorriso_genisofs_fused_options(xorriso, whom, "z",
|
||||||
|
&option_d, &iso_level, &lower_r, ra_text, 2);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto problem_handler_1;
|
||||||
Xorriso_option_zisofs(xorriso, "by_magic=on", 0);
|
Xorriso_option_zisofs(xorriso, "by_magic=on", 0);
|
||||||
} else if(strcmp(argpt, "--stdio_sync")==0) {
|
} else if(strcmp(argpt, "--stdio_sync")==0) {
|
||||||
if(i+1>=argc)
|
if(i+1>=argc)
|
||||||
@ -1214,11 +1313,26 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
|
|||||||
} else if(strcmp(argpt, "-log-file") == 0) {
|
} else if(strcmp(argpt, "-log-file") == 0) {
|
||||||
/* already handled before this loop */;
|
/* already handled before this loop */;
|
||||||
} else {
|
} else {
|
||||||
was_other_option= 1;
|
if(argv[i][0] == '-') {
|
||||||
hargv[0]= argpt;
|
ret= Xorriso_genisofs_fused_options(xorriso, whom, argv[i] + 1,
|
||||||
ret= Xorriso_genisofs_count_args(xorriso, argc - i, hargv, &count, 0);
|
&option_d, &iso_level, &lower_r, ra_text, 1 | 2);
|
||||||
if(ret > 0)
|
if(ret != 1)
|
||||||
i+= count; /* skip eventual arguments of known option */
|
was_other_option= 1;
|
||||||
|
} else {
|
||||||
|
ret= 0;
|
||||||
|
was_other_option= 1;
|
||||||
|
}
|
||||||
|
if(ret > 0) {
|
||||||
|
Xorriso_genisofs_fused_options(xorriso, whom, argv[i] + 1,
|
||||||
|
&option_d, &iso_level, &lower_r, ra_text, 2);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto problem_handler_1;
|
||||||
|
} else {
|
||||||
|
hargv[0]= argpt;
|
||||||
|
ret= Xorriso_genisofs_count_args(xorriso, argc - i, hargv, &count, 0);
|
||||||
|
if(ret > 0)
|
||||||
|
i+= count; /* skip eventual arguments of known option */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
continue; /* regular bottom of loop */
|
continue; /* regular bottom of loop */
|
||||||
problem_handler_1:;
|
problem_handler_1:;
|
||||||
@ -1343,9 +1457,15 @@ illegal_c:;
|
|||||||
} else if(strcmp(argpt, "-R")==0 || strcmp(argpt, "-rock")==0) {
|
} else if(strcmp(argpt, "-R")==0 || strcmp(argpt, "-rock")==0) {
|
||||||
/* ok */;
|
/* ok */;
|
||||||
} else if(strcmp(argpt, "-r")==0 || strcmp(argpt, "-rational-rock")==0){
|
} else if(strcmp(argpt, "-r")==0 || strcmp(argpt, "-rational-rock")==0){
|
||||||
lower_r= 1;
|
ret= Xorriso_genisofs_fused_options(xorriso, whom, "r",
|
||||||
|
&option_d, &iso_level, &lower_r, ra_text, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto problem_handler_2;
|
||||||
} else if(strcmp(argpt, "-J")==0 || strcmp(argpt, "-joliet")==0) {
|
} else if(strcmp(argpt, "-J")==0 || strcmp(argpt, "-joliet")==0) {
|
||||||
xorriso->do_joliet= 1;
|
ret= Xorriso_genisofs_fused_options(xorriso, whom, "J",
|
||||||
|
&option_d, &iso_level, &lower_r, ra_text, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto problem_handler_2;
|
||||||
} else if(strcmp(argpt, "-joliet-long")==0) {
|
} else if(strcmp(argpt, "-joliet-long")==0) {
|
||||||
Xorriso_relax_compliance(xorriso,
|
Xorriso_relax_compliance(xorriso,
|
||||||
"joliet_long_paths:joliet_long_names", 0);
|
"joliet_long_paths:joliet_long_names", 0);
|
||||||
@ -1519,8 +1639,10 @@ not_enough_args:;
|
|||||||
/* was already handled in first argument scan */;
|
/* was already handled in first argument scan */;
|
||||||
} else if(strcmp(argpt, "-U") == 0 ||
|
} else if(strcmp(argpt, "-U") == 0 ||
|
||||||
strcmp(argpt, "-untranslated-filenames") == 0) {
|
strcmp(argpt, "-untranslated-filenames") == 0) {
|
||||||
Xorriso_relax_compliance(xorriso,
|
ret= Xorriso_genisofs_fused_options(xorriso, whom, "U",
|
||||||
"no_force_dots:long_paths:long_names:omit_version:full_ascii:lowercase", 0);
|
&option_d, &iso_level, &lower_r, ra_text, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto problem_handler_2;
|
||||||
} else if(strcmp(argpt, "-untranslated_name_len") == 0) {
|
} else if(strcmp(argpt, "-untranslated_name_len") == 0) {
|
||||||
if(i+1>=argc)
|
if(i+1>=argc)
|
||||||
goto not_enough_args;
|
goto not_enough_args;
|
||||||
@ -1531,18 +1653,24 @@ not_enough_args:;
|
|||||||
goto problem_handler_2;
|
goto problem_handler_2;
|
||||||
} else if(strcmp(argpt, "-N") == 0 ||
|
} else if(strcmp(argpt, "-N") == 0 ||
|
||||||
strcmp(argpt, "-omit-version-number") == 0) {
|
strcmp(argpt, "-omit-version-number") == 0) {
|
||||||
Xorriso_relax_compliance(xorriso, "omit_version", 0);
|
ret= Xorriso_genisofs_fused_options(xorriso, whom, "N",
|
||||||
|
&option_d, &iso_level, &lower_r, ra_text, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto problem_handler_2;
|
||||||
} else if(strcmp(argpt, "-l") == 0 ||
|
} else if(strcmp(argpt, "-l") == 0 ||
|
||||||
strcmp(argpt, "-full-iso9660-filenames") == 0) {
|
strcmp(argpt, "-full-iso9660-filenames") == 0) {
|
||||||
if(xorriso->iso_level <= 2)
|
ret= Xorriso_genisofs_fused_options(xorriso, whom, "l",
|
||||||
Xorriso_relax_compliance(xorriso, "iso_9660_level=2", 0);
|
&option_d, &iso_level, &lower_r, ra_text, 0);
|
||||||
if(iso_level <= 2)
|
if(ret <= 0)
|
||||||
iso_level= 2;
|
goto problem_handler_2;
|
||||||
} else if(strcmp(argpt, "-max-iso9660-filenames") == 0) {
|
} else if(strcmp(argpt, "-max-iso9660-filenames") == 0) {
|
||||||
Xorriso_relax_compliance(xorriso, "long_names", 0);
|
Xorriso_relax_compliance(xorriso, "long_names", 0);
|
||||||
} else if(strcmp(argpt, "-d") == 0 ||
|
} else if(strcmp(argpt, "-d") == 0 ||
|
||||||
strcmp(argpt, "-omit-period") == 0) {
|
strcmp(argpt, "-omit-period") == 0) {
|
||||||
Xorriso_relax_compliance(xorriso, "no_force_dots", 0);
|
ret= Xorriso_genisofs_fused_options(xorriso, whom, "d",
|
||||||
|
&option_d, &iso_level, &lower_r, ra_text, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto problem_handler_2;
|
||||||
} else if(strcmp(argpt, "-allow-lowercase") == 0) {
|
} else if(strcmp(argpt, "-allow-lowercase") == 0) {
|
||||||
Xorriso_relax_compliance(xorriso, "lowercase", 0);
|
Xorriso_relax_compliance(xorriso, "lowercase", 0);
|
||||||
} else if(strcmp(argpt, "-relaxed-filenames") == 0) {
|
} else if(strcmp(argpt, "-relaxed-filenames") == 0) {
|
||||||
@ -1678,7 +1806,10 @@ not_enough_args:;
|
|||||||
|
|
||||||
} else if(strcmp(argpt, "-D") == 0 ||
|
} else if(strcmp(argpt, "-D") == 0 ||
|
||||||
strcmp(argpt, "-disable-deep-relocation") == 0) {
|
strcmp(argpt, "-disable-deep-relocation") == 0) {
|
||||||
option_d= 1;
|
ret= Xorriso_genisofs_fused_options(xorriso, whom, "D",
|
||||||
|
&option_d, &iso_level, &lower_r, ra_text, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto problem_handler_2;
|
||||||
|
|
||||||
} else if(strcmp(argpt, "-hide-rr-moved") == 0) {
|
} else if(strcmp(argpt, "-hide-rr-moved") == 0) {
|
||||||
rr_reloc_dir_pt= ".rr_moved";
|
rr_reloc_dir_pt= ".rr_moved";
|
||||||
@ -1705,16 +1836,25 @@ rr_reloc_dir:;
|
|||||||
/* was already handled before this loop */;
|
/* was already handled before this loop */;
|
||||||
|
|
||||||
} else if(argpt[0]=='-' && argpt[1]!=0) {
|
} else if(argpt[0]=='-' && argpt[1]!=0) {
|
||||||
hargv[0]= argpt;
|
ret= Xorriso_genisofs_fused_options(xorriso, whom, argv[i] + 1,
|
||||||
ret= Xorriso_genisofs_count_args(xorriso, argc - i, hargv, &count, 1);
|
&option_d, &iso_level, &lower_r, ra_text, 1);
|
||||||
if(ret > 0) {
|
if(ret == 1) {
|
||||||
sprintf(xorriso->info_text, "-as %s: Unsupported option %s",
|
ret= Xorriso_genisofs_fused_options(xorriso, whom, argv[i] + 1,
|
||||||
whom, Text_shellsafe(argv[i], sfe, 0));
|
&option_d, &iso_level, &lower_r, ra_text, 0);
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
if(ret <= 0)
|
||||||
i+= count;
|
goto problem_handler_2;
|
||||||
goto problem_handler_2;
|
} else {
|
||||||
} else
|
hargv[0]= argpt;
|
||||||
goto is_pathspec_2;
|
ret= Xorriso_genisofs_count_args(xorriso, argc - i, hargv, &count, 1);
|
||||||
|
if(ret > 0) {
|
||||||
|
sprintf(xorriso->info_text, "-as %s: Unsupported option %s",
|
||||||
|
whom, Text_shellsafe(argv[i], sfe, 0));
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
i+= count;
|
||||||
|
goto problem_handler_2;
|
||||||
|
} else
|
||||||
|
goto is_pathspec_2;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
is_pathspec_2:;
|
is_pathspec_2:;
|
||||||
/* implementing mkisofs tendency to map single-path pathspecs to / */
|
/* implementing mkisofs tendency to map single-path pathspecs to / */
|
||||||
@ -1893,6 +2033,8 @@ problem_handler_2:;
|
|||||||
argpt= argv[i] + 1;
|
argpt= argv[i] + 1;
|
||||||
else
|
else
|
||||||
argpt= argv[i];
|
argpt= argv[i];
|
||||||
|
if(ret <= 0)
|
||||||
|
goto ex;
|
||||||
if(strcmp(argpt, "-no-emul-boot")==0) {
|
if(strcmp(argpt, "-no-emul-boot")==0) {
|
||||||
emul_boot= xorriso->boot_image_emul= 0;
|
emul_boot= xorriso->boot_image_emul= 0;
|
||||||
} else if(strcmp(argpt, "-hard-disk-boot")==0) {
|
} else if(strcmp(argpt, "-hard-disk-boot")==0) {
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2012.04.22.100352"
|
#define Xorriso_timestamP "2012.04.25.191110"
|
||||||
|
Loading…
Reference in New Issue
Block a user