]> Dogcows Code - chaz/tar/blobdiff - src/common.h
(maybe_backup_file): Changed return type
[chaz/tar] / src / common.h
index 9eb90541fb4ab7a3cdce94ac7647ccedaf14dc14..4d8a60c4d20228f32d4b8c8e83394621fdd6d5dc 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 */
@@ -304,16 +309,10 @@ struct name
     char name[1];
   };
 
-/* Information about a sparse file.  */
-struct sp_array
-  {
-    off_t offset;
-    size_t numbytes;
-  };
-GLOBAL struct sp_array *sparsearray;
+/* Obnoxious test to see if dimwit is trying to dump the archive.  */
+GLOBAL dev_t ar_dev;
+GLOBAL ino_t ar_ino;
 
-/* Number of elements in sparsearray.  */
-GLOBAL int sp_array_size;
 \f
 /* Declarations for each module.  */
 
@@ -349,13 +348,27 @@ 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.  */
 
+enum dump_status
+  {
+    dump_status_ok,
+    dump_status_short,
+    dump_status_fail,
+    dump_status_not_implemented
+  };
+
+bool file_dumpable_p (struct tar_stat_info *stat);
 void create_archive (void);
+void pad_archive (off_t size_left);
 void dump_file (char *, int, dev_t);
-void finish_header (union block *, off_t);
-void init_sparsearray (void);
+union block *start_header (struct tar_stat_info *st);
+void finish_header (struct tar_stat_info *, union block *, off_t);
 void write_eot (void);
 void check_links (void);
 
@@ -394,7 +407,6 @@ void verify_volume (void);
 
 extern bool we_are_root;
 void extr_init (void);
-bool fill_in_sparse_array (void);
 void extract_archive (void);
 void extract_finish (void);
 void fatal_exit (void) __attribute__ ((noreturn));
@@ -464,7 +476,7 @@ uintmax_t uintmax_from_header (const char *, size_t);
 
 void list_archive (void);
 void print_for_mkdir (char *, int, mode_t);
-void print_header (off_t);
+void print_header (struct tar_stat_info *, off_t);
 void read_and (void (*) (void));
 enum read_header read_header (bool);
 void skip_file (off_t);
@@ -489,7 +501,7 @@ enum remove_option
   WANT_DIRECTORY_REMOVE_OPTION
 };
 int remove_any_file (const char *, enum remove_option);
-int maybe_backup_file (const char *, int);
+bool maybe_backup_file (const char *, int);
 void undo_last_backup (void);
 
 int deref_stat (bool, char const *, struct stat *);
@@ -504,6 +516,7 @@ void chmod_error_details (char const *, mode_t);
 void chown_error_details (char const *, uid_t, gid_t);
 void close_error (char const *);
 void close_warn (char const *);
+void close_diag (char const *name);
 void exec_fatal (char const *) __attribute__ ((noreturn));
 void link_error (char const *, char const *);
 void mkdir_error (char const *);
@@ -512,21 +525,27 @@ void mknod_error (char const *);
 void open_error (char const *);
 void open_fatal (char const *) __attribute__ ((noreturn));
 void open_warn (char const *);
+void open_diag (char const *name);
 void read_error (char const *);
 void read_error_details (char const *, off_t, size_t);
 void read_fatal (char const *) __attribute__ ((noreturn));
 void read_fatal_details (char const *, off_t, size_t);
 void read_warn_details (char const *, off_t, size_t);
+void read_diag_details (char const *name, off_t offset, size_t size);
 void readlink_error (char const *);
 void readlink_warn (char const *);
+void readlink_diag (char const *name);
 void savedir_error (char const *);
 void savedir_warn (char const *);
+void savedir_diag (char const *name);
 void seek_error (char const *);
 void seek_error_details (char const *, off_t);
 void seek_warn (char const *);
 void seek_warn_details (char const *, off_t);
+void seek_diag_details (char const *, off_t);
 void stat_error (char const *);
 void stat_warn (char const *);
+void stat_diag (char const *name);
 void symlink_error (char const *, char const *);
 void truncate_error (char const *);
 void truncate_warn (char const *);
@@ -560,7 +579,6 @@ void name_close (void);
 void name_gather (void);
 struct name *addname (char const *, int);
 int name_match (const char *);
-bool names_done (void);
 void names_notfound (void);
 void collect_and_sort_names (void);
 struct name *name_scan (const char *);
@@ -568,7 +586,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);
+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 *);
 
@@ -577,12 +596,18 @@ 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 *);
-bool all_names_found (void);
+
+void tar_stat_init (struct tar_stat_info *st);
+void tar_stat_destroy (struct tar_stat_info *st);
 
 /* Module update.c.  */
 
@@ -593,7 +618,35 @@ 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_store (char const *, struct tar_stat_info const *, void *);
 void xheader_read (union block *, size_t);
 void xheader_finish (struct xheader *);
 void xheader_destroy (struct xheader *);
+
+/* Module system.c */
+
+void sys_stat_nanoseconds (struct tar_stat_info *stat);
+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);
+bool sys_compare_uid (struct stat *a, struct stat *b);
+bool sys_compare_gid (struct stat *a, struct stat *b);
+bool sys_file_is_archive (struct tar_stat_info *p);
+bool 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 (struct tar_stat_info *st, const char *message, ...);
+
+/* Module sparse.c */
+bool sparse_file_p (struct tar_stat_info *stat);
+enum dump_status sparse_dump_file (int fd, struct tar_stat_info *stat);
+enum dump_status sparse_extract_file (int fd, struct tar_stat_info *stat, off_t *size);
+bool sparse_diff_file (int fd, struct tar_stat_info *stat);
This page took 0.024839 seconds and 4 git commands to generate.