#define obstack_chunk_alloc xmalloc
#define obstack_chunk_free free
#include <obstack.h>
+#include <progname.h>
+#include <xvasprintf.h>
#include <paxlib.h>
\f
/* Information gleaned from the command line. */
-/* Name of this program. */
-GLOBAL const char *program_name;
-
/* Main command option. */
enum subcommand
extern char *continued_file_name;
extern uintmax_t continued_file_size;
extern uintmax_t continued_file_offset;
+extern off_t records_written;
size_t available_space_after (union block *pointer);
off_t current_block_ordinal (void);
void simple_finish_header (union block *header);
union block * write_extended (bool global, struct tar_stat_info *st,
union block *old_header);
-union block *start_private_header (const char *name, size_t size);
+union block *start_private_header (const char *name, size_t size, time_t t);
void write_eot (void);
void check_links (void);
void exclusion_tag_warning (const char *dirname, const char *tagname,
void replace_prefix (char **pname, const char *samp, size_t slen,
const char *repl, size_t rlen);
+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 code_ns_fraction (int ns, char *p);
char const *code_timespec (struct timespec ts, char *sbuf);
enum { BILLION = 1000000000, LOG10_BILLION = 9 };
void name_gather (void);
struct name *addname (char const *string, int change_dir,
bool cmdline, struct name *parent);
+void remname (struct name *name);
bool name_match (const char *name);
void names_notfound (void);
void collect_and_sort_names (void);
void xheader_store (char const *keyword, struct tar_stat_info *st,
void const *data);
void xheader_read (struct xheader *xhdr, union block *header, size_t size);
-void xheader_write (char type, char *name, struct xheader *xhdr);
+void xheader_write (char type, char *name, time_t t, struct xheader *xhdr);
void xheader_write_global (struct xheader *xhdr);
void xheader_finish (struct xheader *hdr);
void xheader_destroy (struct xheader *hdr);
} \
while (0)
+/* Module unlink.c */
+
+void queue_deferred_unlink (const char *name, bool is_dir);
+void finish_deferred_unlinks (void);
+
+/* Module exit.c */
+extern void (*fatal_exit_hook) (void);
+