/* Common declarations for the tar program.
Copyright (C) 1988, 1992, 1993, 1994, 1996, 1997, 1999, 2000, 2001,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
/* 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 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 */
+ 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 */
-GLOBAL bool show_stored_names_option; /* When creating archive in verbose mode,
- list member names as stored in the
- archive */
+/* 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
+ timestamps from archives with an unusual member order. It is automatically
+ 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. */
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 extr_init (void);
void extract_archive (void);
void extract_finish (void);
+bool rename_directory (char *src, char *dst);
/* Module delete.c. */
/* Module incremen.c. */
char *get_directory_contents (char *, dev_t);
+const char *append_incremental_renames (const char *dump);
void read_directory_file (void);
void write_directory_file (void);
void purge_directory (char const *);
void update_parent_directory (const char *name);
size_t dumpdir_size (const char *p);
-void get_gnu_dumpdir (void);
+bool is_dumpdir (struct tar_stat_info *stat_info);
/* Module list.c. */
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);
void *page_aligned_alloc (void **, size_t);
int set_file_atime (int fd, char const *file,
struct timespec const timespec[2]);
-
+
/* Module names.c. */
extern struct name *gnu_list_name;
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 *);
void names_notfound (void);
void collect_and_sort_names (void);
-struct name *name_scan (const char *);
+struct name *name_scan (const char *, bool);
char *name_from_list (void);
void blank_name_list (void);
char *new_name (const char *, const char *);
bool xheader_keyword_deleted_p (const char *kw);
char *xheader_format_name (struct tar_stat_info *st, const char *fmt,
size_t n);
-
+
/* Module system.c */
void sys_detect_dev_null_output (void);
/* 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 *));
+
+