From b2ae46a4cff413be5f9d95e0fe676394dabc6ddf Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Sun, 8 Sep 2024 12:22:27 +0200 Subject: [PATCH] New -lfa_flags mode "restore_single" --- xorriso/base_obj.c | 4 +- xorriso/opts_i_o.c | 10 ++- xorriso/read_run.c | 81 +++++++++++++++++--- xorriso/text_io.c | 7 +- xorriso/xorriso.1 | 13 +++- xorriso/xorriso.info | 144 +++++++++++++++++++----------------- xorriso/xorriso.texi | 13 +++- xorriso/xorriso_private.h | 4 +- xorriso/xorriso_timestamp.h | 2 +- 9 files changed, 188 insertions(+), 90 deletions(-) diff --git a/xorriso/base_obj.c b/xorriso/base_obj.c index eeb958da..912b197c 100644 --- a/xorriso/base_obj.c +++ b/xorriso/base_obj.c @@ -147,8 +147,8 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag) m->do_iso1999= 0; m->ecma119_map= 1; m->joliet_map= 1; - /* off:read:restore:restore_su_auto:restore_only_known */ - m->lfa_flags_default= 2 | (11 << 11); + /* off:read:restore:restore_su_auto:restore_only_known:restore_single */ + m->lfa_flags_default= 2 | (11 << 11) | (1 << 16); if(geteuid() != 0) { /* do not restore known superuser lfa_flags */ m->lfa_flags_default|= (1 << 13); diff --git a/xorriso/opts_i_o.c b/xorriso/opts_i_o.c index 5d9e996d..92f5ca10 100644 --- a/xorriso/opts_i_o.c +++ b/xorriso/opts_i_o.c @@ -217,7 +217,7 @@ int Xorriso_option_lfa_flags(struct XorrisO *xorriso, char *mode, int flag) } } } else if(l >= 14 && strncmp(cpt, "restore_error=", 14) == 0) { - Xorriso__to_upper(cpt + 14, severity, (int) (int) sizeof(severity), 0); + Xorriso__to_upper(cpt + 14, severity, (int) sizeof(severity), 0); if(strcmp(severity, "SILENT") != 0) { ret= Xorriso__text_to_sev(severity, &sev, 0); if(ret<=0) { @@ -239,6 +239,12 @@ int Xorriso_option_lfa_flags(struct XorrisO *xorriso, char *mode, int flag) Xorriso__to_lower(severity, xorriso->lfa_restore_err_sev, sizeof(xorriso->lfa_restore_err_sev), 0); + } else if(l >= 14 && strncmp(cpt, "restore_single", 14) == 0) { + xorriso->lfa_flags_setting|= 1 << 16; + + } else if(l >= 14 && strncmp(cpt, "no_restore_single", 14) == 0) { + xorriso->lfa_flags_setting&= ~(1 << 16); + } else if(l == 7 && strncmp(cpt, "default", l) == 0) { xorriso->lfa_flags_setting= xorriso->lfa_flags_default; xorriso->lfa_restore_mask= ~((uint64_t) 0); @@ -258,7 +264,7 @@ int Xorriso_option_lfa_flags(struct XorrisO *xorriso, char *mode, int flag) } xorriso->do_aaip&= ~(31 << 11); if(xorriso->lfa_flags_setting & 1) - xorriso->do_aaip|= xorriso->lfa_flags_setting & (31 << 11); + xorriso->do_aaip|= xorriso->lfa_flags_setting & (63 << 11); ret= Xorriso_set_ignore_aclea(xorriso, 0); if(ret <= 0) goto ex; diff --git a/xorriso/read_run.c b/xorriso/read_run.c index 6fdc70c4..33678770 100644 --- a/xorriso/read_run.c +++ b/xorriso/read_run.c @@ -303,11 +303,16 @@ ex:; } +/* + @flag bit0= do not report error in case of error worth of single flag try + @return 0=failure, 1=ok, 2=pardoned, + 3=pardoned error worth of single flag try +*/ int Xorriso_report_chattr_outcome(struct XorrisO *xorriso, char *disk_path, uint64_t lfa_flags, uint64_t lfa_mask, int iso_ret, int os_errno, int flag) { - int ret, eps_ret, sev; + int ret, eps_ret, sev, lfa_error= 0; char msg[101], *lfa_text= NULL, severity[20]; if(iso_ret == 1) @@ -323,11 +328,15 @@ int Xorriso_report_chattr_outcome(struct XorrisO *xorriso, char *disk_path, if(lfa_text == NULL) lfa_text= strdup("-unknown-attributes-"); if(iso_ret < 0) { + if(iso_ret == (int) ISO_LFA_NO_SET_LOCAL) { + lfa_error= 1; + if(flag & 1) + {ret= 3; goto ex;} + } strcpy(msg, "Could not set chattr '"); if(lfa_text != NULL) strcat(msg, lfa_text); strcat(msg, "'"); - /* Adjust severity to event_pt. Number 0x7f000000 comes from libisofs.h, iso_error_get_severity */ Xorriso__text_to_sev(severity, &sev, 0); @@ -355,7 +364,7 @@ ex:; if(ret == 0) { eps_ret= Xorriso_eval_problem_status(xorriso, 0, 1); if(eps_ret >= 0) - ret= 2; + ret= 2 + !!lfa_error; } if(lfa_text != NULL) free(lfa_text); @@ -363,6 +372,58 @@ ex:; } +/* + @param flag bit0= try single attribute flags if the whole change_mask fails + possibly because of inappropriate attributes + @return 0=failure + 1= ok + 2= pardoned + 3= pardoned error worth of single flag try + 4= with bit0: partial success +*/ +int Xorriso_local_set_lfa_flags(struct XorrisO *xorriso, char *disk_path, + uint64_t lfa_flags, int max_bit, + uint64_t change_mask, int *os_errno, int flag) +{ + int ret, partial_success= 0, os_errno_mem, i, count; + uint64_t single_mask, single_lfa; + + ret= iso_local_set_lfa_flags(disk_path, lfa_flags, max_bit, change_mask, + os_errno, 4); + ret= Xorriso_report_chattr_outcome(xorriso, disk_path, lfa_flags, change_mask, + ret, *os_errno, flag & 1); + if(ret != 3 || !(flag & 1)) + return(ret); + + /* Try with single flag calls */ + count= 0; + for(i= 0; i <= max_bit && i < 64; i++) + if(change_mask & (((uint64_t) 1) << i)) + count++; + if(count < 2) + return(ret); /* was already a single flag call */ + + os_errno_mem= *os_errno; + for(i= 0; i <= max_bit && i < 64; i++) { + single_mask= ((uint64_t) 1) << i; + if(!(single_mask & change_mask)) + continue; + single_lfa= lfa_flags & single_mask; + *os_errno= 0; + ret= iso_local_set_lfa_flags(disk_path, single_lfa, max_bit, single_mask, + os_errno, 4); + ret= Xorriso_report_chattr_outcome(xorriso, disk_path, single_lfa, + single_mask, ret, *os_errno, 0); + if(ret <= 0) + return(ret); + if(ret == 1) + partial_success= 1; + } + *os_errno= os_errno_mem; + return(3 + !!partial_success); +} + + uint64_t Xorriso__lfa_bits(char *lfa_text) { int ret; @@ -459,10 +520,9 @@ int Xorriso_early_chattr_CF(struct XorrisO *xorriso, IsoNode *node, set_mask&= xorriso_mask; if(set_mask == 0) return(4); - ret= iso_local_set_lfa_flags(disk_path, lfa_flags, max_bit, set_mask, - os_errno, 4); - ret= Xorriso_report_chattr_outcome(xorriso, disk_path, lfa_flags, set_mask, - ret, *os_errno, 0); + ret= Xorriso_local_set_lfa_flags(xorriso, disk_path, lfa_flags, max_bit, + set_mask, os_errno, + !!(xorriso->do_aaip & (1 << 16))); if(ret <= 0) return(ret); return(1); @@ -668,10 +728,9 @@ cannot_set_perm:; if(xorriso->do_aaip & (1 << 12)) { if(mask != 0) { - ret= iso_local_set_lfa_flags(disk_path, lfa_flags, max_bit, mask, - &os_errno, 4); - ret= Xorriso_report_chattr_outcome(xorriso, disk_path, lfa_flags, - mask, ret, os_errno, 0); + ret= Xorriso_local_set_lfa_flags(xorriso, disk_path, lfa_flags, max_bit, + mask, &os_errno, + !!(xorriso->do_aaip & (1 << 16))); if(ret <= 0) goto ex; } diff --git a/xorriso/text_io.c b/xorriso/text_io.c index 4f961899..9df4d7f1 100644 --- a/xorriso/text_io.c +++ b/xorriso/text_io.c @@ -3829,7 +3829,12 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag) if(!(is_default && no_defaults)) Xorriso_status_result(xorriso, filter, fp, flag & 2); - sprintf(line, "-lfa_flags restore_error=%s\n", xorriso->lfa_restore_err_sev); + sprintf(line, "-lfa_flags restore_error=%s", xorriso->lfa_restore_err_sev); + if(xorriso->lfa_flags_setting & (1 << 16)) + strcat(line, ":restore_single"); + else + strcat(line, ":no_restore_single"); + strcat(line, "\n"); if(!(is_default && no_defaults)) Xorriso_status_result(xorriso, filter, fp, flag & 2); diff --git a/xorriso/xorriso.1 b/xorriso/xorriso.1 index d6359279..bcd8a956 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.7, Sep 05, 2024" +.TH XORRISO 1 "Version 1.5.7, Sep 07, 2024" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -1128,11 +1128,20 @@ considerations caused by restore attemps of attribute flags. Else the error message is issued with the given severity. Then it depends on the setting of command \-abort_on whether restoring goes on or gets aborted. .br +Mode "restore_single" tries to set the attribute flags of a file one\-by\-one +if the attempt fails to set them all at once. This happens only if the +"restore_error=" severity and the setting of command \-abort_on do not +demand to abort the program run. +Note that some flags in some situations get ignored silently by some kernels. +.br +Mode "no_restore_single" disables this attempt to get at least some of the +attribute flags into effect. +.br Mode "default" reinstates the default settings: .br \-lfa_flags off:read:restore:restore_su_auto:restore_only_known .br - \-lfa_flags restore_mask=:restore_error=sorry + \-lfa_flags restore_mask=:restore_error=sorry:restore_single .br Use "default:on" to get default settings with enabled processing. .TP diff --git a/xorriso/xorriso.info b/xorriso/xorriso.info index 8832b294..7fc9377a 100644 --- a/xorriso/xorriso.info +++ b/xorriso/xorriso.info @@ -1010,9 +1010,17 @@ activate them only after image loading. flags. Else the error message is issued with the given severity. Then it depends on the setting of command -abort_on whether restoring goes on or gets aborted. + Mode "restore_single" tries to set the attribute flags of a file + one-by-one if the attempt fails to set them all at once. This + happens only if the "restore_error=" severity and the setting of + command -abort_on do not demand to abort the program run. Note + that some flags in some situations get ignored silently by some + kernels. + Mode "no_restore_single" disables this attempt to get at least some + of the attribute flags into effect. Mode "default" reinstates the default settings: -lfa_flags off:read:restore:restore_su_auto:restore_only_known - -lfa_flags restore_mask=:restore_error=sorry + -lfa_flags restore_mask=:restore_error=sorry:restore_single Use "default:on" to get default settings with enabled processing. -md5 "on"|"all"|"off"|"load_check_off" Enable or disable processing of MD5 checksums for the overall @@ -6025,11 +6033,11 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -assess_indev_features shows filesystem features: Inquiry. (line 61) * -auto_charset learns character set from image: Loading. (line 141) * -backslash_codes enables backslash conversion: Scripting. (line 73) -* -ban_stdio_write demands real drive: Loading. (line 446) +* -ban_stdio_write demands real drive: Loading. (line 454) * -biblio_file sets biblio file name: SetWrite. (line 277) * -blank erases media: Writing. (line 57) * -boot_image controls bootability: Bootable. (line 75) -* -calm_drive reduces drive activity: Loading. (line 436) +* -calm_drive reduces drive activity: Loading. (line 444) * -cd sets working directory in ISO: Navigate. (line 7) * -cdx sets working directory on disk: Navigate. (line 15) * -changes_pending overrides change status: Writing. (line 12) @@ -6065,12 +6073,12 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -cp_rx copies file trees to disk: Restore. (line 131) * -cp_rx copies file trees to disk <1>: Restore. (line 139) * -cut_out inserts piece of data file or device: Insert. (line 139) -* -data_cache_size adjusts read cache size: Loading. (line 462) +* -data_cache_size adjusts read cache size: Loading. (line 470) * -dev acquires one drive for input and output: AqDrive. (line 12) * -devices gets list of drives: Inquiry. (line 7) * -device_links gets list of drives: Inquiry. (line 17) * -dialog enables dialog mode: DialogCtl. (line 7) -* -disk_dev_ino fast incremental backup: Loading. (line 356) +* -disk_dev_ino fast incremental backup: Loading. (line 364) * -disk_pattern controls pattern expansion: Insert. (line 34) * -displacement compensate altered image start address: Loading. (line 102) @@ -6082,8 +6090,8 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -dusx show directory size on disk: Navigate. (line 96) * -dux show directory size on disk: Navigate. (line 92) * -dvd_obs set write block size and end alignment: SetWrite. (line 421) -* -early_stdio_test classifies stdio drives: Loading. (line 450) -* -ecma119_map names w/o Rock Ridge, Joliet: Loading. (line 329) +* -early_stdio_test classifies stdio drives: Loading. (line 458) +* -ecma119_map names w/o Rock Ridge, Joliet: Loading. (line 337) * -eject ejects drive tray: Writing. (line 50) * -end writes pending session and ends program: Scripting. (line 153) * -errfile_log logs problematic disk files: Scripting. (line 118) @@ -6096,13 +6104,13 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -extract_cut copies file piece to disk: Restore. (line 108) * -extract_l copies files to disk: Restore. (line 104) * -extract_single copies file to disk: Restore. (line 101) -* -file_name_limit curbs length of file names: Loading. (line 376) +* -file_name_limit curbs length of file names: Loading. (line 384) * -file_size_limit limits data file size: SetInsert. (line 7) * -find traverses and alters ISO tree: CmdFind. (line 7) * -findx traverses disk tree: Navigate. (line 99) * -follow softlinks and mount points: SetInsert. (line 77) * -format formats media: Writing. (line 87) -* -for_backup acl,xattr,hardlinks,md5,lfa_flags: Loading. (line 304) +* -for_backup acl,xattr,hardlinks,md5,lfa_flags: Loading. (line 312) * -fs sets size of fifo: SetWrite. (line 500) * -genisoimage_completion completion of genisoimage options: Emulation. (line 166) @@ -6120,11 +6128,11 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -indev acquires a drive for input: AqDrive. (line 23) * -in_charset sets input character set: Loading. (line 136) * -iso_nowtime fixed "now" time for ISO 9660 objects: Loading. - (line 350) + (line 358) * -iso_rr_pattern controls pattern expansion: Manip. (line 10) * -jigdo clears JTE or or adds parameter to JTE: Jigdo. (line 37) * -joliet enables production of Joliet tree: SetWrite. (line 10) -* -joliet_map Joliet names: Loading. (line 342) +* -joliet_map Joliet names: Loading. (line 350) * -launch_frontend starts frontend program at pipes: Frontend. (line 141) * -lfa_flags controls handling of Linux file attributes: Loading. @@ -6152,7 +6160,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -map_l inserts paths from disk file: Insert. (line 96) * -map_single inserts path: Insert. (line 93) * -mark sets synchronizing message: Frontend. (line 23) -* -md5 controls handling of MD5 sums: Loading. (line 273) +* -md5 controls handling of MD5 sums: Loading. (line 281) * -mkdir creates ISO directory: Insert. (line 188) * -modesty_on_drive keep drive buffer hungry: SetWrite. (line 440) * -mount issues mount command for ISO session: Restore. (line 204) @@ -6209,7 +6217,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top (line 57) * -rollback discards pending changes: Writing. (line 9) * -rollback_end ends program without writing: Scripting. (line 156) -* -rom_toc_scan searches for sessions: Loading. (line 408) +* -rom_toc_scan searches for sessions: Loading. (line 416) * -rr_reloc_dir sets name of relocation directory: SetWrite. (line 171) * -scdbackup_tag enables scdbackup checksum tag: Emulation. (line 197) * -scsi_dev_family choose Linux device file type: AqDrive. (line 95) @@ -6287,8 +6295,8 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Appended partitions, MBR: Bootable. (line 480) * Automatic execution order, of arguments, -x: ArgSort. (line 16) * Backslash Interpretation, _definition: Processing. (line 57) -* Backup, enable fast incremental, -disk_dev_ino: Loading. (line 356) -* Backup, enable features, -for_backup: Loading. (line 304) +* Backup, enable fast incremental, -disk_dev_ino: Loading. (line 364) +* Backup, enable features, -for_backup: Loading. (line 312) * Backup, scdbackup checksum tag, -scdbackup: Emulation. (line 197) * Blank media, _definition: Media. (line 34) * Blank, format, Immed bit, -use_immed_bit: SetWrite. (line 478) @@ -6327,8 +6335,8 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Directory, delete, -rmdir: Manip. (line 29) * disk_path, _definition: Insert. (line 6) * Drive, accessability, -drive_class: AqDrive. (line 43) -* Drive, classify stdio, -early_stdio_test: Loading. (line 450) -* Drive, demand real MMC, -ban_stdio_write: Loading. (line 446) +* Drive, classify stdio, -early_stdio_test: Loading. (line 458) +* Drive, demand real MMC, -ban_stdio_write: Loading. (line 454) * Drive, eject tray, -eject: Writing. (line 50) * Drive, for input and output, -dev: AqDrive. (line 12) * Drive, for input, -indev: AqDrive. (line 23) @@ -6336,7 +6344,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Drive, get drive list, -devices: Inquiry. (line 7) * Drive, get drive list, -device_links: Inquiry. (line 17) * Drive, list supported media, -list_profiles: Writing. (line 163) -* Drive, reduce activity, -calm_drive: Loading. (line 436) +* Drive, reduce activity, -calm_drive: Loading. (line 444) * Drive, report SCSI commands, -scsi_log: Scripting. (line 145) * Drive, write and eject, -commit_eject: Writing. (line 53) * Drive, _definition: Drives. (line 6) @@ -6354,9 +6362,9 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Examples: Examples. (line 6) * extattr, _definition: Extras. (line 66) * File content, copy, -concat: Restore. (line 148) -* File names, curb length, -file_name_limit: Loading. (line 376) -* File names, if Joliet is loaded: Loading. (line 342) -* File names, if neither Rock Ridge nor Joliet: Loading. (line 329) +* File names, curb length, -file_name_limit: Loading. (line 384) +* File names, if Joliet is loaded: Loading. (line 350) +* File names, if neither Rock Ridge nor Joliet: Loading. (line 337) * Filesytem features, show, -assess_indev_features: Inquiry. (line 61) * Filter, apply to file tree, -set_filter_r: Filter. (line 84) * Filter, apply to file, -set_filter: Filter. (line 58) @@ -6382,7 +6390,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * HFS+ serial number: Bootable. (line 455) * hidden, set in ISO image, -hide: Manip. (line 211) * HP-PA boot sector, production: Bootable. (line 430) -* Image reading, cache size, -data_cache_size: Loading. (line 462) +* Image reading, cache size, -data_cache_size: Loading. (line 470) * Image, demand volume ID, -assert_volid: Loading. (line 129) * Image, discard pending changes, -rollback: Writing. (line 9) * Image, filesystem to load, -read_fs: Loading. (line 120) @@ -6434,7 +6442,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Jigdo Template Extraction, -jigdo: Jigdo. (line 37) * Jigdo Template Extraction, _definition: Jigdo. (line 6) * LBA, _definition: Drives. (line 17) -* libisofs, fixed "now" time: Loading. (line 350) +* libisofs, fixed "now" time: Loading. (line 358) * Linux device type, -scsi_dev_family: AqDrive. (line 95) * Linux file attributes, control handling, -lfa_flags: Loading. (line 207) @@ -6448,7 +6456,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * MBR bootable/active flag, enforce: Bootable. (line 388) * MBR, set, -boot_image system_area=: Bootable. (line 227) * MBR, _definition: Extras. (line 27) -* MD5, control handling, -md5: Loading. (line 273) +* MD5, control handling, -md5: Loading. (line 281) * Media, erase, -blank: Writing. (line 57) * Media, format, -format: Writing. (line 87) * Media, list formats, -list_formats: Writing. (line 128) @@ -6557,7 +6565,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * System area, _definition: Bootable. (line 227) * Table-of-content, choose info to show, -toc_info_type: Inquiry. (line 49) -* Table-of-content, search sessions, -rom_toc_scan: Loading. (line 408) +* Table-of-content, search sessions, -rom_toc_scan: Loading. (line 416) * Table-of-content, show parts of, -toc_of: Inquiry. (line 41) * Table-of-content, show, -toc: Inquiry. (line 27) * Timestamps, set in ISO image, -alter_date: Manip. (line 173) @@ -6617,48 +6625,48 @@ Node: Commands26634 Node: ArgSort28311 Node: AqDrive29805 Node: Loading36962 -Node: Insert64975 -Node: SetInsert77170 -Node: Manip87406 -Node: CmdFind99526 -Node: Filter120848 -Node: Writing125470 -Node: SetWrite137964 -Node: Bootable169239 -Node: Jigdo200521 -Node: Charset205524 -Node: Exception208853 -Node: DialogCtl215042 -Node: Inquiry217644 -Node: Navigate230209 -Node: Verify241426 -Node: Restore252575 -Node: Emulation264782 -Node: Scripting276358 -Node: Frontend284252 -Node: Examples293878 -Node: ExDevices295056 -Node: ExCreate295717 -Node: ExDialog297017 -Node: ExGrowing298288 -Node: ExModifying299097 -Node: ExBootable299607 -Node: ExCharset300162 -Node: ExPseudo301058 -Node: ExCdrecord301985 -Node: ExMkisofs302305 -Node: ExGrowisofs304202 -Node: ExException305355 -Node: ExTime305813 -Node: ExIncBackup306271 -Node: ExRestore310297 -Node: ExRecovery311243 -Node: Files311815 -Node: Environ313149 -Node: Seealso313897 -Node: Bugreport314661 -Node: Legal315252 -Node: CommandIdx316264 -Node: ConceptIdx334738 +Node: Insert65464 +Node: SetInsert77659 +Node: Manip87895 +Node: CmdFind100015 +Node: Filter121337 +Node: Writing125959 +Node: SetWrite138453 +Node: Bootable169728 +Node: Jigdo201010 +Node: Charset206013 +Node: Exception209342 +Node: DialogCtl215531 +Node: Inquiry218133 +Node: Navigate230698 +Node: Verify241915 +Node: Restore253064 +Node: Emulation265271 +Node: Scripting276847 +Node: Frontend284741 +Node: Examples294367 +Node: ExDevices295545 +Node: ExCreate296206 +Node: ExDialog297506 +Node: ExGrowing298777 +Node: ExModifying299586 +Node: ExBootable300096 +Node: ExCharset300651 +Node: ExPseudo301547 +Node: ExCdrecord302474 +Node: ExMkisofs302794 +Node: ExGrowisofs304691 +Node: ExException305844 +Node: ExTime306302 +Node: ExIncBackup306760 +Node: ExRestore310786 +Node: ExRecovery311732 +Node: Files312304 +Node: Environ313638 +Node: Seealso314386 +Node: Bugreport315150 +Node: Legal315741 +Node: CommandIdx316753 +Node: ConceptIdx335227  End Tag Table diff --git a/xorriso/xorriso.texi b/xorriso/xorriso.texi index 4904820b..1798a87b 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.7, Sep 05, 2024" +@c man .TH XORRISO 1 "Version 1.5.7, Sep 07, 2024" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -1380,11 +1380,20 @@ considerations caused by restore attemps of attribute flags. Else the error message is issued with the given severity. Then it depends on the setting of command -abort_on whether restoring goes on or gets aborted. @* +Mode "restore_single" tries to set the attribute flags of a file one-by-one +if the attempt fails to set them all at once. This happens only if the +"restore_error=" severity and the setting of command -abort_on do not +demand to abort the program run. +Note that some flags in some situations get ignored silently by some kernels. +@* +Mode "no_restore_single" disables this attempt to get at least some of the +attribute flags into effect. +@* Mode "default" reinstates the default settings: @* -lfa_flags off:read:restore:restore_su_auto:restore_only_known @* - -lfa_flags restore_mask=:restore_error=sorry + -lfa_flags restore_mask=:restore_error=sorry:restore_single @* Use "default:on" to get default settings with enabled processing. @c man .TP diff --git a/xorriso/xorriso_private.h b/xorriso/xorriso_private.h index 351041e2..26ee287f 100644 --- a/xorriso/xorriso_private.h +++ b/xorriso/xorriso_private.h @@ -190,6 +190,8 @@ struct XorrisO { /* the global context of xorriso */ bit15= ignore non-settable lfa_flags when importing files from disk and do not record "isofs.fa" if the other flags are all zero + bit16= try to restore lfa_flags one-by-one if the whole set + fails possibly because of inappropriate attributes */ int lfa_flags_setting; /* Current settings of command -lfa_flags @@ -199,7 +201,7 @@ struct XorrisO { /* the global context of xorriso */ compiled with lfa enabled) bit3= libisofs indeed has lfa enabled (to be set only at program start) - bit11-15= at the end of the command these bits + bit11-16= at the end of the command these bits get put into .do_aaip if bit0 is on. Else the lfa bits of do_aaip will be set to 0. diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 6fd2d92f..4215a49c 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2024.09.05.195024" +#define Xorriso_timestamP "2024.09.08.102135"