X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fcommon.h;h=ac488c787b117f1dda3554b5ebf8a91517244a3b;hb=b085ca30976ec26256344bd3532205d440e69309;hp=9e1ec68fb00e0b76699fc6d0d22aa62c7663f051;hpb=07286647fb7446a62e8690675797ba7426b0758b;p=chaz%2Ftar diff --git a/src/common.h b/src/common.h index 9e1ec68..ac488c7 100644 --- a/src/common.h +++ b/src/common.h @@ -176,6 +176,9 @@ GLOBAL const char *info_script_option; GLOBAL bool interactive_option; +/* If nonzero, extract only Nth occurrence of each named file */ +GLOBAL uintmax_t occurrence_option; + enum old_files { DEFAULT_OLD_FILES, /* default */ @@ -295,7 +298,9 @@ struct name { struct name *next; size_t length; /* cached strlen(name) */ - char found; /* a matching file has been found */ + uintmax_t found_count; /* number of times a matching file has + been found */ + int isdir; char firstch; /* first char is literally matched */ char regexp; /* this name is a regexp, not literal */ int change_dir; /* set with the -C option */ @@ -568,6 +573,7 @@ void blank_name_list (void); char *new_name (const char *, const char *); char *safer_name_suffix (char const *, bool); size_t stripped_path_len (char const *file_name, size_t num); +bool all_names_found (struct tar_stat_info *); bool excluded_name (char const *); @@ -576,6 +582,11 @@ bool is_avoided_name (char const *); bool contains_dot_dot (char const *); +#define ISFOUND(c) ((occurrence_option == 0) ? (c)->found_count : \ + (c)->found_count == occurrence_option) +#define WASFOUND(c) ((occurrence_option == 0) ? (c)->found_count : \ + (c)->found_count >= occurrence_option) + /* Module tar.c. */ int confirm (const char *, const char *);