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 */
{
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 */
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 *);
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 *);