/* Common declarations for the tar program.
Copyright (C) 1988, 1992, 1993, 1994, 1996, 1997, 1999, 2000, 2001,
/* Common declarations for the tar program.
Copyright (C) 1988, 1992, 1993, 1994, 1996, 1997, 1999, 2000, 2001,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
/* Specified name of compression program, or "gzip" as implied by -z. */
GLOBAL const char *use_compress_program_option;
/* Specified name of compression program, or "gzip" as implied by -z. */
GLOBAL const char *use_compress_program_option;
/* Return true if the extracted files are not being written to disk */
#define EXTRACT_OVER_PIPE (to_stdout_option || to_command_option)
/* Return true if the extracted files are not being written to disk */
#define EXTRACT_OVER_PIPE (to_stdout_option || to_command_option)
/* List of tape drive names, number of such tape drives, allocated number,
and current cursor in list. */
GLOBAL const char **archive_name_array;
/* List of tape drive names, number of such tape drives, allocated number,
and current cursor in list. */
GLOBAL const char **archive_name_array;
- 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 */
+ int explicit; /* this name was explicitely given in the
+ command line */
+ int matching_flags; /* this name is a regexp, not literal */
-GLOBAL bool test_label_option;
+GLOBAL bool test_label_option; /* Test archive volume label and exit */
+
+/* Show file or archive names after transformation.
+ In particular, when creating archive in verbose mode, list member names
+ as stored in the archive */
+GLOBAL bool show_transformed_names_option;
+
+/* Delay setting modification times and permissions of extracted directories
+ until the end of extraction. This variable helps correctly restore directory
+ timestamps from archives with an unusual member order. It is automatically
+ set for incremental archives. */
+GLOBAL bool delay_directory_restore_option;
bool file_dumpable_p (struct tar_stat_info *);
void create_archive (void);
void pad_archive (off_t size_left);
bool file_dumpable_p (struct tar_stat_info *);
void create_archive (void);
void pad_archive (off_t size_left);
union block *start_header (struct tar_stat_info *st);
void finish_header (struct tar_stat_info *, union block *, off_t);
void simple_finish_header (union block *header);
union block *start_header (struct tar_stat_info *st);
void finish_header (struct tar_stat_info *, union block *, off_t);
void simple_finish_header (union block *header);
#define UNAME_TO_CHARS(name,buf) string_to_chars (name, buf, sizeof(buf))
#define GNAME_TO_CHARS(name,buf) string_to_chars (name, buf, sizeof(buf))
#define UNAME_TO_CHARS(name,buf) string_to_chars (name, buf, sizeof(buf))
#define GNAME_TO_CHARS(name,buf) string_to_chars (name, buf, sizeof(buf))
-void gid_to_chars (gid_t, char *, size_t);
-void major_to_chars (major_t, char *, size_t);
-void minor_to_chars (minor_t, char *, size_t);
-void mode_to_chars (mode_t, char *, size_t);
-void off_to_chars (off_t, char *, size_t);
-void size_to_chars (size_t, char *, size_t);
-void time_to_chars (time_t, char *, size_t);
-void uid_to_chars (uid_t, char *, size_t);
-void uintmax_to_chars (uintmax_t, char *, size_t);
+bool gid_to_chars (gid_t, char *, size_t);
+bool major_to_chars (major_t, char *, size_t);
+bool minor_to_chars (minor_t, char *, size_t);
+bool mode_to_chars (mode_t, char *, size_t);
+bool off_to_chars (off_t, char *, size_t);
+bool size_to_chars (size_t, char *, size_t);
+bool time_to_chars (time_t, char *, size_t);
+bool uid_to_chars (uid_t, char *, size_t);
+bool uintmax_to_chars (uintmax_t, char *, size_t);
void read_directory_file (void);
void write_directory_file (void);
void purge_directory (char const *);
void list_dumpdir (char *buffer, size_t size);
void read_directory_file (void);
void write_directory_file (void);
void purge_directory (char const *);
void list_dumpdir (char *buffer, size_t size);
void print_for_mkdir (char *, int, mode_t);
void print_header (struct tar_stat_info *, off_t);
void read_and (void (*) (void));
void print_for_mkdir (char *, int, mode_t);
void print_header (struct tar_stat_info *, off_t);
void read_and (void (*) (void));
enum read_header read_header (bool);
enum read_header tar_checksum (union block *header, bool silent);
void skip_file (off_t);
enum read_header read_header (bool);
enum read_header tar_checksum (union block *header, bool silent);
void skip_file (off_t);
void name_gather (void);
struct name *addname (char const *, int);
int name_match (const char *);
void names_notfound (void);
void collect_and_sort_names (void);
void name_gather (void);
struct name *addname (char const *, int);
int name_match (const char *);
void names_notfound (void);
void collect_and_sort_names (void);
char *name_from_list (void);
void blank_name_list (void);
char *new_name (const char *, const char *);
char *name_from_list (void);
void blank_name_list (void);
char *new_name (const char *, const char *);
void tar_stat_init (struct tar_stat_info *st);
void tar_stat_destroy (struct tar_stat_info *st);
void usage (int) __attribute__ ((noreturn));
void tar_stat_init (struct tar_stat_info *st);
void tar_stat_destroy (struct tar_stat_info *st);
void usage (int) __attribute__ ((noreturn));
void xheader_read (union block *, size_t);
void xheader_write (char type, char *name, struct xheader *xhdr);
void xheader_write_global (void);
void xheader_read (union block *, size_t);
void xheader_write (char type, char *name, struct xheader *xhdr);
void xheader_write_global (void);
void xheader_write (char, char *, struct xheader *);
void xheader_write_global (void);
void xheader_set_option (char *string);
void xheader_write (char, char *, struct xheader *);
void xheader_write_global (void);
void xheader_set_option (char *string);
+void xheader_string_begin (void);
+void xheader_string_add (char const *s);
+void xheader_string_end (char const *keyword);
+bool xheader_keyword_deleted_p (const char *kw);
+char *xheader_format_name (struct tar_stat_info *st, const char *fmt,
+ size_t n);
bool sys_get_archive_stat (void);
int sys_exec_command (char *file_name, int typechar, struct tar_stat_info *st);
void sys_wait_command (void);
bool sys_get_archive_stat (void);
int sys_exec_command (char *file_name, int typechar, struct tar_stat_info *st);
void sys_wait_command (void);
/* Module utf8.c */
bool string_ascii_p (const char *str);
bool utf8_convert (bool to_utf, char const *input, char **output);
/* Module utf8.c */
bool string_ascii_p (const char *str);
bool utf8_convert (bool to_utf, char const *input, char **output);
+
+/* Module transform.c */
+void set_transform_expr (const char *expr);
+bool transform_name (char **pinput);
+bool transform_name_fp (char **pinput, char *(*fun)(char *));
+
+