From: Sergey Poznyakoff Date: Sat, 4 Oct 2003 13:49:25 +0000 (+0000) Subject: (occurrence_option): New global X-Git-Url: https://git.dogcows.com/gitweb?a=commitdiff_plain;h=660c6d9b648e6ac74d9526142de7e797f304de4c;p=chaz%2Ftar (occurrence_option): New global (struct name): Changed `found' member to `uintmax_t found_count'. (names_done): Removed (all_names_found): Changed prototype. (ISFOUND,WASFOUND): New macros --- diff --git a/src/common.h b/src/common.h index 9eb9054..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 */ @@ -560,7 +565,6 @@ void name_close (void); void name_gather (void); struct name *addname (char const *, int); int name_match (const char *); -bool names_done (void); void names_notfound (void); void collect_and_sort_names (void); struct name *name_scan (const char *); @@ -569,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 *); @@ -577,12 +582,16 @@ 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 *); void request_stdin (const char *); void destroy_stat (struct tar_stat_info *); -bool all_names_found (void); /* Module update.c. */