New -compliance option iso_9660_level=number

This commit is contained in:
2010-12-25 07:15:36 +00:00
parent 90f92a137f
commit 35819f708a
8 changed files with 176 additions and 127 deletions

View File

@ -719,7 +719,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
&value_length, &value, 2 | 8);
}
isoburn_igopt_set_level(sopts, 3);
isoburn_igopt_set_level(sopts, xorriso->iso_level);
ext= isoburn_igopt_rockridge |
((!!xorriso->do_joliet) * isoburn_igopt_joliet) |
((!!xorriso->do_iso1999) * isoburn_igopt_iso1999) |
@ -1806,6 +1806,8 @@ int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode,
char *npt, *cpt;
int l, was, value, ret;
struct isoburn_imgen_opts *opts= NULL;
char msg[160];
off_t limit;
was= xorriso->relax_compliance;
npt= cpt= mode;
@ -1947,6 +1949,27 @@ int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode,
} else if(l == 17 && strncmp(cpt, "iso_9660_1999_off", l) == 0) {
xorriso->do_iso1999= 0;
} else if((l >= 15 && strncmp(cpt, "iso_9660_level=", 15) == 0)) {
value= 0;
sscanf(cpt + 15, "%d", &value);
limit= ((off_t) 4) * ((off_t) 1024*1024*1024) - ((off_t) 1);
if(value == 1 || value == 2) {
xorriso->iso_level= value;
if(xorriso->file_size_limit > limit)
xorriso->file_size_limit= limit;
} else if(value == 3) {
xorriso->iso_level= value;
if(xorriso->file_size_limit == limit)
xorriso->file_size_limit= Xorriso_default_file_size_limiT;
} else {
sprintf(msg,
"-compliance iso_9660_level=%d : Only 1, 2, or 3 are permissible",
value);
Xorriso_msgs_submit(xorriso, 0, msg, 0, "FAILURE", 0);
xorriso->relax_compliance= was;
return(0);
}
} else if((l == 8 && strncmp(cpt, "iso_9660", l) == 0) ||
(l == 11 && strncmp(cpt, "iso_9660_on", l) == 0)) {
/* may have a meaning in future */;
@ -1986,6 +2009,8 @@ int Xorriso_get_relax_text(struct XorrisO *xorriso, char mode[1024],
return(1);
}
strcpy(mode, "clear");
if(xorriso->iso_level != 3)
sprintf(mode + strlen(mode), ":iso_9660_level=%d", xorriso->iso_level);
if(r & isoburn_igopt_omit_version_numbers)
strcat(mode, ":omit_version");
if(r & isoburn_igopt_only_iso_versions)
@ -2028,7 +2053,8 @@ int Xorriso_get_relax_text(struct XorrisO *xorriso, char mode[1024],
sprintf(mode + strlen(mode), ":iso_9660_1999");
return(1 +
(r == Xorriso_relax_compliance_defaulT && !(xorriso->no_emul_toc & 1)
&& xorriso->untranslated_name_len == 0 && !xorriso->do_iso1999));
&& xorriso->untranslated_name_len == 0 && !xorriso->do_iso1999 &&
xorriso->iso_level == 3));
}