From 58fb826c1d06eb7d3de2f949af4cdf01a0efd13a Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Tue, 6 Aug 2024 22:21:41 +0200 Subject: [PATCH] New -find test -has_some_lfa_flags_of --- xorriso/findjob.h | 1 + xorriso/iso_manip.c | 7 ++- xorriso/opts_d_h.c | 10 ++++- xorriso/xorriso.1 | 12 ++++- xorriso/xorriso.info | 87 ++++++++++++++++++++----------------- xorriso/xorriso.texi | 12 ++++- xorriso/xorriso_timestamp.h | 2 +- 7 files changed, 86 insertions(+), 45 deletions(-) diff --git a/xorriso/findjob.h b/xorriso/findjob.h index d99c2472..fe13172c 100644 --- a/xorriso/findjob.h +++ b/xorriso/findjob.h @@ -58,6 +58,7 @@ struct ExprtesT { 27= -size off_t *arg1 int *arg2 (0=test for equal, -1=smaller, 1=larger, -2=smaller_or_equal , 2=larger_or_equal) 28= -has_lfa_flags uint64_t *arg1 (Linux file attribute flag bits) + 29= -has_some_lfa_flags_of uint64_t *arg1 */ int test_type; diff --git a/xorriso/iso_manip.c b/xorriso/iso_manip.c index d494fa99..aa3aba90 100644 --- a/xorriso/iso_manip.c +++ b/xorriso/iso_manip.c @@ -3391,6 +3391,7 @@ return: } break; case 28: /* -has_lfa_flags uint64_t lfa_flags */ + case 29: /* -has_some_lfa_flags_of uint64_t *arg */ lfa_flags= *((uint64_t *) ftest->arg1); ret= Xorriso_get_lfa_flags(xorriso, node, path, &node_flags, &max_bit, 0); if(ret <= 0) { @@ -3399,7 +3400,11 @@ return: value= 0; goto ex; } - value= ((node_flags & lfa_flags) == lfa_flags); + if(ftest->test_type == 28) { + value= ((node_flags & lfa_flags) == lfa_flags); + } else { + value= !!(node_flags & lfa_flags); + } break; default: diff --git a/xorriso/opts_d_h.c b/xorriso/opts_d_h.c index ee5251e5..f74123ce 100644 --- a/xorriso/opts_d_h.c +++ b/xorriso/opts_d_h.c @@ -947,14 +947,17 @@ off_t_overflow:; Findjob_set_aaip_filter(job, 1, 0); } else if(strcmp(argv[i], "-has_no_aaip")==0) { Findjob_set_aaip_filter(job, -1, 0); - } else if(strcmp(argv[i], "-has_lfa_flags")==0) { + } else if(strcmp(argv[i], "-has_lfa_flags") == 0 || + strcmp(argv[i], "-has_some_lfa_flags_of") == 0) { if(i + 1 >= end_idx) goto not_enough_arguments; i++; ret= Xorriso_decode_lfa_flags(xorriso, argv[i], &lfa_flags, 0); if(ret <= 0) goto sorry_ex; - Findjob_set_uint64_filter(job, 28, lfa_flags, 0); + Findjob_set_uint64_filter(job, + 28 + (strcmp(argv[i - 1], "-has_some_lfa_flags_of") == 0), + lfa_flags, 0); } else if(strcmp(argv[i], "-has_filter")==0) { Findjob_set_filter_filter(job, 1, 0); } else if(strcmp(argv[i], "-has_no_filter")==0) { @@ -2231,9 +2234,12 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag) " performs an action on files below the given directory in", " the ISO image. Tests:", " -name pattern, -wholename pattern, -disk_name pattern,", +" -disk_path pattern, -use_pattern on|off,", +" -or_use_pattern on|off, -name_limit_blocker length,", " -type b|c|d|p|f|l|s|e, -pending_data, -hidden,", " -lba_range start count, -damaged, -has_acl, -has_xattr,", " -has_aaip, -has_filter, -has_md5, -has_any_xattr,", +" -has_lfa_flags letters, -has_some_lfa_flags_of letters,", " -has_hfs_crtp, -has_hfs_bless, -bad_outname,", " -name_limit_blocker, -maxdepth, -mindepth, -size,", " -prune, -decision yes|no, -true, -false", diff --git a/xorriso/xorriso.1 b/xorriso/xorriso.1 index 6e365611..8ee0a242 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, Aug 05, 2024" +.TH XORRISO 1 "Version 1.5.7, Aug 06, 2024" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -2249,6 +2249,16 @@ E.g. look for files with both flags 'i' (immutable) and 'd' (no dump) set: .br \-has_lfa_flags di .br +\fB\-has_some_lfa_flags_of\fR flag_letters : +.br +Similar to \-has_lfa_flags but matching files which have Linux file attributes +attached and have at least one of the flags set which correspond to the +characters in the string flag_letters. The flag_letters string "\-" never +matches any file. +E.g. look for files which have 'i' or 'a' or both of them set: +.br + \-has_some_lfa_flags_of ia +.br \fB\-has_any_xattr\fR : Matches files which have any xattr other than ACL. .br diff --git a/xorriso/xorriso.info b/xorriso/xorriso.info index e151c0dc..2ae89249 100644 --- a/xorriso/xorriso.info +++ b/xorriso/xorriso.info @@ -1926,6 +1926,15 @@ File: xorriso.info, Node: CmdFind, Next: Filter, Prev: Manip, Up: Commands E.g. look for files with both flags 'i' (immutable) and 'd' (no dump) set: -has_lfa_flags di + -has_some_lfa_flags_of flag_letters : + + Similar to -has_lfa_flags but matching files which have Linux + file attributes attached and have at least one of the flags + set which correspond to the characters in the string + flag_letters. The flag_letters string "-" never matches any + file. E.g. look for files which have 'i' or 'a' or both of + them set: + -has_some_lfa_flags_of ia -has_any_xattr : Matches files which have any xattr other than ACL. -has_md5 : @@ -6524,44 +6533,44 @@ Node: Insert63843 Node: SetInsert76038 Node: Manip86212 Node: CmdFind97876 -Node: Filter118679 -Node: Writing123301 -Node: SetWrite135795 -Node: Bootable167070 -Node: Jigdo198352 -Node: Charset203355 -Node: Exception206684 -Node: DialogCtl212813 -Node: Inquiry215415 -Node: Navigate227980 -Node: Verify237135 -Node: Restore248284 -Node: Emulation260491 -Node: Scripting270947 -Node: Frontend278841 -Node: Examples288467 -Node: ExDevices289645 -Node: ExCreate290306 -Node: ExDialog291606 -Node: ExGrowing292877 -Node: ExModifying293686 -Node: ExBootable294196 -Node: ExCharset294751 -Node: ExPseudo295647 -Node: ExCdrecord296574 -Node: ExMkisofs296894 -Node: ExGrowisofs298791 -Node: ExException299944 -Node: ExTime300402 -Node: ExIncBackup300860 -Node: ExRestore304886 -Node: ExRecovery305832 -Node: Files306404 -Node: Environ307738 -Node: Seealso308486 -Node: Bugreport309250 -Node: Legal309841 -Node: CommandIdx310853 -Node: ConceptIdx329182 +Node: Filter119126 +Node: Writing123748 +Node: SetWrite136242 +Node: Bootable167517 +Node: Jigdo198799 +Node: Charset203802 +Node: Exception207131 +Node: DialogCtl213260 +Node: Inquiry215862 +Node: Navigate228427 +Node: Verify237582 +Node: Restore248731 +Node: Emulation260938 +Node: Scripting271394 +Node: Frontend279288 +Node: Examples288914 +Node: ExDevices290092 +Node: ExCreate290753 +Node: ExDialog292053 +Node: ExGrowing293324 +Node: ExModifying294133 +Node: ExBootable294643 +Node: ExCharset295198 +Node: ExPseudo296094 +Node: ExCdrecord297021 +Node: ExMkisofs297341 +Node: ExGrowisofs299238 +Node: ExException300391 +Node: ExTime300849 +Node: ExIncBackup301307 +Node: ExRestore305333 +Node: ExRecovery306279 +Node: Files306851 +Node: Environ308185 +Node: Seealso308933 +Node: Bugreport309697 +Node: Legal310288 +Node: CommandIdx311300 +Node: ConceptIdx329629  End Tag Table diff --git a/xorriso/xorriso.texi b/xorriso/xorriso.texi index a8ca6d2e..ba55b191 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, Aug 05, 2024" +@c man .TH XORRISO 1 "Version 1.5.7, Aug 06, 2024" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -2659,6 +2659,16 @@ E.g. look for files with both flags 'i' (immutable) and 'd' (no dump) set: @* -has_lfa_flags di @* +@item -has_some_lfa_flags_of flag_letters : +@* +Similar to -has_lfa_flags but matching files which have Linux file attributes +attached and have at least one of the flags set which correspond to the +characters in the string flag_letters. The flag_letters string "-" never +matches any file. +E.g. look for files which have 'i' or 'a' or both of them set: +@* + -has_some_lfa_flags_of ia +@* @item -has_any_xattr : Matches files which have any xattr other than ACL. @* diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 16859533..990dedc9 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2024.08.06.193329" +#define Xorriso_timestamP "2024.08.06.202116"