"Fossies" - the Fresh Open Source Software Archive

Member "xorriso-1.5.4/xorriso/findjob.h" (30 Jan 2021, 13793 Bytes) of package /linux/misc/xorriso-1.5.4.pl02.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "findjob.h" see the Fossies "Dox" file reference documentation and the last Fossies "Diffs" side-by-side code changes report: 1.4.6_vs_1.4.8.

    1 
    2 /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
    3 
    4    Copyright 2007-2016 Thomas Schmitt, <scdbackup@gmx.net>
    5 
    6    Provided under GPL version 2 or later.
    7 
    8    This file contains declarations of classes FindjoB, ExprnodE, ExprtesT
    9    which perform tree searches in libisofs or in POSIX filesystem.
   10 */
   11 
   12 
   13 #ifndef Xorriso_pvt_findjob_includeD
   14 #define Xorriso_pvt_findjob_includeD yes
   15 
   16 
   17 #define Xorriso_findjob_on_expR yes
   18 
   19 #ifdef Xorriso_findjob_on_expR
   20 
   21 /*
   22    A single Testnode.
   23 */
   24 struct ExprtesT {
   25 
   26  struct FindjoB *boss;
   27 
   28  int invert;  /* 0=normal  1=invert result */ 
   29 
   30  /*
   31    0= -false (with invert : -true)
   32    1= -name char *arg1 (regex_t in *arg2)
   33    2= -type char *arg1
   34    3= -damaged
   35    4= -lba_range int *arg1 int *arg2
   36    5= -has_acl
   37    6= -has_xattr
   38    7= -has_aaip
   39    8= -has_filter
   40    9= -wanted_node IsoNode *arg1 (for internal use, arg1 not allocated)
   41   10= -pending_data
   42   11= -decision char *arg1 ("yes", "no")
   43   12= -prune
   44   13= -wholename char *arg1 (regex_t in *arg2)
   45   14= -has_any_xattr
   46   15= -has_md5
   47   16= -disk_name char *arg1 (regex_t in *arg2)
   48   17= -hidden int *arg1 (bit0=iso_rr, bit1=joliet)
   49   18= -has_hfs_crtp char *creator char *type 
   50   19= -has_hfs_bless int bless_index
   51   20= -disk_path char *arg1
   52   21= -bad_outname int namespace
   53   22= -use_pattern char *arg1 ("on" [or "ls"], "off")
   54   23= -or_use_pattern char *arg1 ("on" [or "ls"], "off")
   55   24= -name_limit_blocker int *arg1
   56   25= -maxdepth int *arg1
   57   26= -mindepth int *arg1
   58  */
   59  int test_type;
   60 
   61  void *arg1;
   62  void *arg2;
   63 
   64 };
   65 
   66 
   67 /* 
   68    A computational node.
   69    A tree of these nodes forms the expression.
   70    Sequences of AND/OR operations form branches, brackets spawn new branches,
   71    NOT inverts node's test resp. subtree result.
   72 */
   73 struct ExprnodE {
   74 
   75  struct ExprnodE *up;
   76 
   77  char origin[8];
   78 
   79   /* Operators */
   80  int invert;  /* 0=normal  1=invert own result (subtree or test, but not op) */ 
   81 
   82  int assoc; /*
   83                 0= left : compute own value, combine with left value,
   84                           compute right value, combine with current value
   85                 1= right: compute own value, compute right value, 
   86                           combine own and right, combine with left value
   87              */
   88 
   89  int use_shortcuts; /* 0= evaluate all tests of -and and -or,
   90                        1= evaluate only until the combined result is known
   91                      */
   92 
   93  struct ExprnodE *left;
   94  int left_op; /* 0=OR , 1=AND */
   95   
   96  struct ExprnodE *right;
   97  int right_op; /* see left_op */
   98 
   99  /* Brackets : a pointer to the first node in a subchain */ 
  100  struct ExprnodE *sub; 
  101 
  102  int is_if_then_else;
  103  struct ExprnodE *true_branch;
  104  struct ExprnodE *false_branch;
  105 
  106  /* elementary test : if sub!=NULL , test is ignored */
  107  struct ExprtesT *test;
  108 
  109  /* Result */
  110  int own_value;
  111  int composed_value;
  112 
  113 };
  114 
  115 
  116 struct FindjoB {
  117 
  118  char *start_path;
  119 
  120  struct ExprnodE *test_tree;
  121 
  122  struct ExprnodE *cursor;
  123  int invert;  /* 0=normal  1=set invert-property for next new test node */
  124  int use_shortcuts;
  125 
  126  /* 0= echo
  127     1= rm (also rmdir)
  128     2= rm_r
  129 >>> 3= mv target
  130     4= chown user
  131     5= chgrp group
  132     6= chmod mode_and mode_or
  133     7= alter_date type date
  134     8= lsdl
  135     9= chown_r user
  136    10= chgrp_r group
  137    11= chmod_r mode_and mode_or
  138    12= alter_date_r type date
  139    13= find
  140    14= compare disk_equivalent_of_start_path
  141    15= in_iso iso_rr_equivalent_of_start_path
  142    16= not_in_iso iso_rr_equiv
  143    17= update disk_equiv
  144    18= add_missing iso_rr_equiv
  145    19= empty_iso_dir iso_rr_equiv
  146    20= is_full_in_iso iso_rr_equiv
  147    21= report_damage
  148    22= report_lba
  149    23= internal: memorize path of last matching node in found_path
  150    24= getfacl
  151    25= setfacl access_acl default_acl
  152    26= getfattr
  153    27= setfattr
  154    28= set_filter name
  155    29= show_stream
  156    30= internal: count by xorriso->node_counter
  157    31= internal: register in xorriso->node_array
  158    32= internal: widen_hardlinks disk_equiv: update nodes marked in di_do_widen
  159    33= get_any_xattr
  160    34= get_md5
  161    35= check_md5
  162    36= make_md5
  163    37= mkisofs_r
  164    38= sort_weight number
  165    39= hide on|iso_rr|joliet|off
  166    40= estimate_size
  167    41= update_merge disk_equiv
  168    42= rm_merge
  169    43= clear_merge
  170    44= list_extattr
  171    45= set_hfs_crtp creator type
  172    46= get_hfs_crtp
  173    47= set_hfs_bless blessing
  174    48= get_hfs_bless
  175    49= internal: update creator, type, and blessings from persistent isofs.*
  176    50= print_outname namespace
  177    51= report_sections
  178    52= show_stream_id
  179    53= internal: show_hfs_cmd , controlled by xorriso->show_hfs_cmd*
  180    54= internal: truncate_names
  181    55= internal: unique_trunc_test length
  182                  test for not uniquely truncatable names,
  183                  result delivered in XorrisO.find_unique_trunc_result
  184    56= like 54 but tolerating existing truncated names
  185    57= like 55 but tolerating existing truncated names
  186    58= internal: last_data_file_block
  187    59= set_to_mtime
  188  */
  189  int action;
  190  int prune;
  191  int use_pattern;
  192 
  193  /* action specific parameters */
  194  char *target;
  195  char *text_2;
  196  uid_t user;
  197  gid_t group;
  198  mode_t mode_and, mode_or;
  199  int type; /* see Xorriso_set_time flag,
  200               also used as weight and truncate_length */
  201  time_t date;
  202  char *found_path;
  203  off_t estim_upper_size;
  204  off_t estim_lower_size;
  205  struct FindjoB *subjob;
  206  uint32_t last_data_file_block;
  207 
  208  /* Errors */
  209  char errmsg[4096];
  210  int errn; /*
  211              >0 = UNIX errno
  212              -1 = close_bracket: no bracket open 
  213              -2 = binary operator or closing bracket expected
  214              -3 = unexpected binary operator or closing bracket
  215              -4 = unsupported command
  216              -5 = -then -elseif -else -endif without -if or at wrong place
  217            */
  218 
  219  /* Counts the test matches */
  220  unsigned long match_count;
  221 
  222  /* Current depth of tree walking. Relative to start path. */
  223  int depth;
  224 
  225 };
  226 
  227 
  228 int Exprnode_destroy(struct ExprnodE **fnode, int flag);
  229 
  230 int Exprnode_tree_value(struct XorrisO *xorriso, struct ExprnodE *fnode,
  231                         int left_value, void *node, char *name, char *path,
  232                         struct stat *boss_stbuf, struct stat *stbuf, int flag);
  233 
  234 
  235 int Findjob_new(struct FindjoB **o, char *start_path, int flag);
  236 
  237 int Findjob_destroy(struct FindjoB **o, int flag);
  238 
  239 int Findjob_set_start_path(struct FindjoB *o, char *start_path, int flag);
  240 
  241 int Findjob_get_start_path(struct FindjoB *o, char **start_path, int flag);
  242 
  243 int Findjob_set_commit_filter_2(struct FindjoB *o, int flag);
  244 
  245 int Findjob_set_num_filter(struct FindjoB *o, int test_type,
  246                            int num1, int num2, int flag);
  247 
  248 int Findjob_set_lba_range(struct FindjoB *o, int start_lba, int count, 
  249                           int flag);
  250 
  251 int Findjob_set_wanted_node(struct FindjoB *o, void *wanted_node, int flag);
  252 
  253 /* @param value -1= only undamaged files, 1= only damaged files
  254 */
  255 int Findjob_set_damage_filter(struct FindjoB *o, int value, int flag);
  256 
  257 int Findjob_set_test_hidden(struct FindjoB *o, int mode, int flag);
  258 
  259 int Findjob_set_crtp_filter(struct FindjoB *o, char *creator, char *hfs_type,
  260                             int flag);
  261 
  262 int Findjob_set_bless_filter(struct XorrisO *xorriso, struct FindjoB *o,
  263                              char *blessing, int flag);
  264 
  265 
  266 int Findjob_set_arg1(struct FindjoB *o, int test_type, char *arg1, int flag);
  267 
  268 int Findjob_open_bracket(struct FindjoB *job, int flag);
  269 
  270 int Findjob_close_bracket(struct FindjoB *job, int flag);
  271 
  272 int Findjob_not(struct FindjoB *job, int flag);
  273 
  274 int Findjob_and(struct FindjoB *job, int flag);
  275 
  276 int Findjob_or(struct FindjoB *job, int flag);
  277 
  278 int Findjob_if(struct FindjoB *job, int flag);
  279 
  280 int Findjob_then(struct FindjoB *job, int flag);
  281 
  282 int Findjob_else(struct FindjoB *job, int flag);
  283 
  284 int Findjob_elseif(struct FindjoB *job, int flag);
  285 
  286 int Findjob_endif(struct FindjoB *job, int flag);
  287 
  288 int Findjob_test_2(struct XorrisO *xorriso, struct FindjoB *o, 
  289                    void *node, char *name, char *path,
  290                    struct stat *boss_stbuf, struct stat *stbuf, int flag);
  291 
  292 int Findjob_set_action_found_path(struct FindjoB *o, int flag);
  293 
  294 /* @param flag bit0= recursive
  295 */
  296 int Findjob_set_action_target(struct FindjoB *o, int action, char *target,
  297                               int flag);
  298 
  299 /* @param flag bit0= recursive
  300 */
  301 int Findjob_set_action_ad(struct FindjoB *o, int type, time_t date, int flag);
  302 
  303 /* @param flag bit0= recursive
  304 */
  305 int Findjob_set_action_chgrp(struct FindjoB *o, gid_t group, int flag);
  306 
  307 /* @param flag bit0= recursive
  308 */
  309 int Findjob_set_action_chmod(struct FindjoB *o,
  310                              mode_t mode_and, mode_t mode_or, int flag);
  311 
  312 /* @param flag bit0= recursive
  313 */
  314 int Findjob_set_action_chown(struct FindjoB *o, uid_t user,int flag);
  315 
  316 /* @param flag bit0= -wholename rather than -name
  317 */
  318 int Findjob_set_name_expr(struct FindjoB *o, char *name_expr, int flag);
  319 
  320 int Findjob_set_file_type(struct FindjoB *o, char file_type, int flag);
  321 
  322 /* @param value -1= files without ACL, 1= only files with ACL
  323 */
  324 int Findjob_set_acl_filter(struct FindjoB *o, int value, int flag);
  325 
  326 /* @param value -1= files without xattr, 1= only files with xattr
  327    @param flag bit0=-has_any_xattr rather than -has_xattr
  328 */
  329 int Findjob_set_xattr_filter(struct FindjoB *o, int value, int flag);
  330 
  331 /* @param value -1= files without aaip, 1= only files with aaip
  332 */
  333 int Findjob_set_aaip_filter(struct FindjoB *o, int value, int flag);
  334 
  335 /* @param value -1= files without filter, 1= files with filter
  336 */
  337 int Findjob_set_filter_filter(struct FindjoB *o, int value, int flag);
  338 
  339 /* @param value -1= only without property, 1= only with property
  340    @param flag bit0= pseudo-test:
  341                      if no operator is open, do nothing and return 2
  342 */
  343 int Findjob_set_prop_filter(struct FindjoB *o, int test_type, int value,
  344                             int flag);
  345 
  346 /* @param value -1= true, 1= false
  347    @param flag bit0= pseudo-test:
  348                      if no operator is open, do nothing and return 2
  349 */
  350 int Findjob_set_false(struct FindjoB *o, int value, int flag);
  351 
  352 int Findjob_set_prune(struct FindjoB *o, int flag);
  353 
  354 
  355 int Findjob_set_action_subjob(struct FindjoB *o, int action,
  356                               struct FindjoB *subjob, int flag);
  357 
  358 int Findjob_set_action_text_2(struct FindjoB *o, int action, char *target,
  359                               char* text_2, int flag);
  360 
  361 int Findjob_set_action_type(struct FindjoB *o, int action, int type, int flag);
  362 
  363 
  364 int Findjob_get_action(struct FindjoB *o, int flag);
  365 
  366 int Findjob_get_action_parms(struct FindjoB *o, char **target, char **text_2,
  367                              uid_t *user, gid_t *group,
  368                              mode_t *mode_and, mode_t *mode_or,
  369                              int *type, time_t *date, struct FindjoB **subjob,
  370                              int flag);
  371 
  372 int Findjob_set_found_path(struct FindjoB *o, char *path, int flag);
  373 
  374 int Findjob_get_found_path(struct FindjoB *o, char **path, int flag);
  375 
  376 int Findjob_get_last_data_file_block(struct FindjoB *o, uint32_t *lba,
  377                                      int flag);
  378 
  379 #else /* Xorriso_findjob_on_expR */
  380 
  381 
  382 struct FindjoB;
  383 
  384 
  385 int Findjob_new(struct FindjoB **o, char *start_path, int flag);
  386 
  387 int Findjob_destroy(struct FindjoB **job, int flag);
  388 
  389 
  390 /* @return 0=no match , 1=match , <0 = error
  391 */
  392 int Findjob_test(struct FindjoB *job, char *name, 
  393                  struct stat *boss_stbuf, struct stat *stbuf,
  394                  int depth, int flag);
  395 
  396 /* @return <0 error, >=0 see xorriso.c struct FindjoB.action
  397 */
  398 int Findjob_get_action(struct FindjoB *o, int flag);
  399 
  400 /* @return <0 error, >=0 see xorriso.c struct FindjoB.action
  401 */ 
  402 int Findjob_get_action_parms(struct FindjoB *o, char **target, char **text_2,
  403                              uid_t *user, gid_t *group,
  404                              mode_t *mode_and, mode_t *mode_or,
  405                              int *type, time_t *date, struct FindjoB **subjob,
  406                              int flag);
  407 
  408 /* @param flag bit0= recursive
  409 */
  410 int Findjob_set_action_target(struct FindjoB *o, int action, char *target,
  411                               int flag);
  412 
  413 /* @param flag bit0= recursive
  414 */
  415 int Findjob_set_action_chgrp(struct FindjoB *o, gid_t group, int flag);
  416 
  417 /* @param flag bit0= recursive
  418 */
  419 int Findjob_set_action_chmod(struct FindjoB *o,
  420                              mode_t mode_and, mode_t mode_or, int flag);
  421 
  422 /* @param flag bit0= recursive
  423 */
  424 int Findjob_set_action_ad(struct FindjoB *o, int type, time_t date, int flag);
  425 
  426 int Findjob_set_start_path(struct FindjoB *o, char *start_path, int flag);
  427 
  428 int Findjob_set_action_found_path(struct FindjoB *o, int flag);
  429 
  430 int Findjob_get_start_path(struct FindjoB *o, char **start_path, int flag);
  431 
  432 int Findjob_set_lba_range(struct FindjoB *o, int start_lba, int count,
  433                           int flag);
  434 
  435 int Findjob_get_lba_damage_filter(struct FindjoB *o, int *start_lba,
  436                                   int *end_lba, int *damage_filter, int flag);
  437 
  438 int Findjob_get_commit_filter(struct FindjoB *o, int *commit_filter, int flag);
  439 
  440 int Findjob_get_acl_filter(struct FindjoB *o, int *acl_filter, int flag);
  441 
  442 int Findjob_get_xattr_filter(struct FindjoB *o, int *xattr_filter, int flag);
  443 
  444 int Findjob_get_aaip_filter(struct FindjoB *o, int *aaip_filter, int flag);
  445 
  446 int Findjob_get_filter_filter(struct FindjoB *o, int *value, int flag);
  447 
  448 int Findjob_set_wanted_node(struct FindjoB *o, void *wanted_node, int flag);
  449 
  450 int Findjob_get_wanted_node(struct FindjoB *o, void **wanted_node, int flag);
  451 
  452 int Findjob_set_found_path(struct FindjoB *o, char *path, int flag);
  453 
  454 int Findjob_get_found_path(struct FindjoB *o, char **path, int flag);
  455 
  456 int Findjob_get_last_data_file_block(struct FindjoB *o, uint32_t *lba,
  457                                      int flag);
  458 
  459 #endif /* ! Xorriso_findjob_on_expR */
  460 
  461 
  462 #endif /* ! Xorriso_pvt_findjob_includeD */
  463