New -compliance rules max_ce_entries=, max_ce_drop=
This commit is contained in:
@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user