New command -assess_indev_features

This commit is contained in:
Thomas Schmitt 2022-09-20 10:28:25 +02:00
parent d2fd48fcbc
commit e594ba293a
10 changed files with 637 additions and 126 deletions

View File

@ -240,6 +240,94 @@ ex:;
}
int Xorriso_make_read_options(struct XorrisO *xorriso,
struct burn_drive *drive,
struct isoburn_read_opts **ropts,
int flag)
{
int ret, ext, load_lba;
enum burn_disc_status state;
/* fill read opts */
ret= isoburn_ropt_new(ropts, 0);
if(ret<=0)
goto ex;
ret= Xorriso_set_data_cache(xorriso, *ropts, xorriso->cache_num_tiles,
xorriso->cache_tile_blocks,
xorriso->cache_default);
if(ret<=0)
goto ex;
ext= isoburn_ropt_noiso1999;
if(xorriso->read_fs & 1)
ext|= isoburn_ropt_norock;
if(xorriso->read_fs & 2)
ext|= isoburn_ropt_nojoliet;
if((xorriso->ino_behavior & (1 | 2)) && !(xorriso->do_aaip & (1 | 4 | 32))
&& !(xorriso->do_md5 & 1) && !(xorriso->do_hfsplus))
ext|= isoburn_ropt_noaaip;
if(!(xorriso->do_aaip & 1))
ext|= isoburn_ropt_noacl;
if(!(xorriso->do_aaip & 4))
ext|= isoburn_ropt_noea;
if(xorriso->ino_behavior & 1)
ext|= isoburn_ropt_noino;
if(!(xorriso->do_md5 & 1))
ext|= isoburn_ropt_nomd5;
if(xorriso->do_md5 & 32)
ext|= isoburn_ropt_nomd5tag;
if(xorriso->ecma119_map == 0)
ext|= isoburn_ropt_map_unmapped;
else if(xorriso->ecma119_map == 2)
ext|= isoburn_ropt_map_uppercase;
else if(xorriso->ecma119_map == 3)
ext|= isoburn_ropt_map_lowercase;
else
ext|= isoburn_ropt_map_stripped;
if(xorriso->joliet_map == 0)
ext|= isoburn_ropt_joliet_unmapped;
else
ext|= isoburn_ropt_joliet_stripped;
isoburn_ropt_set_extensions(*ropts, ext);
isoburn_ropt_set_default_perms(*ropts, (uid_t) 0, (gid_t) 0, (mode_t) 0555);
isoburn_ropt_set_input_charset(*ropts, xorriso->in_charset);
isoburn_ropt_set_auto_incharset(*ropts, !!(xorriso->do_aaip & 512));
isoburn_ropt_set_displacement(*ropts, xorriso->displacement,
xorriso->displacement_sign);
isoburn_ropt_set_truncate_mode(*ropts, 1, xorriso->file_name_limit);
Xorriso_set_image_severities(xorriso, 1); /* No DEBUG messages */
/* <<< Trying to work around too much tolerance on bad image trees.
Better would be a chance to instruct libisofs what to do in
case of image read errors. There is a risk to mistake other SORRYs.
*/
if(xorriso->img_read_error_mode>0)
iso_set_abort_severity("SORRY");
state= isoburn_disc_get_status(drive);
if(state != BURN_DISC_BLANK) {
ret= isoburn_disc_get_msc1(drive, &load_lba);
if(ret > 0) {
sprintf(xorriso->info_text,
"Loading ISO image tree from LBA %d", load_lba);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
}
ret= Xorriso_assert_volid(xorriso, load_lba, 0);
if(ret <= 0)
goto ex;
}
Xorriso_set_speed(xorriso, drive, xorriso->read_speed, 0, 1);
ret= 1;
ex:
return(ret);
}
/* @param flag bit0= acquire as isoburn input drive
bit1= acquire as libburn output drive (as isoburn drive if bit0)
bit2= regard overwritable media as blank
@ -257,7 +345,7 @@ ex:;
int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, char *show_adr,
int flag)
{
int ret, hret, not_writeable= 0, has_what, aquire_flag, load_lba, ext;
int ret, hret, not_writeable= 0, has_what, aquire_flag;
int lba, track, session, params_flag, adr_mode, read_ret, start_lba;
int truncate_mode;
uint32_t size, offst;
@ -540,83 +628,16 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, char *show_adr,
Xorriso_give_up_drive(xorriso, 1|((flag&32)>>2));
ret= 3; goto ex;
}
/* fill read opts */
ret= isoburn_ropt_new(&ropts, 0);
ret= Xorriso_make_read_options(xorriso, drive, &ropts, 0);
if(ret <= 0)
goto ex;
ret= Xorriso_set_data_cache(xorriso, ropts, xorriso->cache_num_tiles,
xorriso->cache_tile_blocks,
xorriso->cache_default);
if(ret<=0)
goto ex;
ext= isoburn_ropt_noiso1999;
if(xorriso->read_fs & 1)
ext|= isoburn_ropt_norock;
if(xorriso->read_fs & 2)
ext|= isoburn_ropt_nojoliet;
if((xorriso->ino_behavior & (1 | 2)) && !(xorriso->do_aaip & (1 | 4 | 32))
&& !(xorriso->do_md5 & 1) && !(xorriso->do_hfsplus))
ext|= isoburn_ropt_noaaip;
if(!(xorriso->do_aaip & 1))
ext|= isoburn_ropt_noacl;
if(!(xorriso->do_aaip & 4))
ext|= isoburn_ropt_noea;
if(xorriso->ino_behavior & 1)
ext|= isoburn_ropt_noino;
if(!(xorriso->do_md5 & 1))
ext|= isoburn_ropt_nomd5;
if(xorriso->do_md5 & 32)
ext|= isoburn_ropt_nomd5tag;
if(xorriso->ecma119_map == 0)
ext|= isoburn_ropt_map_unmapped;
else if(xorriso->ecma119_map == 2)
ext|= isoburn_ropt_map_uppercase;
else if(xorriso->ecma119_map == 3)
ext|= isoburn_ropt_map_lowercase;
else
ext|= isoburn_ropt_map_stripped;
if(xorriso->joliet_map == 0)
ext|= isoburn_ropt_joliet_unmapped;
else
ext|= isoburn_ropt_joliet_stripped;
isoburn_ropt_set_extensions(ropts, ext);
isoburn_ropt_set_default_perms(ropts, (uid_t) 0, (gid_t) 0, (mode_t) 0555);
isoburn_ropt_set_input_charset(ropts, xorriso->in_charset);
isoburn_ropt_set_auto_incharset(ropts, !!(xorriso->do_aaip & 512));
isoburn_ropt_set_displacement(ropts, xorriso->displacement,
xorriso->displacement_sign);
isoburn_ropt_set_truncate_mode(ropts, 1, xorriso->file_name_limit);
Xorriso_set_image_severities(xorriso, 1); /* No DEBUG messages */
Xorriso_pacifier_reset(xorriso, 0);
isoburn_set_read_pacifier(drive, Xorriso__read_pacifier, (void *) xorriso);
/* <<< Trying to work around too much tolerance on bad image trees.
Better would be a chance to instruct libisofs what to do in
case of image read errors. There is a risk to mistake other SORRYs.
*/
if(xorriso->img_read_error_mode>0)
iso_set_abort_severity("SORRY");
if(state != BURN_DISC_BLANK) {
ret= isoburn_disc_get_msc1(drive, &load_lba);
if(ret > 0) {
sprintf(xorriso->info_text,
"Loading ISO image tree from LBA %d", load_lba);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
}
ret= Xorriso_assert_volid(xorriso, load_lba, 0);
if(ret <= 0)
goto ex;
}
Xorriso_set_speed(xorriso, drive, xorriso->read_speed, 0, 1);
read_ret= ret= isoburn_read_image(drive, ropts, &volset);
/* <<< Resetting to normal thresholds */
/* <<< Resetting to normal thresholds, after Xorriso_make_read_options */
if(xorriso->img_read_error_mode>0)
Xorriso_set_abort_severity(xorriso, 0);
@ -3635,3 +3656,334 @@ int Xorriso_obtain_indev_readsize(struct XorrisO *xorriso, uint32_t *blocks,
}
/* @param flag bit0= as_mkisofs, else cmd
*/
int Xorriso_feature_to_cmd(struct XorrisO *xorriso, char *name, char *value,
int flag)
{
int i, as_m;
double val_num= -123456789;
static char *ignored_names[]= {"size", "eltorito", "tree_loaded",
"tree_loaded_text", "rr_loaded", "aaip",
"relaxed_vol_atts", "rrip_1_10_px_ino",
""};
sscanf(value, "%lf", &val_num);
for(i= 0; ignored_names[i][0] != 0; i++)
if(strcmp(name, ignored_names[i]) == 0)
return(0);
as_m= flag & 1;
if(strcmp(name, "iso_level") == 0) {
if(as_m) {
sprintf(xorriso->result_line, "-iso-level %s", value);
} else {
sprintf(xorriso->result_line, "-compliance iso_9660_level=%s", value);
}
} else if(strcmp(name, "rockridge") == 0) {
if(as_m) {
if(val_num > 0.0)
sprintf(xorriso->result_line, "-R");
else
sprintf(xorriso->result_line, "--norock");
} else {
sprintf(xorriso->result_line, "-rockridge %s",
val_num > 0.0 ? "on" : "off");
}
} else if(strcmp(name, "joliet") == 0) {
if(as_m) {
if(val_num <= 0.0)
return(0);
sprintf(xorriso->result_line, "-J");
} else {
sprintf(xorriso->result_line, "-joliet %s",
val_num > 0.0 ? "on" : "off");
}
} else if(strcmp(name, "iso1999") == 0) {
if(as_m) {
if(val_num <= 0.0)
return(0);
sprintf(xorriso->result_line, "-iso-level 4");
} else {
sprintf(xorriso->result_line, "-compliance iso_9660_1999%s",
val_num > 0.0 ? "" : "_off");
}
} else if(strcmp(name, "untranslated_name_len") == 0) {
if(as_m) {
if(val_num <= 0.0)
return(0);
sprintf(xorriso->result_line, "-untranslated_name_len %s", value);
} else {
sprintf(xorriso->result_line, "-compliance untranslated_name_len=%s",
value);
}
} else if(strcmp(name, "allow_dir_id_ext") == 0) {
if(as_m) {
if(val_num > 0.0)
return(0);
sprintf(xorriso->result_line, "-disallow_dir_id_ext");
} else {
sprintf(xorriso->result_line, "-compliance allow_dir_id_ext%s",
val_num > 0.0 ? "" : "_off");
}
} else if(strcmp(name, "omit_version_numbers") == 0) {
if(as_m) {
if(val_num <= 0.0)
return(0);
sprintf(xorriso->result_line, "-N");
} else {
if(val_num <= 0.0)
sprintf(xorriso->result_line,
"-compliance omit_version_off:only_iso_version_off");
else if(val_num == 2.0)
sprintf(xorriso->result_line,
"-compliance omit_version_off:only_iso_version");
else
sprintf(xorriso->result_line,
"-compliance omit_version:only_iso_version_off");
}
} else if(strcmp(name, "allow_deep_paths") == 0) {
if(as_m) {
if(val_num <= 0.0)
return(0);
sprintf(xorriso->result_line, "-D");
} else {
sprintf(xorriso->result_line, "-compliance deep_paths%s",
val_num > 0.0 ? "" : "_off");
}
} else if(strcmp(name, "allow_longer_paths") == 0) {
if(as_m) {
if(val_num <= 0.0)
return(0);
sprintf(xorriso->result_line, "-U");
} else {
sprintf(xorriso->result_line, "-compliance long_paths%s",
val_num > 0.0 ? "" : "_off");
}
} else if(strcmp(name, "allow_full_ascii") == 0) {
if(as_m) {
if(val_num <= 0.0)
return(0);
sprintf(xorriso->result_line, "-U");
} else {
sprintf(xorriso->result_line, "-compliance full_ascii%s",
val_num > 0.0 ? "" : "_off");
}
} else if(strcmp(name, "max_37_char_filenames") == 0) {
if(as_m) {
if(val_num <= 0.0)
return(0);
sprintf(xorriso->result_line, "-max-iso9660-filenames");
} else {
sprintf(xorriso->result_line, "-compliance long_names%s",
val_num > 0.0 ? "" : "_off");
}
} else if(strcmp(name, "no_force_dots") == 0) {
if(as_m) {
if(val_num <= 0.0)
return(0);
sprintf(xorriso->result_line, "-d");
} else {
sprintf(xorriso->result_line,
"-compliance no_force_dots%s:no_j_force_dots%s",
((int) val_num) & 1 ? "" : "_off",
((int) val_num) & 2 ? "" : "_off");
}
} else if(strcmp(name, "allow_lowercase") == 0) {
if(as_m) {
if(val_num <= 0.0)
return(0);
sprintf(xorriso->result_line, "-allow-lowercase");
} else {
sprintf(xorriso->result_line, "-compliance lowercase%s",
val_num > 0.0 ? "" : "_off");
}
} else if(strcmp(name, "joliet_longer_paths") == 0) {
if(as_m) {
if(val_num <= 0.0)
return(0);
sprintf(xorriso->result_line, "-joliet-long");
} else {
sprintf(xorriso->result_line, "-compliance joliet_long_paths%s",
val_num > 0.0 ? "" : "_off");
}
} else if(strcmp(name, "joliet_long_names") == 0) {
if(as_m) {
if(val_num <= 0.0)
return(0);
sprintf(xorriso->result_line, "-joliet-long");
} else {
sprintf(xorriso->result_line, "-compliance joliet_long_names%s",
val_num > 0.0 ? "" : "_off");
}
} else if(strcmp(name, "joliet_utf16") == 0) {
if(as_m) {
if(val_num <= 0.0)
return(0);
sprintf(xorriso->result_line, "-joliet-utf16");
} else {
sprintf(xorriso->result_line, "-compliance joliet_utf16%s",
val_num > 0.0 ? "" : "_off");
}
} else if(strcmp(name, "rrip_version_1_10") == 0) {
if(as_m) {
return(0);
} else {
sprintf(xorriso->result_line, "-compliance %s_rr",
val_num > 0.0 ? "old" : "new");
}
} else if(strcmp(name, "aaip_susp_1_10") == 0) {
if(as_m) {
return(0);
} else {
sprintf(xorriso->result_line, "-compliance aaip_susp_1_10%s",
val_num > 0.0 ? "" : "_off");
}
} else if(strcmp(name, "record_md5_session") == 0) {
if(as_m) {
if(val_num <= 0.0)
return(0);
sprintf(xorriso->result_line, "--md5");
} else {
sprintf(xorriso->result_line, "-md5 %s", val_num > 0.0 ? "on" : "off");
}
} else if(strcmp(name, "record_md5_files") == 0) {
if(as_m) {
if(val_num <= 0.0)
return(0);
sprintf(xorriso->result_line, "--md5");
} else {
sprintf(xorriso->result_line, "-md5 %s", val_num > 0.0 ? "on" : "off");
}
} else {
sprintf(xorriso->info_text, "Program error: unexpected feature name '%s'",
name);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0);
return(-1);
}
return(1);
}
int Xorriso_assess_written_features(struct XorrisO *xorriso, char *mode,
int flag)
{
int ret, l, ftext_l, replay_count= 0, max_line_size= 2 * SfileadrL;
struct burn_drive_info *dinfo;
struct burn_drive *drive;
enum burn_disc_status s;
struct isoburn_read_opts *ropts= NULL;
IsoReadImageFeatures *features= NULL;
struct isoburn_imgen_opts *imgen_opts= NULL;
char *ftext= NULL, *cpt, *npt, *ept, *prev_line= NULL, *cmd_line= 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);
prev_line[0]= 0;
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
"when assessing written features", 0);
if(ret <= 0)
{ret= 0; goto ex;}
s= isoburn_disc_get_status(drive);
if(s != BURN_DISC_APPENDABLE && s != BURN_DISC_FULL) {
Xorriso_msgs_submit(xorriso, 0,
"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);
if(ret <= 0)
goto ex;
ret = isoburn_assess_written_features(drive, ropts, &features, &imgen_opts,
0);
Xorriso_process_msg_queues(xorriso,0);
/* <<< Resetting to normal thresholds, after Xorriso_make_read_options */
if(xorriso->img_read_error_mode > 0)
Xorriso_set_abort_severity(xorriso, 0);
if(ret <= 0)
{ret= 0; goto ex;}
ret= iso_read_image_features_text(features, 1, &ftext);
if(ret < 0)
{ret= 0; goto ex;}
/* print results, depending on mode */
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;
ept= strchr(cpt, '=');
if(ept == NULL)
continue;
if(strcmp(mode, "cmd") == 0 || strcmp(mode, "replay") == 0 ||
strcmp(mode, "as_mkisofs") == 0 ) {
*ept= 0;
ret= Xorriso_feature_to_cmd(xorriso, cpt, ept + 1,
strcmp(mode, "as_mkisofs") == 0);
if(ret <= 0)
continue;
} else { /* "plain" and any other */
strcpy(xorriso->result_line, "Indev feature: ");
if(strncmp(cpt, "tree_loaded=", 12) == 0) {
sprintf(xorriso->result_line + strlen(xorriso->result_line),
"tree_loaded=%d", xorriso->tree_loaded);
} else if(strncmp(cpt, "tree_loaded_text=", 17) == 0) {
if(xorriso->tree_loaded >= 0 &&
xorriso->tree_loaded <= tree_loaded_names_max)
sprintf(xorriso->result_line + strlen(xorriso->result_line),
"tree_loaded_text=%s",
tree_loaded_names[xorriso->tree_loaded]);
} else if(strncmp(cpt, "rr_loaded=", 10) == 0) {
sprintf(xorriso->result_line + strlen(xorriso->result_line),
"rr_loaded=%d", xorriso->rr_loaded);
} else {
strcat(xorriso->result_line, cpt);
}
}
/* Truncate to plausible length */
xorriso->result_line[max_line_size - 1]= 0;
if(strcmp(xorriso->result_line, prev_line) == 0)
continue;
strcpy(prev_line, xorriso->result_line);
if(strcmp(mode, "replay") == 0) {
/* Perform result_line as command */
strcpy(cmd_line, xorriso->result_line);
ret= Xorriso_execute_option(xorriso, cmd_line, (1 << 16));
if(ret <= 0) {
/* >>> ??? what to do on error */;
}
replay_count++;
} else {
strcat(xorriso->result_line, "\n");
Xorriso_result(xorriso, 0);
}
}
if(strcmp(mode, "replay") == 0) {
sprintf(xorriso->info_text,
"-assess_indev_features replay : Number of performed commands: %d\n",
replay_count);
Xorriso_info(xorriso, 0);
}
ret= 1;
ex:;
Xorriso_process_msg_queues(xorriso,0);
if(ropts != NULL)
isoburn_ropt_destroy(&ropts, 0);
if(features != NULL)
iso_read_image_features_destroy(features);
if(imgen_opts != NULL)
isoburn_igopt_destroy(&imgen_opts, 0);
Xorriso_free_meM(ftext);
Xorriso_free_meM(cmd_line);
Xorriso_free_meM(prev_line);
return(ret);
}

