/* The checksum field is filled with this while the checksum is computed. */
#define CHKBLANKS " " /* 8 blanks, no null */
-/* Old GNU stores zero-terminated file name */
-#define OLDGNU_NAME_FIELD_SIZE 99
-
/* Some constants from POSIX are given names. */
#define NAME_FIELD_SIZE 100
#define PREFIX_FIELD_SIZE 155
#define UNAME_FIELD_SIZE 32
#define GNAME_FIELD_SIZE 32
-/* FIXME */
-#define MAXOCTAL11 017777777777L
-#define MAXOCTAL7 07777777
-
\f
/* Some various global definitions. */
#include <modechange.h>
#include <quote.h>
#include <safe-read.h>
+#include <stat-time.h>
#include <timespec.h>
#define obstack_chunk_alloc xmalloc
#define obstack_chunk_free free
GLOBAL bool multi_volume_option;
-/* The same variable holds the time, whether mtime or ctime. Just fake a
- non-existing option, for making the code clearer, elsewhere. */
-#define newer_ctime_option newer_mtime_option
-
/* Specified threshold date and time. Files having an older time stamp
do not get archived (also see after_date_option above). */
GLOBAL struct timespec newer_mtime_option;
/* Return true if the struct stat ST's M time is less than
newer_mtime_option. */
#define OLDER_STAT_TIME(st, m) \
- ((st).st_##m##time < newer_mtime_option.tv_sec \
- || ((st).st_##m##time == newer_mtime_option.tv_sec \
- && TIMESPEC_NS ((st).st_##m##tim) < newer_mtime_option.tv_nsec))
+ (timespec_cmp (get_stat_##m##time (&(st)), newer_mtime_option) < 0)
+
+/* Likewise, for struct tar_stat_info ST. */
+#define OLDER_TAR_STAT_TIME(st, m) \
+ (timespec_cmp ((st).m##time, newer_mtime_option) < 0)
/* Zero if there is no recursion, otherwise FNM_LEADING_DIR. */
GLOBAL int recursion_option;
GLOBAL bool dev_null_output;
/* Timestamp for when we started execution. */
-#if HAVE_CLOCK_GETTIME
- GLOBAL struct timespec start_timespec;
-# define start_time (start_timespec.tv_sec)
-#else
- GLOBAL time_t start_time;
-#endif
+GLOBAL struct timespec start_time;
GLOBAL struct tar_stat_info current_stat_info;
/* Unquote filenames */
GLOBAL bool unquote_option;
+
+GLOBAL bool test_label_option; /* Test archive volume label and exit */
+
+GLOBAL bool show_stored_names_option; /* When creating archive in verbose mode,
+ list member names as stored in the archive */
+
\f
/* Declarations for each module. */
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);
-void string_to_chars (char *, char *, size_t);
+void string_to_chars (char const *, char *, size_t);
/* Module diffarch.c. */
void read_directory_file (void);
void write_directory_file (void);
void purge_directory (char const *);
+void list_dumpdir (char *buffer, size_t size);
+void update_parent_directory (const char *name);
/* Module list.c. */
void decode_header (union block *, struct tar_stat_info *,
enum archive_format *, int);
-char const *tartime (time_t);
+char const *tartime (struct timespec, bool);
#define GID_FROM_HEADER(where) gid_from_header (where, sizeof (where))
#define MAJOR_FROM_HEADER(where) major_from_header (where, sizeof (where))
char *quote_copy_string (const char *);
int unquote_string (char *);
+void code_ns_fraction (int, char *);
+char const *code_timespec (struct timespec, char *);
+enum { BILLION = 1000000000, LOG10_BILLION = 9 };
+enum { TIMESPEC_STRSIZE_BOUND =
+ UINTMAX_STRSIZE_BOUND + LOG10_BILLION + sizeof "-." - 1 };
+
size_t dot_dot_prefix_len (char const *);
enum remove_option
/* Module system.c */
-void sys_stat_nanoseconds (struct tar_stat_info *);
void sys_detect_dev_null_output (void);
void sys_save_archive_dev_ino (void);
void sys_drain_input_pipe (void);