X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fcommon.h;h=e7911f4bab9ee9e781b8c11d4a1e8e42984e59d2;hb=HEAD;hp=21df8c132819dbcb79797df5ef61167cc0af1343;hpb=26538c9bfc5fd726d625bef5fa3f08212d50173a;p=chaz%2Ftar diff --git a/src/common.h b/src/common.h index 21df8c1..e7911f4 100644 --- a/src/common.h +++ b/src/common.h @@ -1,6 +1,6 @@ /* Common declarations for the tar program. - Copyright 1988, 1992-1994, 1996-1997, 1999-2010, 2012-2013 Free + Copyright 1988, 1992-1994, 1996-1997, 1999-2010, 2012-2015 Free Software Foundation, Inc. This file is part of GNU tar. @@ -190,6 +190,8 @@ enum old_files }; GLOBAL enum old_files old_files_option; +GLOBAL bool keep_directory_symlink_option; + /* Specified file name for incremental list. */ GLOBAL const char *listed_incremental_option; /* Incremental dump level */ @@ -233,6 +235,10 @@ GLOBAL bool numeric_owner_option; GLOBAL bool one_file_system_option; +/* Create a top-level directory for extracting based on the archive name. */ +GLOBAL bool one_top_level_option; +GLOBAL char *one_top_level_dir; + /* Specified value to be put into tar file in place of stat () results, or just null and -1 if such an override should not take place. */ GLOBAL char const *owner_name_option; @@ -380,6 +386,11 @@ GLOBAL dev_t root_device; /* Unquote filenames */ GLOBAL bool unquote_option; +/* Treat file names read from -T input verbatim */ +GLOBAL bool verbatim_files_from_option; + +GLOBAL int savedir_sort_order; + /* Show file or archive names after transformation. In particular, when creating archive in verbose mode, list member names as stored in the archive */ @@ -425,7 +436,7 @@ size_t available_space_after (union block *pointer); off_t current_block_ordinal (void); void close_archive (void); void closeout_volume_number (void); -void compute_duration (void); +double compute_duration (void); union block *find_next_block (void); void flush_read (void); void flush_write (void); @@ -442,6 +453,12 @@ void archive_read_error (void); off_t seek_archive (off_t size); void set_start_time (void); +#define TF_READ 0 +#define TF_WRITE 1 +#define TF_DELETED 2 +int format_total_stats (FILE *fp, const char **formats, int eor, int eol); +void print_total_stats (void); + void mv_begin_write (const char *file_name, off_t totsize, off_t sizeleft); void mv_begin_read (struct tar_stat_info *st); @@ -509,6 +526,8 @@ void extract_archive (void); void extract_finish (void); bool rename_directory (char *src, char *dst); +void remove_delayed_set_stat (const char *fname); + /* Module delete.c. */ void delete_archive_members (void); @@ -524,6 +543,7 @@ void rebase_directory (struct directory *dir, const char *repl, size_t rlen); void append_incremental_renames (struct directory *dir); +void show_snapshot_field_ranges (void); void read_directory_file (void); void write_directory_file (void); void purge_directory (char const *directory_name); @@ -593,14 +613,20 @@ void skip_member (void); void assign_string (char **dest, const char *src); int unquote_string (char *str); char *zap_slashes (char *name); -char *normalize_filename (const char *name); +char *normalize_filename (int cdidx, const char *name); +void normalize_filename_x (char *name); void replace_prefix (char **pname, const char *samp, size_t slen, const char *repl, size_t rlen); +char *tar_savedir (const char *name, int must_exist); typedef struct namebuf *namebuf_t; namebuf_t namebuf_create (const char *dir); void namebuf_free (namebuf_t buf); char *namebuf_name (namebuf_t buf, const char *name); +void namebuf_add_dir (namebuf_t buf, const char *name); +char *namebuf_finish (namebuf_t buf); + +const char *tar_dirname (void); /* Represent N using a signed integer I such that (uintmax_t) I == N. With a good optimizing compiler, this is equivalent to (intmax_t) i @@ -704,7 +730,8 @@ int uname_to_uid (char const *uname, uid_t *puid); void name_init (void); void name_add_name (const char *name, int matching_flags); void name_add_dir (const char *name); -void name_add_file (const char *name, int term); +void name_add_file (const char *name, int term, bool verbatim, + int matching_flags); void name_term (void); const char *name_next (int change_dirs); void name_gather (void); @@ -722,17 +749,17 @@ char *new_name (const char *dir_name, const char *name); size_t stripped_prefix_len (char const *file_name, size_t num); bool all_names_found (struct tar_stat_info *st); -bool excluded_name (char const *name); - void add_avoided_name (char const *name); bool is_avoided_name (char const *name); bool contains_dot_dot (char const *name); -#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) +#define ISFOUND(c) (occurrence_option == 0 \ + ? (c)->found_count != 0 \ + : (c)->found_count == occurrence_option) +#define WASFOUND(c) (occurrence_option == 0 \ + ? (c)->found_count != 0 \ + : (c)->found_count >= occurrence_option) /* Module tar.c. */ @@ -841,11 +868,14 @@ bool transform_program_p (void); /* Module suffix.c */ void set_compression_program_by_suffix (const char *name, const char *defprog); +char *strip_compression_suffix (const char *name); /* Module checkpoint.c */ void checkpoint_compile_action (const char *str); void checkpoint_finish_compile (void); void checkpoint_run (bool do_write); +void checkpoint_finish (void); +void checkpoint_flush_actions (void); /* Module warning.c */ #define WARN_ALONE_ZERO_BLOCK 0x00000001 @@ -870,11 +900,12 @@ void checkpoint_run (bool do_write); #define WARN_DECOMPRESS_PROGRAM 0x00080000 #define WARN_EXISTING_FILE 0x00100000 #define WARN_XATTR_WRITE 0x00200000 +#define WARN_RECORD_SIZE 0x00400000 -/* The warnings composing WARN_VERBOSE_WARNINGS are enabled by default - in verbose mode */ +/* These warnings are enabled by default in verbose mode: */ #define WARN_VERBOSE_WARNINGS (WARN_RENAME_DIRECTORY|WARN_NEW_DIRECTORY|\ - WARN_DECOMPRESS_PROGRAM|WARN_EXISTING_FILE) + WARN_DECOMPRESS_PROGRAM|WARN_EXISTING_FILE|\ + WARN_RECORD_SIZE) #define WARN_ALL (~WARN_VERBOSE_WARNINGS) void set_warning_option (const char *arg); @@ -896,4 +927,16 @@ void finish_deferred_unlinks (void); /* Module exit.c */ extern void (*fatal_exit_hook) (void); +/* Module exclist.c */ +#define EXCL_DEFAULT 0x00 +#define EXCL_RECURSIVE 0x01 +#define EXCL_NON_RECURSIVE 0x02 + +void excfile_add (const char *name, int flags); +void info_attach_exclist (struct tar_stat_info *dir); +void info_cleanup_exclist (struct tar_stat_info *dir); +void info_free_exclist (struct tar_stat_info *dir); +bool excluded_name (char const *name, struct tar_stat_info *st); +void exclude_vcs_ignores (void); + _GL_INLINE_HEADER_END