View File

@ -1,7 +1,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2021 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2022 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -487,6 +487,25 @@ int Xorriso_option_assert_volid(struct XorrisO *xorriso, char *pattern,
}
/* Command -assess_indev_features */
int Xorriso_option_assess_indev_features(struct XorrisO *xorriso, char *mode,
int flag)
{
int ret;
if(strcmp(mode, "plain") != 0 && strcmp(mode, "cmd") != 0 &&
strcmp(mode, "as_mkisofs") != 0 && strcmp(mode, "replay") != 0 &&
mode[0] != 0) {
sprintf(xorriso->info_text, "-assess_indev_features: unknown mode '%s'",
mode);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
}
ret= Xorriso_assess_written_features(xorriso, mode, 0);
return(ret);
}
/* Option -auto_charset "on"|"off" */
int Xorriso_option_auto_charset(struct XorrisO *xorriso, char *mode, int flag)
{

View File

@ -1,7 +1,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2021 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2022 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -535,7 +535,7 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
};
static char arg1_commands[][40]= {
"abort_on","acl","add_plainly","application_id","application_use",
"auto_charset","abstract_file",
"auto_charset","abstract_file","assess_indev_features",
"backslash_codes","blank","biblio_file",
"calm_drive","cd","cdi","cdx","changes_pending","charset",
"close","close_damaged",
@ -710,6 +710,7 @@ int Xorriso_cmd_sorting_rank(struct XorrisO *xorriso,
"* Drive and media related inquiry actions (2):",
"list_profiles", "list_formats", "list_speeds",
"toc", "toc_of", "pvd_info", "report_system_area", "report_el_torito",
"assess_indev_features",
"* Settings for file insertion:",
"file_name_limit", "file_size_limit",
@ -1082,6 +1083,10 @@ next_command:;
(*idx)+= 2;
ret= Xorriso_option_assert_volid(xorriso, arg1, arg2, 0);
} else if(strcmp(cmd,"assess_indev_features")==0) {
(*idx)++;
ret= Xorriso_option_assess_indev_features(xorriso, arg1, 0);
} else if(strcmp(cmd,"auto_charset")==0) {
(*idx)++;
ret= Xorriso_option_auto_charset(xorriso, arg1, 0);

View File

@ -2084,6 +2084,8 @@ int Xorriso_sieve_big(struct XorrisO *xorriso, int flag)
10000, 1},
{"Image size :", 3, "Image size :", "", 1, { 0, -1, -1, -1, -1, -1},
1, 0},
{"Indev feature:", 3, "Indev feature:", "= ", 2, { 0, 1, -1, -1, -1, -1},
10000, 1},
{"Jigdo files :", 3, "Jigdo files :", "", 1, { 0, -1, -1, -1, -1, -1},
1, 0},
{"Local ACL :", 3, "Local ACL :", "", 1, { 0, -1, -1, -1, -1, -1},

View File

@ -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, Jun 02, 2022"
.TH XORRISO 1 "Version 1.5.5, Sep 18, 2022"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@ -4440,6 +4440,48 @@ summary of drive state and medium content is printed.
As further difference to \-toc, this command does not emit FAILURE events
if the desired drive is not acquired.
.TP
\fB\-assess_indev_features\fR "plain"|"cmd"|"as_mkisofs"|"replay"
Inspect the filesystem on \-indev for the presence of Rock Ridge, Joliet, or
ISO 9660:1999, and for traces of other write options which seem to have been
used when the filesystem was created.
.br
Note that this command does not detect and report a possibly present HFS+ tree.
.br
Mode "cmd" lists xorriso commands which would activate the detected settings.
.br
Mode "as_mkisofs" lists options of the \-as mkisofs emulation, which would
activate those of the detected settings which are not default.
.br
Mode "replay" performs the commands which get listed by mode "cmd".
.br
Mode "plain" lists after a "Indev feature: " header name\-value pairs as
delivered by libisofs function iso_read_image_feature_named(). See libisofs.h.
The other modes derive their output from this list. I.e. the sequence of
commands from "cmd" follows the sequence of "plain".
.br
Not leading to "cmd" lines are:
.br
"size=" tells the number of 2048 byte blocks of the filesystem.
.br
"eltorito=1" tells that El Torito boot equipment was detected.
.br
"tree_loaded=" tells which tree was loaded by \-indev:
.br
0 = ISO 9660 , 1 = Joliet , 2 = ISO 9660:1999
.br
"tree_loaded_text=" tells the same by name: "ISO9660", "Joliet", "ISO9660:1999"
.br
"rr_loaded=1" tells that Rock Ridge information was loaded with the tree.
.br
"aaip=1" tells that AAIP information was detected (ACL, xattr, MD5, ...).
.br
"relaxed_vol_atts=1" tells that the volume attributes like \-volid or
\-preparer_id bear characters outside the restricted character sets which are
specified for them by ECMA\-119.
.br
"rrip_1_10_px_ino=1" tells that with Rock Ridge 1.10 a PX entry was found which
looks like from Rock Ridge 1.12.
.TP
\fB\-mount_cmd\fR drive entity id path
Emit an appropriate command line for mounting the ISO session
indicated by drive, entity and id.

View File

@ -2,7 +2,7 @@
/* xorriso - libisoburn higher level API which creates, loads, manipulates
and burns ISO 9660 filesystem images.
Copyright 2007-2021 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2022 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -867,6 +867,9 @@ int Xorriso_sieve_dispose(struct XorrisO *xorriso, int flag);
argv[3]= Volume Id
"Image size :" up to 1 result from -print_size
argv[0]= number of blocks with "s" appended
"Indev feature:" up to 10000 results from -assess_indev_features plain
argv[0]= name
argv[1]= value
"Jigdo files :" up to 1 result from -list_extras
argv[0]= "yes" or "no"
"Local ACL :" up to 1 result from -list_extras
@ -1293,6 +1296,11 @@ int Xorriso_option_as(struct XorrisO *xorriso, int argc, char **argv,
int Xorriso_option_assert_volid(struct XorrisO *xorriso, char *pattern,
char *severity, int flag);
/* Command -assess_indev_features */
/* @since 1.5.6 */
int Xorriso_option_assess_indev_features(struct XorrisO *xorriso, char *mode,
int flag);
/* Command -auto_charset "on"|"off" */
/* @since 0.3.8 */
int Xorriso_option_auto_charset(struct XorrisO *xorriso, char *mode, int flag);

View File

@ -3734,6 +3734,40 @@ File: xorriso.info, Node: Inquiry, Next: Navigate, Prev: DialogCtl, Up: Comm
short summary of drive state and medium content is printed.
As further difference to -toc, this command does not emit FAILURE
events if the desired drive is not acquired.
-assess_indev_features "plain"|"cmd"|"as_mkisofs"|"replay"
Inspect the filesystem on -indev for the presence of Rock Ridge,
Joliet, or ISO 9660:1999, and for traces of other write options
which seem to have been used when the filesystem was created.
Note that this command does not detect and report a possibly
present HFS+ tree.
Mode "cmd" lists xorriso commands which would activate the detected
settings.
Mode "as_mkisofs" lists options of the -as mkisofs emulation, which
would activate those of the detected settings which are not
default.
Mode "replay" performs the commands which get listed by mode "cmd".
Mode "plain" lists after a "Indev feature: " header name-value
pairs as delivered by libisofs function
iso_read_image_feature_named(). See libisofs.h. The other modes
derive their output from this list. I.e. the sequence of commands
from "cmd" follows the sequence of "plain".
Not leading to "cmd" lines are:
"size=" tells the number of 2048 byte blocks of the filesystem.
"eltorito=1" tells that El Torito boot equipment was detected.
"tree_loaded=" tells which tree was loaded by -indev:
0 = ISO 9660 , 1 = Joliet , 2 = ISO 9660:1999
"tree_loaded_text=" tells the same by name: "ISO9660", "Joliet",
"ISO9660:1999"
"rr_loaded=1" tells that Rock Ridge information was loaded with the
tree.
"aaip=1" tells that AAIP information was detected (ACL, xattr, MD5,
...).
"relaxed_vol_atts=1" tells that the volume attributes like -volid
or -preparer_id bear characters outside the restricted character
sets which are specified for them by ECMA-119.
"rrip_1_10_px_ino=1" tells that with Rock Ridge 1.10 a PX entry was
found which looks like from Rock Ridge 1.12.
-mount_cmd drive entity id path
Emit an appropriate command line for mounting the ISO session
indicated by drive, entity and id. The result will be different on
@ -5603,6 +5637,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -application_use sets application use field: SetWrite. (line 272)
* -as emulates mkisofs or cdrecord: Emulation. (line 13)
* -assert_volid rejects undesired images: Loading. (line 105)
* -assess_indev_features shows filesystem features: Inquiry. (line 49)
* -auto_charset learns character set from image: Loading. (line 117)
* -backslash_codes enables backslash conversion: Scripting. (line 71)
* -ban_stdio_write demands real drive: Loading. (line 346)
@ -5729,8 +5764,8 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -mkdir creates ISO directory: Insert. (line 187)
* -modesty_on_drive keep drive buffer hungry: SetWrite. (line 419)
* -mount issues mount command for ISO session: Restore. (line 204)
* -mount_cmd composes mount command line: Inquiry. (line 49)
* -mount_cmd controls mount command: Inquiry. (line 65)
* -mount_cmd composes mount command line: Inquiry. (line 83)
* -mount_cmd controls mount command: Inquiry. (line 99)
* -msg_op perform operations on program messages: Frontend. (line 27)
* -mv renames files in ISO image: Manip. (line 37)
* -mv renames single file in ISO image: Manip. (line 31)
@ -5756,12 +5791,12 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -print prints result text line: Scripting. (line 102)
* -print_info prints message text line: Scripting. (line 104)
* -print_mark prints synchronizing text line: Scripting. (line 106)
* -print_size predicts image size: Inquiry. (line 86)
* -print_size predicts image size: Inquiry. (line 120)
* -prog sets program name: Frontend. (line 176)
* -prog_help prints help text: Frontend. (line 178)
* -prompt prompts for enter key: Scripting. (line 110)
* -publisher sets publisher id: SetWrite. (line 192)
* -pvd_info shows image id strings: Inquiry. (line 108)
* -pvd_info shows image id strings: Inquiry. (line 142)
* -pwd tells working directory in ISO: Navigate. (line 19)
* -pwdx tells working directory on disk: Navigate. (line 21)
* -quoted_not_list sets exclusions: SetInsert. (line 74)
@ -5772,8 +5807,8 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -read_speed set read speed: Loading. (line 11)
* -reassure enables confirmation question: DialogCtl. (line 29)
* -report_about controls verbosity: Exception. (line 53)
* -report_el_torito shows Boot Catalog: Inquiry. (line 116)
* -report_system_area shows MBR, GPT, and alike: Inquiry. (line 138)
* -report_el_torito shows Boot Catalog: Inquiry. (line 150)
* -report_system_area shows MBR, GPT, and alike: Inquiry. (line 172)
* -return_with controls exit value: Exception. (line 38)
* -rm deletes files from ISO image: Manip. (line 20)
* -rmdir deletes ISO directory: Manip. (line 29)
@ -5788,7 +5823,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -scsi_dev_family choose Linux device file type: AqDrive. (line 95)
* -scsi_log reports SCSI commands: Scripting. (line 143)
* -session_log logs written sessions: Scripting. (line 134)
* -session_string composes session info line: Inquiry. (line 74)
* -session_string composes session info line: Inquiry. (line 108)
* -setfacl sets ACL in ISO image: Manip. (line 68)
* -setfacl_list sets ACL in ISO image: Manip. (line 94)
* -setfacl_r sets ACL in ISO image: Manip. (line 92)
@ -5811,7 +5846,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -stdio_sync controls stdio buffer: SetWrite. (line 469)
* -stream_recording controls defect management: SetWrite. (line 389)
* -system_id sets system id: SetWrite. (line 205)
* -tell_media_space reports free space: Inquiry. (line 98)
* -tell_media_space reports free space: Inquiry. (line 132)
* -temp_mem_limit curbs memory consumption: Scripting. (line 96)
* -toc shows list of sessions: Inquiry. (line 27)
* -toc_of shows list of sessions: Inquiry. (line 41)
@ -5925,6 +5960,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* File names, curb length, -file_name_limit: Loading. (line 276)
* File names, if Joliet is loaded: Loading. (line 242)
* File names, if neither Rock Ridge nor Joliet: Loading. (line 229)
* Filesytem features, show, -assess_indev_features: Inquiry. (line 49)
* Filter, apply to file tree, -set_filter_r: Filter. (line 84)
* Filter, apply to file, -set_filter: Filter. (line 58)
* Filter, ban registration, -close_filter_list: Filter. (line 50)
@ -5966,9 +6002,9 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Image, set volume id, -volid: SetWrite. (line 168)
* Image, set volume set id, -volset_id: SetWrite. (line 188)
* Image, set volume timestamp, -volume_date: SetWrite. (line 211)
* Image, show Boot Catalog: Inquiry. (line 116)
* Image, show id strings, -pvd_info: Inquiry. (line 108)
* Image, show MBR, GPT, and alike, -pvd_info: Inquiry. (line 138)
* 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, _definition: Model. (line 9)
* Input Character Set, _definition: Charset. (line 25)
* Insert, enable overwriting, -overwrite: SetInsert. (line 139)
@ -6103,11 +6139,11 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
(line 61)
* Rock Ridge, _definition: Extras. (line 6)
* Session, altered start address, -displacement: Loading. (line 78)
* Session, info string, -session_string: Inquiry. (line 74)
* Session, info string, -session_string: Inquiry. (line 108)
* Session, issue mount command, -mount: Restore. (line 204)
* Session, log when written, -session_log: Scripting. (line 134)
* Session, mount command line, -mount_cmd: Inquiry. (line 49)
* Session, mount parameters, -mount_opts: Inquiry. (line 65)
* Session, mount command line, -mount_cmd: Inquiry. (line 83)
* Session, mount parameters, -mount_opts: Inquiry. (line 99)
* Session, select as input, -load: Loading. (line 54)
* Session, _definition: Model. (line 6)
* Sorting order, for -x, -list_arg_sorting: ArgSort. (line 26)
@ -6141,12 +6177,12 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Write, enable HFS+, -hfsplus: SetWrite. (line 14)
* Write, enable Joliet, -joliet: SetWrite. (line 10)
* Write, fifo size, -fs: SetWrite. (line 479)
* Write, free space, -tell_media_space: Inquiry. (line 98)
* Write, free space, -tell_media_space: Inquiry. (line 132)
* Write, log problematic disk files, -errfile_log: Scripting. (line 116)
* Write, log written sessions, -session_log: Scripting. (line 134)
* Write, padding image, -padding: SetWrite. (line 507)
* Write, pending ISO image, -commit: Writing. (line 27)
* Write, predict image size, -print_size: Inquiry. (line 86)
* Write, predict image size, -print_size: Inquiry. (line 120)
* Write, set speed, -speed: SetWrite. (line 371)
* Write, simulation, -dummy: SetWrite. (line 476)
* Write, TAO or SAO/DAO, -write_type: SetWrite. (line 500)
@ -6187,35 +6223,35 @@ Node: Charset189084
Node: Exception192413
Node: DialogCtl198542
Node: Inquiry201144
Node: Navigate210026
Node: Verify218733
Node: Restore229882
Node: Emulation242090
Node: Scripting252546
Node: Frontend260329
Node: Examples269955
Node: ExDevices271133
Node: ExCreate271794
Node: ExDialog273094
Node: ExGrowing274365
Node: ExModifying275174
Node: ExBootable275684
Node: ExCharset276239
Node: ExPseudo277135
Node: ExCdrecord278062
Node: ExMkisofs278382
Node: ExGrowisofs280279
Node: ExException281432
Node: ExTime281890
Node: ExIncBackup282348
Node: ExRestore286374
Node: ExRecovery287320
Node: Files287892
Node: Environ289226
Node: Seealso289974
Node: Bugreport290691
Node: Legal291282
Node: CommandIdx292294
Node: ConceptIdx310119
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

End Tag Table

View File

@ -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, Jun 02, 2022"
@c man .TH XORRISO 1 "Version 1.5.5, Sep 18, 2022"
@c man .\" Please adjust this date whenever revising the manpage.
@c man .\"
@c man .\" Some roff macros, for reference:
@ -5082,6 +5082,50 @@ summary of drive state and medium content is printed.
As further difference to -toc, this command does not emit FAILURE events
if the desired drive is not acquired.
@c man .TP
@item -assess_indev_features "plain"|"cmd"|"as_mkisofs"|"replay"
@kindex -assess_indev_features shows filesystem features
@cindex Filesytem features, show, -assess_indev_features
Inspect the filesystem on -indev for the presence of Rock Ridge, Joliet, or
ISO 9660:1999, and for traces of other write options which seem to have been
used when the filesystem was created.
@*
Note that this command does not detect and report a possibly present HFS+ tree.
@*
Mode "cmd" lists xorriso commands which would activate the detected settings.
@*
Mode "as_mkisofs" lists options of the -as mkisofs emulation, which would
activate those of the detected settings which are not default.
@*
Mode "replay" performs the commands which get listed by mode "cmd".
@*
Mode "plain" lists after a "Indev feature: " header name-value pairs as
delivered by libisofs function iso_read_image_feature_named(). See libisofs.h.
The other modes derive their output from this list. I.e. the sequence of
commands from "cmd" follows the sequence of "plain".
@*
Not leading to "cmd" lines are:
@*
"size=" tells the number of 2048 byte blocks of the filesystem.
@*
"eltorito=1" tells that El Torito boot equipment was detected.
@*
"tree_loaded=" tells which tree was loaded by -indev:
@*
0 = ISO 9660 , 1 = Joliet , 2 = ISO 9660:1999
@*
"tree_loaded_text=" tells the same by name: "ISO9660", "Joliet", "ISO9660:1999"
@*
"rr_loaded=1" tells that Rock Ridge information was loaded with the tree.
@*
"aaip=1" tells that AAIP information was detected (ACL, xattr, MD5, ...).
@*
"relaxed_vol_atts=1" tells that the volume attributes like -volid or
-preparer_id bear characters outside the restricted character sets which are
specified for them by ECMA-119.
@*
"rrip_1_10_px_ino=1" tells that with Rock Ridge 1.10 a PX entry was found which
looks like from Rock Ridge 1.12.
@c man .TP
@item -mount_cmd drive entity id path
@kindex -mount_cmd composes mount command line
@cindex Session, mount command line, -mount_cmd

View File

@ -1 +1 @@
#define Xorriso_timestamP "2022.06.13.205546"
#define Xorriso_timestamP "2022.09.20.082738"

View File

@ -4,7 +4,7 @@
a command line oriented batch and dialog tool which creates, loads,
manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2021 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2022 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -676,6 +676,9 @@ int Xorriso_set_libisofs_now(struct XorrisO *xorriso, int flag);
int Xorriso_obtain_indev_readsize(struct XorrisO *xorriso, uint32_t *blocks,
int flag);
int Xorriso_assess_written_features(struct XorrisO *xorriso, char *mode,
int flag);
/* Frontend to isoburn_conv_name_chars() */
int Xorriso_conv_name_chars(struct XorrisO *xorriso, char *name,
char **result, size_t *result_len,