]> Dogcows Code - chaz/tar/blobdiff - src/common.h
Updated
[chaz/tar] / src / common.h
index 0cc15f90c4684c1b5613260fcf12281e10c2b05c..ac488c787b117f1dda3554b5ebf8a91517244a3b 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 */
@@ -563,6 +572,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_path_len (char const *file_name, size_t num);
+bool all_names_found (struct tar_stat_info *);
 
 bool excluded_name (char const *);
 
@@ -571,13 +582,27 @@ 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 *);
This page took 0.022265 seconds and 4 git commands to generate.