]> Dogcows Code - chaz/tar/blobdiff - src/common.h
Updated
[chaz/tar] / src / common.h
index 0cc15f90c4684c1b5613260fcf12281e10c2b05c..2112f7b5160ce20415c3a9ed32eef26941d5c954 100644 (file)
@@ -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 */
@@ -230,6 +233,10 @@ GLOBAL int same_owner_option;
 /* If positive, preserve permissions when extracting.  */
 GLOBAL int same_permissions_option;
 
+/* When set, strip the given number of path elements from the file name
+   before extracting */
+GLOBAL size_t strip_path_elements;
+
 GLOBAL bool show_omitted_dirs_option;
 
 GLOBAL bool sparse_option;
@@ -291,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 */
@@ -310,6 +319,11 @@ GLOBAL struct sp_array *sparsearray;
 
 /* Number of elements in sparsearray.  */
 GLOBAL int sp_array_size;
+
+/* Obnoxious test to see if dimwit is trying to dump the archive.  */
+GLOBAL dev_t ar_dev;
+GLOBAL ino_t ar_ino;
+
 \f
 /* Declarations for each module.  */
 
@@ -345,6 +359,10 @@ void open_archive (enum access_mode);
 void print_total_written (void);
 void reset_eof (void);
 void set_next_block_after (union block *);
+void clear_read_error_count (void);
+void xclose (int fd);
+void archive_write_error (ssize_t) __attribute__ ((noreturn));
+void archive_read_error (void);
 
 /* Module create.c.  */
 
@@ -563,6 +581,8 @@ char *name_from_list (void);
 void blank_name_list (void);
 char *new_name (const char *, const char *);
 char *safer_name_suffix (char const *, bool);
+size_t stripped_prefix_len (char const *file_name, size_t num);
+bool all_names_found (struct tar_stat_info *);
 
 bool excluded_name (char const *);
 
@@ -571,13 +591,47 @@ 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 *);
 
 /* Module update.c.  */
 
 extern char *output_start;
 
 void update_archive (void);
+
+/* Module xheader.c.  */
+
+void xheader_decode (struct tar_stat_info *);
+void xheader_store (char const *, struct tar_stat_info const *);
+void xheader_read (union block *, size_t);
+void xheader_finish (struct xheader *);
+void xheader_destroy (struct xheader *);
+
+/* Module system.c */
+
+void sys_detect_dev_null_output (void);
+void sys_save_archive_dev_ino (void);
+void sys_drain_input_pipe (void);
+void sys_wait_for_child (pid_t);
+void sys_spawn_shell (void);
+void sys_compare_uid_gid (struct stat *a, struct stat *b);
+bool sys_file_is_archive (struct tar_stat_info *p);
+void sys_compare_links (struct stat *link_data, struct stat *stat_data);
+int sys_truncate (int fd);
+void sys_reset_uid_gid (void);
+pid_t sys_child_open_for_compress (void);
+pid_t sys_child_open_for_uncompress (void);
+ssize_t sys_write_archive_buffer (void);
+bool sys_get_archive_stat (void);
+
+/* Module compare.c */
+void report_difference (const char *message, ...);
This page took 0.021598 seconds and 4 git commands to generate.