New -compliance rules max_ce_entries=, max_ce_drop=

This commit is contained in:
2023-01-22 16:19:28 +01:00
parent 9a578a657f
commit b4e10ced99
7 changed files with 228 additions and 105 deletions

View File

@ -2,7 +2,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2022 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2023 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -988,6 +988,10 @@ int Xorriso_make_iso_write_opts(struct XorrisO *xorriso, IsoImage *image,
isoburn_igopt_set_iso_type_guid(sopts, xorriso->iso_gpt_type_guid,
xorriso->iso_mbr_part_flag & 1);
isoburn_igopt_set_gpt_guid(sopts, xorriso->gpt_guid, xorriso->gpt_guid_mode);
ret= isoburn_igopt_set_max_ce_entries(sopts, xorriso->max_ce_entries,
xorriso->max_ce_entries_flag);
if(ret <= 0)
{ret= 0; goto ex;}
isoburn_igopt_set_disc_label(sopts, xorriso->ascii_disc_label);
isoburn_igopt_set_hfsp_serial_number(sopts, xorriso->hfsp_serial_number);
isoburn_igopt_set_hfsp_block_size(sopts, xorriso->hfsp_block_size,
@ -1059,6 +1063,7 @@ fprintf(stderr, "XORRISO_DEBUG: isoburn_igopt_set_tail_blocks(%d)\n",
ret= 1;
ex:;
Xorriso_process_msg_queues(xorriso, 0);
return(ret);
}
@ -2564,9 +2569,10 @@ int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode,
int flag)
{
char *npt, *cpt;
int l, was, value, ret;
int l, was, value, ret, endl;
struct isoburn_imgen_opts *opts= NULL;
char *msg= NULL;
char submode[41], *endpt;
off_t limit;
was= xorriso->relax_compliance;
@ -2783,6 +2789,41 @@ int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode,
} else if(l == 13 && strncmp(cpt, "old_empty_off", l) == 0) {
xorriso->do_old_empty= 0;
} else if(l >= 15 && strncmp(cpt, "max_ce_entries=", 15) == 0) {
value= 0;
sscanf(cpt + 15, "%d", &value);
if(value < 1 || value > 100000) {
if(msg == NULL)
Xorriso_alloc_meM(msg, char, 160);
sprintf(msg,
"-compliance max_ce_entries=%d : Permissible is 1 to 100000",
value);
Xorriso_msgs_submit(xorriso, 0, msg, 0, "FAILURE", 0);
xorriso->relax_compliance= was;
ret= 0; goto ex;
} else {
xorriso->max_ce_entries= value;
}
} else if(l >= 12 && strncmp(cpt, "max_ce_drop=", 12) == 0) {
endl= sizeof(submode) - 1;
endpt= strchr(cpt + 12, ':');
if(endpt != NULL)
if(endl > endpt - (cpt + 12))
endl= endpt - (cpt + 12);
strncpy(submode, cpt + 12, endl);
submode[endl]= 0;
if(strcmp(submode, "off") == 0) {
xorriso->max_ce_entries_flag&= ~15;
} else if(strcmp(submode, "xattr") == 0) {
xorriso->max_ce_entries_flag= (xorriso->max_ce_entries_flag & ~15) | 1;
} else if(strcmp(submode, "xattr_acl") == 0) {
xorriso->max_ce_entries_flag= (xorriso->max_ce_entries_flag & ~15) | 2;
} else {
sprintf(xorriso->info_text,
"-compliance: unknown mode in max_ce_drop='%s'", submode);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
} else {
if(l<SfileadrL)
sprintf(xorriso->info_text, "-compliance: unknown rule '%s'",
@ -2806,7 +2847,7 @@ ex:;
int Xorriso_get_relax_text(struct XorrisO *xorriso, char mode[1024],
int flag)
{
int r;
int r, drop;
r= xorriso->relax_compliance;
if(r == 0) {
@ -2865,10 +2906,15 @@ int Xorriso_get_relax_text(struct XorrisO *xorriso, char mode[1024],
sprintf(mode + strlen(mode), ":iso_9660_1999");
if(xorriso->do_old_empty)
sprintf(mode + strlen(mode), ":old_empty");
sprintf(mode + strlen(mode), ":max_ce_entries=%u", xorriso->max_ce_entries);
drop= xorriso->max_ce_entries_flag & 15;
sprintf(mode + strlen(mode), ":max_ce_drop=%s",
drop == 0 ? "off" : drop == 1 ? "xattr" : "xattr_acl");
return(1 +
(r == Xorriso_relax_compliance_defaulT && !(xorriso->no_emul_toc & 1)
&& xorriso->untranslated_name_len == 0 && !xorriso->do_iso1999 &&
xorriso->iso_level == 3));
xorriso->iso_level == 3 && xorriso->max_ce_entries == 31 &&
drop == 2));
}