From 82dc9b6b4213e3c536dc3d2e65909c8b7e2d01ee Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Fri, 7 Oct 2022 11:55:10 +0200 Subject: [PATCH] Reporting some relaxation commands with -report_el_torito modes "cmd" and "mkisofs" if CHRP is detected. Performing them with -boot_image any "replay". --- xorriso/drive_mgt.c | 23 ++++++++++-- xorriso/iso_img.c | 58 +++++++++++++++++++++++++++++- xorriso/xorriso.1 | 10 +++++- xorriso/xorriso.info | 72 ++++++++++++++++++++----------------- xorriso/xorriso.texi | 10 +++++- xorriso/xorriso_timestamp.h | 2 +- 6 files changed, 136 insertions(+), 39 deletions(-) diff --git a/xorriso/drive_mgt.c b/xorriso/drive_mgt.c index 1a0cbd3f..7ca2dca8 100644 --- a/xorriso/drive_mgt.c +++ b/xorriso/drive_mgt.c @@ -240,6 +240,8 @@ ex:; } +/* @param flag bit0= no info message "Loading ISO image tree" +*/ int Xorriso_make_read_options(struct XorrisO *xorriso, struct burn_drive *drive, struct isoburn_read_opts **ropts, @@ -311,7 +313,7 @@ int Xorriso_make_read_options(struct XorrisO *xorriso, state= isoburn_disc_get_status(drive); if(state != BURN_DISC_BLANK) { ret= isoburn_disc_get_msc1(drive, &load_lba); - if(ret > 0) { + if(ret > 0 && !(flag & 1)) { sprintf(xorriso->info_text, "Loading ISO image tree from LBA %d", load_lba); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0); @@ -3865,6 +3867,8 @@ int Xorriso_feature_to_cmd(struct XorrisO *xorriso, char *name, char *value, } +/* @param flag bit0= do not print xorriso->result_line, but accumulate it +*/ int Xorriso_assess_written_features(struct XorrisO *xorriso, char *mode, int flag) { @@ -3876,11 +3880,16 @@ int Xorriso_assess_written_features(struct XorrisO *xorriso, char *mode, IsoReadImageFeatures *features= NULL; struct isoburn_imgen_opts *imgen_opts= NULL; char *ftext= NULL, *cpt, *npt, *ept, *prev_line= NULL, *cmd_line= NULL; + char *result_acc= NULL; static char *tree_loaded_names[3]= {"ISO9660", "Joliet", "ISO9660:1999"}; int tree_loaded_names_max= 2; Xorriso_alloc_meM(prev_line, char, max_line_size); Xorriso_alloc_meM(cmd_line, char, max_line_size); + if(flag & 1) { + Xorriso_alloc_meM(result_acc, char, 10 * SfileadrL); + result_acc[0]= 0; + } prev_line[0]= 0; ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive, "when assessing written features", 0); @@ -3892,7 +3901,7 @@ int Xorriso_assess_written_features(struct XorrisO *xorriso, char *mode, "The disc in the input drive offers no readable content", 0, "NOTE", 0); ret= 2; goto ex; } - ret= Xorriso_make_read_options(xorriso, drive, &ropts, 0); + ret= Xorriso_make_read_options(xorriso, drive, &ropts, 1); if(ret <= 0) goto ex; ret = isoburn_assess_written_features(drive, ropts, &features, &imgen_opts, @@ -3962,7 +3971,12 @@ int Xorriso_assess_written_features(struct XorrisO *xorriso, char *mode, replay_count++; } else { strcat(xorriso->result_line, "\n"); - Xorriso_result(xorriso, 0); + if(flag & 1) { + if(strlen(result_acc) + strlen(xorriso->result_line) < 10 * SfileadrL) + strcat(result_acc, xorriso->result_line); + } else { + Xorriso_result(xorriso, 0); + } } } @@ -3972,6 +3986,8 @@ int Xorriso_assess_written_features(struct XorrisO *xorriso, char *mode, replay_count); Xorriso_info(xorriso, 0); } + if(flag & 1) + strcpy(xorriso->result_line, result_acc); ret= 1; ex:; Xorriso_process_msg_queues(xorriso,0); @@ -3982,6 +3998,7 @@ ex:; if(imgen_opts != NULL) isoburn_igopt_destroy(&imgen_opts, 0); Xorriso_free_meM(ftext); + Xorriso_free_meM(result_acc); Xorriso_free_meM(cmd_line); Xorriso_free_meM(prev_line); return(ret); diff --git a/xorriso/iso_img.c b/xorriso/iso_img.c index 144f5c46..78884978 100644 --- a/xorriso/iso_img.c +++ b/xorriso/iso_img.c @@ -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) { diff --git a/xorriso/xorriso.1 b/xorriso/xorriso.1 index 5f57f8ce..35176184 100644 --- a/xorriso/xorriso.1 +++ b/xorriso/xorriso.1 @@ -9,7 +9,7 @@ .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) -.TH XORRISO 1 "Version 1.5.5, Sep 18, 2022" +.TH XORRISO 1 "Version 1.5.5, Oct 06, 2022" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -4586,6 +4586,14 @@ Mode \fBas_mkisofs\fR tries to print the \fBxorriso \-as mkisofs\fR options, which are necessary to produce the found equipment. The intended use case is to use the mounted filesystem as input tree together with the printed options. +.br +If CHRP equipment is detected, then modes \fBcmd\fR and \fBas_mkisofs\fR +issue some of the relaxation commands or options which get detected by +command \fB\-assess_indev_features\fR. This happens because CHRP firmware +reads file paths from file /ppc/bootinfo.txt and tries to find them +case\-insensitively in the ECMA\-119 tree without using Rock Ridge. If such a +path has actually forbidden properties, like the name "powerpc\-ieee1275", then +the relaxations are needed to bring it unmangled into the ECMA\-119 tree. .TP \fB\-report_system_area\fR mode With mode \fBplain\fR print a report about the information found in diff --git a/xorriso/xorriso.info b/xorriso/xorriso.info index 6b54206c..d6b8c47c 100644 --- a/xorriso/xorriso.info +++ b/xorriso/xorriso.info @@ -3857,6 +3857,14 @@ File: xorriso.info, Node: Inquiry, Next: Navigate, Prev: DialogCtl, Up: Comm which are necessary to produce the found equipment. The intended use case is to use the mounted filesystem as input tree together with the printed options. + If CHRP equipment is detected, then modes *cmd* and *as_mkisofs* + issue some of the relaxation commands or options which get detected + by command *-assess_indev_features*. This happens because CHRP + firmware reads file paths from file /ppc/bootinfo.txt and tries to + find them case-insensitively in the ECMA-119 tree without using + Rock Ridge. If such a path has actually forbidden properties, like + the name "powerpc-ieee1275", then the relaxations are needed to + bring it unmangled into the ECMA-119 tree. -report_system_area mode With mode *plain* print a report about the information found in the System Area of the loaded ISO image. The report consists of zero @@ -5808,7 +5816,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -reassure enables confirmation question: DialogCtl. (line 29) * -report_about controls verbosity: Exception. (line 53) * -report_el_torito shows Boot Catalog: Inquiry. (line 150) -* -report_system_area shows MBR, GPT, and alike: Inquiry. (line 172) +* -report_system_area shows MBR, GPT, and alike: Inquiry. (line 180) * -return_with controls exit value: Exception. (line 38) * -rm deletes files from ISO image: Manip. (line 20) * -rmdir deletes ISO directory: Manip. (line 29) @@ -6004,7 +6012,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Image, set volume timestamp, -volume_date: SetWrite. (line 211) * Image, show Boot Catalog: Inquiry. (line 150) * Image, show id strings, -pvd_info: Inquiry. (line 142) -* Image, show MBR, GPT, and alike, -pvd_info: Inquiry. (line 172) +* Image, show MBR, GPT, and alike, -pvd_info: Inquiry. (line 180) * Image, _definition: Model. (line 9) * Input Character Set, _definition: Charset. (line 25) * Insert, enable overwriting, -overwrite: SetInsert. (line 139) @@ -6223,35 +6231,35 @@ Node: Charset189084 Node: Exception192413 Node: DialogCtl198542 Node: Inquiry201144 -Node: Navigate211859 -Node: Verify220566 -Node: Restore231715 -Node: Emulation243923 -Node: Scripting254379 -Node: Frontend262162 -Node: Examples271788 -Node: ExDevices272966 -Node: ExCreate273627 -Node: ExDialog274927 -Node: ExGrowing276198 -Node: ExModifying277007 -Node: ExBootable277517 -Node: ExCharset278072 -Node: ExPseudo278968 -Node: ExCdrecord279895 -Node: ExMkisofs280215 -Node: ExGrowisofs282112 -Node: ExException283265 -Node: ExTime283723 -Node: ExIncBackup284181 -Node: ExRestore288207 -Node: ExRecovery289153 -Node: Files289725 -Node: Environ291059 -Node: Seealso291807 -Node: Bugreport292524 -Node: Legal293115 -Node: CommandIdx294127 -Node: ConceptIdx312025 +Node: Navigate212402 +Node: Verify221109 +Node: Restore232258 +Node: Emulation244466 +Node: Scripting254922 +Node: Frontend262705 +Node: Examples272331 +Node: ExDevices273509 +Node: ExCreate274170 +Node: ExDialog275470 +Node: ExGrowing276741 +Node: ExModifying277550 +Node: ExBootable278060 +Node: ExCharset278615 +Node: ExPseudo279511 +Node: ExCdrecord280438 +Node: ExMkisofs280758 +Node: ExGrowisofs282655 +Node: ExException283808 +Node: ExTime284266 +Node: ExIncBackup284724 +Node: ExRestore288750 +Node: ExRecovery289696 +Node: Files290268 +Node: Environ291602 +Node: Seealso292350 +Node: Bugreport293067 +Node: Legal293658 +Node: CommandIdx294670 +Node: ConceptIdx312568  End Tag Table diff --git a/xorriso/xorriso.texi b/xorriso/xorriso.texi index 5ae9405e..60adad63 100644 --- a/xorriso/xorriso.texi +++ b/xorriso/xorriso.texi @@ -50,7 +50,7 @@ @c man .\" First parameter, NAME, should be all caps @c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection @c man .\" other parameters are allowed: see man(7), man(1) -@c man .TH XORRISO 1 "Version 1.5.5, Sep 18, 2022" +@c man .TH XORRISO 1 "Version 1.5.5, Oct 06, 2022" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -5244,6 +5244,14 @@ Mode @strong{as_mkisofs} tries to print the @strong{xorriso -as mkisofs} options, which are necessary to produce the found equipment. The intended use case is to use the mounted filesystem as input tree together with the printed options. +@* +If CHRP equipment is detected, then modes @strong{cmd} and @strong{as_mkisofs} +issue some of the relaxation commands or options which get detected by +command @strong{-assess_indev_features}. This happens because CHRP firmware +reads file paths from file /ppc/bootinfo.txt and tries to find them +case-insensitively in the ECMA-119 tree without using Rock Ridge. If such a +path has actually forbidden properties, like the name "powerpc-ieee1275", then +the relaxations are needed to bring it unmangled into the ECMA-119 tree. @c man .TP @item -report_system_area mode @kindex -report_system_area shows MBR, GPT, and alike diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index ea79bcd0..e5d73f79 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2022.09.20.082738" +#define Xorriso_timestamP "2022.10.07.095444"