GLOBAL bool block_number_option;
-GLOBAL bool checkpoint_option;
+GLOBAL unsigned checkpoint_option;
+
+enum checkpoint_style
+ {
+ checkpoint_text,
+ checkpoint_dot
+ };
+
+GLOBAL enum checkpoint_style checkpoint_style;
/* Specified name of compression program, or "gzip" as implied by -z. */
GLOBAL const char *use_compress_program_option;
/* Nonzero when outputting to /dev/null. */
GLOBAL bool dev_null_output;
-/* Timestamp for when we started execution. */
-GLOBAL struct timespec start_time;
+/* Timestamps: */
+GLOBAL struct timespec start_time; /* when we started execution */
+GLOBAL struct timespec volume_start_time; /* when the current volume was
+ opened*/
+GLOBAL struct timespec last_stat_time; /* when the statistics was last
+ computed */
GLOBAL struct tar_stat_info current_stat_info;
/* List of tape drive names, number of such tape drives, allocated number,
and current cursor in list. */
GLOBAL const char **archive_name_array;
-GLOBAL int archive_names;
-GLOBAL int allocated_archive_names;
+GLOBAL size_t archive_names;
+GLOBAL size_t allocated_archive_names;
GLOBAL const char **archive_name_cursor;
/* Output index file name. */
/* Structure for keeping track of filenames and lists thereof. */
struct name
{
- struct name *next;
- size_t length; /* cached strlen(name) */
+ struct name *next; /* Link to the next element */
+ int change_dir; /* Number of the directory to change to.
+ Set with the -C option. */
uintmax_t found_count; /* number of times a matching file has
been found */
- int explicit; /* was explicitely given in the command line */
- char firstch; /* first char is literally matched */
- char regexp; /* this name is a regexp, not literal */
- int change_dir; /* set with the -C option */
+ int explicit; /* this name was explicitely given in the
+ command line */
+ int matching_flags; /* this name is a regexp, not literal */
char const *dir_contents; /* for incremental_option */
- char fake; /* dummy entry */
+
+ size_t length; /* cached strlen(name) */
char name[1];
};
GLOBAL bool test_label_option; /* Test archive volume label and exit */
-/* When creating archive in verbose mode, list member names as stored in the
- archive */
-GLOBAL bool show_stored_names_option;
+/* Show file or archive names after transformation.
+ In particular, when creating archive in verbose mode, list member names
+ as stored in the archive */
+GLOBAL bool show_transformed_names_option;
/* Delay setting modification times and permissions of extracted directories
until the end of extraction. This variable helps correctly restore directory
set for incremental archives. */
GLOBAL bool delay_directory_restore_option;
+/* Warn about implicit use of the wildcards in command line arguments.
+ (Default for tar prior to 1.15.91, but changed afterwards */
+GLOBAL bool warn_regex_usage;
\f
/* Declarations for each module. */
void flush_archive (void);
void init_volume_number (void);
void open_archive (enum access_mode);
-void print_total_written (void);
+void print_total_stats (void);
void reset_eof (void);
void set_next_block_after (union block *);
void clear_read_error_count (void);
bool file_dumpable_p (struct tar_stat_info *);
void create_archive (void);
void pad_archive (off_t size_left);
-void dump_file (char *, int, dev_t);
+void dump_file (const char *, int, dev_t);
union block *start_header (struct tar_stat_info *st);
void finish_header (struct tar_stat_info *, union block *, off_t);
void simple_finish_header (union block *header);
void print_for_mkdir (char *, int, mode_t);
void print_header (struct tar_stat_info *, off_t);
void read_and (void (*) (void));
+enum read_header read_header_primitive (bool raw_extended_headers,
+ struct tar_stat_info *info);
enum read_header read_header (bool);
enum read_header tar_checksum (union block *header, bool silent);
void skip_file (off_t);
int uname_to_uid (char const *, uid_t *);
void init_names (void);
-void name_add (const char *);
-void name_init (void);
+void name_add_name (const char *, int);
+void name_add_dir (const char *name);
void name_term (void);
-char *name_next (int);
+const char *name_next (int);
void name_gather (void);
struct name *addname (char const *, int);
int name_match (const char *);
/* Module utf8.c */
bool string_ascii_p (const char *str);
bool utf8_convert (bool to_utf, char const *input, char **output);
+
+/* Module transform.c */
+void set_transform_expr (const char *expr);
+bool transform_name (char **pinput);
+bool transform_name_fp (char **pinput, char *(*fun)(char *));
+
+