]> Dogcows Code - chaz/tar/blobdiff - src/common.h
Removed debugging hook
[chaz/tar] / src / common.h
index 40609bb82892297c9985b2ad06e526947eedbb25..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 */
@@ -295,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 */
@@ -314,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.  */
 
@@ -349,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.  */
 
@@ -567,7 +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);
-char const *cut_path_elements (char const *file_name, size_t num);
+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 *);
 
@@ -576,6 +591,11 @@ 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 *);
@@ -595,3 +615,23 @@ 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.022019 seconds and 4 git commands to generate.