Reporting some relaxation commands with -report_el_torito modes "cmd" and "mkisofs" if CHRP is detected. Performing them with -boot_image any "replay".

This commit is contained in:
2022-10-07 11:55:10 +02:00
parent e594ba293a
commit 82dc9b6b42
6 changed files with 136 additions and 39 deletions

View File

@ -1703,7 +1703,8 @@ static int Xorriso_scan_report_lines(struct XorrisO *xorriso,
int was_force_bootable= 0, have_mbr_force_bootable= 0;
uint64_t gpt_bheader_block= 0, start_block, num_blocks;
uint64_t img_blocks= 0, iso_part_blocks;
char *cpt;
char *cpt, *npt, *ftext;
int ftext_l, l;
unsigned char bin_data[8];
uint64_t gpt_part_flags;
int was_gpt_iso_bootable= 0, was_gpt_iso_not_ro= 0, bin_count;
@ -2086,6 +2087,61 @@ static int Xorriso_scan_report_lines(struct XorrisO *xorriso,
sprintf(buf, "-chrp-boot-part ");
else
sprintf(buf, "-boot_image any chrp_boot_part=on ");
Xorriso_record_cmd_linE
buf[0]= 0;
ret= Xorriso_assess_written_features(xorriso,
mkisofs ? "as_mkisofs" : "cmd", 1);
if(ret > 0) {
ftext= xorriso->result_line;
ftext_l= strlen(ftext);
for(cpt= ftext ; cpt - ftext < ftext_l ; cpt+= l + 1) {
npt= strchr(cpt, '\n');
if(npt == NULL)
l= strlen(cpt);
else
l= npt - cpt;
cpt[l]= 0;
/* Only forward relaxations of ISO 9660 defaults, plus no RR */
if(mkisofs) {
if(strcmp(cpt, "-iso-level 2") != 0 &&
strcmp(cpt, "-iso-level 3") != 0 &&
strcmp(cpt, "--norock") != 0 &&
strncmp(cpt, "-untranslated_name_len", 22) != 0 &&
strcmp(cpt, "-N") != 0 &&
strcmp(cpt, "-D") != 0 &&
strcmp(cpt, "-U") != 0 &&
strcmp(cpt, "-max-iso9660-filenames") != 0 &&
strcmp(cpt, "-d") != 0 &&
strcmp(cpt, "-allow-lowercase") != 0)
continue;
} else {
/* (Do not forward iso_9660_level because 3 is default and the
user possibly had reasons to lower it) */
if(strcmp(cpt, "-rockridge off") != 0 &&
strncmp(cpt, "-compliance untranslated_name_len=", 34) != 0 &&
strcmp(cpt, "-compliance omit_version_off:only_iso_version")
!= 0 &&
strcmp(cpt, "-compliance omit_version:only_iso_version_off")
!= 0 &&
strcmp(cpt, "-compliance deep_paths") != 0 &&
strcmp(cpt, "-compliance long_paths") != 0 &&
strcmp(cpt, "-compliance full_ascii") != 0 &&
strcmp(cpt, "-compliance long_names") != 0 &&
strncmp(cpt, "-compliance no_force_dots:", 26) != 0 &&
strcmp(cpt, "-compliance lowercase") != 0)
continue;
if(strcmp(cpt, "-compliance untranslated_name_len=0") == 0)
continue;
}
if(strncmp(cpt, "-compliance untranslated_name_len=", 34) == 0) {
/* Better allow the maximum if it is reported as non-0 */
strcpy(buf, "-compliance untranslated_name_len=96");
} else {
strcpy(buf, cpt);
}
Xorriso_record_cmd_linE
}
}
}
} else if(strcmp(name, "System area summary:") == 0) {