Paul Eggert [Wed, 18 Aug 1999 07:52:26 +0000 (07:52 +0000)]
(read_and, list_archive): Simplify code.
(read_header): Fix computation of signed checksums on machines where
char is unsigned.
Do not consider a block to be zero unless all its bytes are zero,
even the checksum bytes. Do not attempt to parse the checksum of
a zero block. Fix memory leak with long names and links.
(from_chars): Accommodate a buggy tar that outputs leading NUL
if the previous field overflows.
(skip_extended_headers): Don't assume find_next_block yields nonnull.
Paul Eggert [Wed, 18 Aug 1999 07:52:26 +0000 (07:52 +0000)]
(extract_sparse_file, extract_archive): Don't assume find_next_block yields nonnull.
(extract_archive): Fix sparse array bug: we did not find end of array
correctly.
Paul Eggert [Sat, 14 Aug 1999 07:10:19 +0000 (07:10 +0000)]
(time): Don't declare if defined.
(child_open_for_compress): Undo previous change.
(close_archive): Use waitpid, POSIX-style, instead of old BSD style.
(new_volume): Likewise.
Paul Eggert [Sat, 14 Aug 1999 07:10:19 +0000 (07:10 +0000)]
(start_header): Include text of ignored filesystem prefix in warning.
(create_archive): Check for excluded names when doing incremental
pass through directory.
(dump_file): Do not dump old files explicitly given on command line
when using --listed-incremental. Do not strip ./ from front of file names.
Paul Eggert [Sat, 14 Aug 1999 07:10:19 +0000 (07:10 +0000)]
(isotime): Report ??? if localtime returns null.
Don't assume years fit into four digits.
Don't append trailing newline.
(print_header): Report ??? if localtime returns null;
Don't assume years fit into four digits.
Paul Eggert [Wed, 11 Aug 1999 12:47:01 +0000 (12:47 +0000)]
(long_options, usage, OPTION_STRING, decode_options):
New -y or --bzip2 option.
(add_filtered_exclude): New function.
(decode_options): Put excluded patterns with / into excluded_with_slash,
and without / into excluded_without_slash.
Compare newer_mtime_option to its new initial value TYPE_MINIMUM (time_t)
when deciding whether more than one threshold date was specified.
Paul Eggert [Wed, 11 Aug 1999 12:47:01 +0000 (12:47 +0000)]
(base_64_digits): New constant.
(base_8_digits): New macro.
(MAX_VAL_WITH_DIGITS): New macro.
(to_base): Renamed from to_oct. Support base 64 too.
New parameters specifying bits per digit and digits.
Remove `type' parameter. The result is now undefined if it doesn't fit;
it's the caller's responsibility to check this.
(to_chars): Other half of old to_oct, for 64-bit support.
Mostly a new function.
(GID_NOBODY, UID_NOBODY): Don't define if the headers don't.
(gid_substitute, uid_substitute): Look up names dynamically if
GID_NOBODY and UID_NOBODY aren't defined; use -2 if all else fails.
(mode_to_chars): Renamed from mode_to_oct.
Support negative values in all the _to_chars functions.
(start_header): Use FILESYSTEM_PREFIX_LEN instead of MSDOS ifdef.
Abort if archive format is DEFAULT_FORMAT when it shouldn't be.
(dump_file): Inspect entire pathname, not just new file name
component, when deciding whether to exclude it.
Paul Eggert [Wed, 11 Aug 1999 12:47:01 +0000 (12:47 +0000)]
(_GNU_SOURCE): Define.
(<fnmatch.h>): Include unconditionally.
(excluded_name): New function, taking over duties of excluded_pathname.
All uses changed.
Paul Eggert [Wed, 11 Aug 1999 12:47:01 +0000 (12:47 +0000)]
(_GNU_SOURCE): Define.
(<fnmatch.h>): Include unconditionally.
(child_open_for_compress): Dup after closing, to avoid possible file
descriptor exhaustion.
(flush_write): Use FILESYSTEM_PREFIX_LEN instead of MSDOS ifdef.
(flush_read): Likewise.
Paul Eggert [Wed, 11 Aug 1999 12:47:01 +0000 (12:47 +0000)]
(<fnmatch.h>): Do not include.
(from_chars): Renamed from from_oct. New parameter specifing
the negative of the minimum allowed value. Support negative
and base-64 values.
(base64_map): New var.
(base64_init): New function.
(print_header): Output numeric uids and gids if numeric_owner_option.
Paul Eggert [Tue, 20 Jul 1999 07:09:27 +0000 (07:09 +0000)]
this matches historical practice.
(unlink_destination): New function, which checks for unlink failures.
(maybe_recoverable): Stay quiet if -U.
(extract_archive): Use O_EXCL if unlink_first_option.
Report unlink failures.
Use HAVE_SYMLINK, not S_ISLNK, to determine whether symlink exists.
Use HAVE_MKFIFO || defined mkfifo, not S_ISFIFO, to determine whether
mkfifo exists.
Paul Eggert [Sat, 17 Jul 1999 01:49:35 +0000 (01:49 +0000)]
(total_written): Remove; replaced with prev_written + bytes_written.
(prev_written): New var.
(init_total_written): New function.
(print_total_written): Use TARLONG_FORMAT instead of print_tarlong.
Paul Eggert [Sat, 17 Jul 1999 01:49:35 +0000 (01:49 +0000)]
(decode_options): Set newer_time_option to TYPE_MINIMUM, so that
negative timestamps are handled correctly.
Replace invocations of xstrtol and xstrtoul with xstrtoumax, for
uniformity (and so that we don't need to have the other fns).
(main): Remove call to init_total_written; no longer needed.
Paul Eggert [Mon, 12 Jul 1999 13:03:58 +0000 (13:03 +0000)]
(start_header): Do not assume S_IFMT is defined.
(dump_file): Remove unnecessary check for screwy apollo lossage.
Do not assume S_IFBLK and S_IFCHR are defined.
Paul Eggert [Mon, 12 Jul 1999 13:03:58 +0000 (13:03 +0000)]
(is_regular_file): Don't succeed on files that we can't access due to
permissions problems.
(open_archive): Fix wording on fatal error message.
Don't bother to stat /dev/null if the archive is not a character
special device.
Paul Eggert [Thu, 8 Jul 1999 03:45:21 +0000 (03:45 +0000)]
(read_and): Use excluded_filename instead of check_exclude.
Check base name of incoming file name, not entire file name, when
deciding whether to exclude it.
Paul Eggert [Sat, 3 Jul 1999 00:00:19 +0000 (00:00 +0000)]
Include signal.h.
(SIGCHLD): Define to SIGCLD if SIGCLD is defined but SIGCHLD is not.
(main): Ensure SIGCHLD is not ignored, so that we can fork and wait.
Paul Eggert [Fri, 2 Jul 1999 21:33:51 +0000 (21:33 +0000)]
(BACKUP_OPTION, DELETE_OPTION, EXCLUDE_OPTION, GROUP_OPTION,
MODE_OPTION, NEWER_MTIME_OPTION, NO_RECURSE_OPTION, NULL_OPTION,
OWNER_OPTION, POSIX_OPTION, PRESERVE_OPTION, RECORD_SIZE_OPTION,
RSH_COMMAND_OPTION, SUFFIX_OPTION, USE_COMPRESS_PROGRAM_OPTION,
VOLNO_FILE_OPTION, OBSOLETE_ABSOLUTE_NAMES, OBSOLETE_BLOCK_COMPRESS,
OBSOLETE_BLOCKING_FACTOR, OBSOLETE_BLOCK_NUMBER,
OBSOLETE_READ_FULL_RECORDS, OBSOLETE_TOUCH, OBSOLETE_VERSION_CONTROL):
Make sure they can't be valid chars, so they don't overlap with char codes.
Use an enum instead of a lot of #defines.
(long_options, main, usage): Remove --ending-file option.
(OPTION_STRING): Remove -E.
Paul Eggert [Fri, 2 Jul 1999 21:25:09 +0000 (21:25 +0000)]
Don't include <ctype.h>; system.h already does this.
(ISODIGIT, ISSPACE): Remove; now in system.h.
(read_and): Excise ending_file_option.
(decode_header): No need to AND mode with 07777; MODE_FROM_OCT
does this now.
(from_oct): Cast ISSPACE arg to unsigned char.
(mode_from_oct): Translate modes from external to internal form.
Do not complain about unrecognized mode bits.
(decode_mode): Do not assume mode bits have traditional Unix values.
Paul Eggert [Fri, 2 Jul 1999 21:25:09 +0000 (21:25 +0000)]
(extr_init, make_directories, extract_archive):
Do not assume mode bits have traditional Unix values.
(set_mode): Use %04 not %0.4 format.
(extract_sparse_file): Do not use data_block uninitialized.
Check for lseek failures; use portable lseek whence values.
Paul Eggert [Fri, 2 Jul 1999 21:05:50 +0000 (21:05 +0000)]
(mode_to_oct): Do not assume internal mode_t and external octal modes
have the same bit patterns.
(start_header): Do not assume mode bits have traditional Unix values.
(finish_sparse_file): Use lseek whence macros instead of integers.
(dump_file): Do not assume mode bits have traditional Unix values.
Do not invoke finish_sparse_file on a negative file descriptor.
Paul Eggert [Fri, 25 Jun 1999 23:28:08 +0000 (23:28 +0000)]
(write_archive_buffer): New function.
(child_open_for_compress, flush_write, flush_read): Use it to write
buffers.
(open_archive): Report error if fstat of archive fails.
Improve efficiency of check for /dev/null.
Also, fix some corner cases with remote archives and /dev/null checking.
(close_archive): Test for input fifo only if not remote.
Truncate output archive only if it's not remote.
Paul Eggert [Sat, 19 Jun 1999 06:19:27 +0000 (06:19 +0000)]
(to_oct): Prepend leading zeros, not spaces.
Output a trailing NUL unless the value won't fit without it;
this is backward compatible with Unix tar (and with GNU Emacs).
(finish_header): No need to append NUL to chksum, now that
to_oct is doing it.