]> Dogcows Code - chaz/tar/log
chaz/tar
13 years agotar: live within system-supplied limits on file descriptors
Paul Eggert [Sun, 12 Sep 2010 21:26:31 +0000 (14:26 -0700)] 
tar: live within system-supplied limits on file descriptors

* NEWS: Note the change.  Mention dirfd and fdopendir.
* gnulib.modules: Add dirfd and fdopendir.  The code was already
using fdopendir; dirfd is a new need.
* src/common.h (open_searchdir_flags, get_directory_entries):
(subfile_open, restore_parent_fd, tar_stat_close): New decls.
(check_exclusion_tags): Adjust signature to match code change.
* src/create.c (IMPOSTOR_ERRNO): New constant.
(check_exclusion_tags): First arg is now a struct tar_stat_info
const *, not an fd.  All callers changed.
(dump_regular_file, dump_file0): A zero fd represents an unused
slot, so play it safe if the fd member is zero here.  A negative
fd represents the negation of an errno value, so play it safe and
do not assign -1 to fd merely because an open fails.
(open_failure_recover, get_directory_entries, restore_parent_fd):
(subfile_open): New functions.  These help to recover from file
descriptor exhaustion.
(dump_dir, dump_file0): Use them.
(dump_file0): Use tar_stat_close instead of rolling our own close.
* src/incremen.c (scan_directory): Use get_directory_entries,
subfile_open, etc., to recover from file descriptor exhaustion.
* src/names.c (add_hierarchy_to_namelist): Likewise.
(collect_and_sort_names): A negative fd represents the negation
of an errno value, so play it safe and do not assign -1 to fd.
* src/tar.c (decode_options): Set open_searchdir_flags.
Add O_CLOEXEC to all the open flags.
(tar_stat_close): New function, which knows how to deal with
new convention for directory streams and file descriptors.
Diagnose 'close' failures.
(tar_stat_destroy): Use it.
* src/tar.h (struct tar_stat_info): New member dirstream.
fd now has the negative of an errno value, not merely -1, if
the file could not be opened, so that failures to reopen directories
are better-diagnosed later.
* tests/Makefile.am (TESTSUITE_AT): Add extrac11.at.
* tests/testsuite.at: Likewise.
* tests/extrac11.at: New file.

13 years agotar: improve documentation of reliability and security issues
Paul Eggert [Wed, 8 Sep 2010 20:40:10 +0000 (13:40 -0700)] 
tar: improve documentation of reliability and security issues

* doc/tar.texi (Reliability and security, Reliability):
(Permissions problems, Data corruption and repair, Race conditions):
(Security, Privacy, Integrity, Live untrusted data):
(Security rules of thumb): New nodes.

13 years agotar: more reliable directory traversal when creating archives
Paul Eggert [Mon, 6 Sep 2010 20:38:44 +0000 (13:38 -0700)] 
tar: more reliable directory traversal when creating archives

* NEWS: Document this.
* gnulib.modules: Add openat, readlinkat.
* src/common.h (open_read_flags, fstatat_flags): New global variables.
(cachedir_file_p, dump_file, check_exclusion_tags, scan_directory):
Adjust to new signatures, described below.
(name_fill_directory): Remove.
* src/compare.c (diff_file, diff_multivol): Use open_read_flags.
* src/create.c (struct exclusion_tag): Exclusion predicates now take
a file descriptor, not a file name.
(add_exclusion_tag): Likewise.  All uses changed.
(cachedir_file_p): Likewise.
(check_exclusion_tags): The directory is now a file descriptor,
not a file name.  All uses changed.  Use openat for better traversal.
(file_dumpable_p): Arg is now a struct stat, not a struct
tar_stat_info.  All uses changed.  Check the arg's file types too.
(dump_dir0, dump_dir, dump_file0, dump_file): Omit top_level and
parent_device args, since st->parent tells us that now.  All uses
changed.
(dump_dir): Likewise.  Also, omit fd arg for similar reasons.
Apply fdsavedir to a dup of the file descriptor, since we need a
file descriptor for openat etc. as well, and fdsavedir (perhaps
unwisely) consumes its file descriptor when successful.
Do not consume st->fd when successful; this simplifies the caller.
(create_archive): Allocate a file descriptor when retraversing
a directory, during incremental dumps.
(dump_file0): Use fstatat, openat, and readlinkat for better traversal.
When opening a file, use the result of fstat on the file descriptor
rather than the fstatat on the directory entry, to avoid some race
conditions.  No need to reopen the directory since we now no longer
close it.  Change "did we open the file?" test from 0 <= fd to
0 < fd since fd == 0 now represents uninitialized.
(dump_file): Now accepts struct tar_stat_info describing parent,
not parent_device.  Also, accept basename and fullname of entry.
All uses changed.
* src/incremen.c (update_parent_directory): Accept struct
tar_stat_info for parent, not name.  All callers changed.
Use fstatat for safer directory traversal.
(procdir): Accept struct tar_stat_info, not struct stat and
dev_t, for info about directory.  All callers changed.
(scan_directory): Accept struct tar_stat_info, not name,
device, and cmdline, for info about directory.  All callers
changed.  Do not consume the file descriptor, since caller
might need it.  Use fstatat and openat for safer directory
traversal; also, use fstat after opening to double-check.
(name_fill_directory): Remove.
* src/names.c (add_hierarchy_to_namelist): Accept struct
tar_stat_info instead of device and cmdline.  All callers changed.
When descending into a subdirectory, use openat and fstat for
safer directory traversal.
(collect_and_sort_names): Use open and fstat for safer directory
traversal.  Set up struct tar_stat_info for callee's new API.
* src/tar.c (decode_options): Initialize open_read_flags
and fstatat_flags.
(tar_stat_destroy): Close st->fd if it is positive (not zero!).
* src/tar.h (struct tar_stat_info): New members parent, fd.
* src/update.c (update_archive): Adjust to dump_file's API change.
* tests/filerem02.at: Ignore stderr since its contents now depend
on the file system implementation.

13 years agotar: remove lint discovered by Sun C compiler
Paul Eggert [Sun, 5 Sep 2010 06:52:34 +0000 (23:52 -0700)] 
tar: remove lint discovered by Sun C compiler

* src/common.h (WARN_ALL): Don't mask with 0xffffffff; on a 32-bit
host, 0xffffffff is of type 'unsigned int', which makes WARN_ALL
an unsigned int value that is too large to fit into an int, and
the C standard says that this has undefined behavior.  The mask is
not needed, so omit it.

13 years agotar: restore macros that are used in some cases
Paul Eggert [Sat, 4 Sep 2010 07:08:42 +0000 (00:08 -0700)] 
tar: restore macros that are used in some cases

* src/tar.c (LOW_DENSITY_NUM, MID_DENSITY_NUM, HIGH_DENSITY_NUM):
Restore these macros, undoing the previous change to this file.
The macros are used after all, in some cases.  Sorry about that.

13 years agotar: remove unused macros
Paul Eggert [Fri, 3 Sep 2010 03:45:52 +0000 (20:45 -0700)] 
tar: remove unused macros

* src/create.c (UINTMAX_TO_CHARS): Remove; no longer used.
* src/tar.c (LOW_DENSITY_NUM, MID_DENSITY_NUM, HIGH_DENSITY_NUM):
Likewise.
* src/incremen.c (DIR_IS_NEW): Comment out; not used.
Mark this with a FIXME, since it looks like it should be used.

13 years agoFix --remove-files in update/append mode.
Sergey Poznyakoff [Fri, 27 Aug 2010 12:36:24 +0000 (15:36 +0300)] 
Fix --remove-files in update/append mode.

* src/update.c (update_archive): Call finish_deferred_unlinks when
done.

13 years agotar: avoid assumptions about root access and chmod -w in test cases
Paul Eggert [Thu, 26 Aug 2010 17:22:44 +0000 (10:22 -0700)] 
tar: avoid assumptions about root access and chmod -w in test cases

* tests/extrac07.at, tests/extrac09.at, tests/listed03.at: Use
AT_UNPRIVILEGED_PREREQ, since this test requires non-root
privileges.
* tests/extrac07.at: Don't use "chmod -w", as POSIX says it's not
portable to start a chmod permissions-list with "-" as it may be
confused with an option.  Use "chmod a-w" instead.

13 years agotar: fix bug with -C and delayed setting of metadata
Paul Eggert [Thu, 26 Aug 2010 00:09:17 +0000 (17:09 -0700)] 
tar: fix bug with -C and delayed setting of metadata

* src/common.h (chdir_current): New decl.
* src/extract.c (struct delayed_set_stat, struct delayed_link):
New member change_dir.
(delay_set_stat, create_placeholder_file): Set it.
(apply_nonancestor_delayed_set_stat, apply_delayed_links): Use it.
(extract_link): Check that the links are all relative to the same
directory.
(extract_archive): Restore the current directory after
apply_nonancestor_delayed_set_stat has possibly changed it.
* src/misc.c (chdir_current): New external var; this used to
be the private static variable 'previous' inside chdir_dir.
All uses changed.
* tests/Makefile.am (TESTSUITE_AT): New test extrac10.at.
* tests/extrac10.at: New file.
* tests/testsuite.at: Include it.

13 years agoDon't apply file transformations to volume names.
Sergey Poznyakoff [Sun, 22 Aug 2010 02:25:46 +0000 (05:25 +0300)] 
Don't apply file transformations to volume names.

* src/list.c (decode_header): Don't apply file transformations to volume names.
* tests/xform01.at: New testcase.
* tests/xform-h.at (xform): Rename macro to xformtest. Use pushdef/popdef.
* tests/Makefile.am, tests/testsuite.at: Add xform01.at

13 years agotar: optimize -c --sparse when file is entirely sparse
Paul Eggert [Wed, 25 Aug 2010 00:28:11 +0000 (17:28 -0700)] 
tar: optimize -c --sparse when file is entirely sparse

* src/sparse.c (sparse_scan_file): If the file is entirely sparse,
that is, if ST_NBLOCKS is zero, don't bother scanning for nonzero
blocks.  Idea by Kit Westneat, communicated by Bernd Schubert in
<http://lists.gnu.org/archive/html/bug-tar/2010-08/msg00038.html>.
Also, omit unnecessary lseek at start of file.

13 years agotar: don't assume size of a sparse file chunk fits in size_t
Paul Eggert [Tue, 24 Aug 2010 23:50:31 +0000 (16:50 -0700)] 
tar: don't assume size of a sparse file chunk fits in size_t

* src/tar.h (struct sp_array): Change numbytes from size_t to off_t.
All uses changed.
* scripts/xsparse.c (struct sp_array): Likewise.
Include <stdint.h>, for SIZE_MAX.
(expand_sparse): Don't try to allocate a buffer bigger than
SIZE_MAX bytes.
* src/common.h (SIZE_TO_CHARS, size_to_chars, SIZE_FROM_HEADER):
(size_from_header): Remove decls.
* src/create.c (size_to_chars): Remove.
* src/list.c (size_from_header): Remove.
* src/sparse.c (sparse_extract_region, check_data_region):
(oldgnu_add_sparse, oldgnu_store_sparse_info, pax_decode_header):
Don't assume chunk sizes fit in size_t.
(oldgnu_add_sparse): Check for off_t overflow.
* src/xheader.c (sparse_numbytes_decoder, sparse_map_decoder):
Likewise.

13 years agotar: use ctime, not mtime, when checking placeholders
Paul Eggert [Tue, 24 Aug 2010 22:44:10 +0000 (15:44 -0700)] 
tar: use ctime, not mtime, when checking placeholders

* src/extract.c (struct delayed_link): Rename member mtime to ctime.
All uses changed to use ctime rather than mtime.

13 years agotar: add comment to link04.at test
Paul Eggert [Tue, 24 Aug 2010 15:17:21 +0000 (08:17 -0700)] 
tar: add comment to link04.at test

* tests/link04.at: Add explanatory comment at head.

13 years agotar: fix 1.23 Solaris regression related to PRIV_SYS_LINKDIR
Paul Eggert [Tue, 24 Aug 2010 07:07:32 +0000 (00:07 -0700)] 
tar: fix 1.23 Solaris regression related to PRIV_SYS_LINKDIR

The idea was suggested by Petr Sumbera in the thread starting here:
http://lists.gnu.org/archive/html/bug-tar/2010-08/msg00000.html
* src/extract.c (set_mode): Save the errno of the chmod that
failed, for the benefit of chmod_error_details.  Do not bother
retrying chmod unless the mode suggests setuid is the issue.
(extract_archive): Remove redundant call to priv_set_remove_linkdir.
* src/system.c: Include priv-set.h.
(sys_spawn_shell, sys_child_open_for_compress):
(sys_child_open_for_uncompress, sys_exec_command):
(sys_exec_info_script, sys_exec_checkpoint_script):
Invoke priv_set_restore_linkdir before execv or execlp, so that
the subprocess has the same privileges that tar originally did.

13 years agotar: handle files that occur multiple times but have link count 1
Paul Eggert [Tue, 24 Aug 2010 02:12:25 +0000 (19:12 -0700)] 
tar: handle files that occur multiple times but have link count 1

This patch was inspired by the following patch that addressed a
similar problem in GNU coreutils du:
http://git.savannah.gnu.org/gitweb/?p=coreutils.git;h=efe53cc72b599979ea292754ecfe8abf7c839d22
* src/common.h (name_count): New decl.
* src/create.c (trivial_link_count): New static var.
(create_archive): Initialize it.
(dump_hard_link, file_count_links): Use it, so that files with
link count 1 are handled correctly when they are found multiple times.
* src/names.c (allocated_entries): Renamed from allocated_names,
since the identifier's name was misleading.  All uses changed.
(entries): Renamed from names.  All uses changed.
(scanned): Renamed from name_index.  All uses changed.
(name_count): New var.
(name_add_name): Increment it.
* tests/link04.at: New file.
* tests/testsuite.at: Add it.
* tests/Makefile.am (TESTSUITE_AT): Likewise.

13 years agotar: use nlink_t for link counts
Paul Eggert [Mon, 23 Aug 2010 20:49:28 +0000 (13:49 -0700)] 
tar: use nlink_t for link counts

* src/create.c (struct link): nlink is now of type nlink_t, not size_t.

13 years agotar: don't export names that aren't used elsewhere
Paul Eggert [Mon, 23 Aug 2010 20:25:58 +0000 (13:25 -0700)] 
tar: don't export names that aren't used elsewhere

* src/common.h (file_dumpable_p, gid_to_chars, major_to_chars):
(minor_to_chars, mode_to_chars, uid_to_chars, uintmax_to_chars):
(string_to_chars, dumpdir_creat0, dumpdir_create, dumpdir_free):
(dumpdir_locate, dumpdir_next, dumpdir_first, gid_from_header):
(major_from_header, minor_from_header, mode_from_header):
(time_from_header, uid_from_header, quote_copy_string, request_stdin):
(xheader_init, transform_header_name):
Remove declarations; these are no longer exported from their modules.
(GID_TO_CHARS, MAJOR_TO_CHARS, MINOR_TO_CHARS, MODE_TO_CHARS):
(UID_TO_CHARS, UINTMAX_TO_CHARS, UNAME_TO_CHARS, GNAME_TO_CHARS):
Move to src/create.c, since no other module uses these.
(GID_FROM_HEADER, MAJOR_FROM_HEADER, MINOR_FROM_HEADER):
(MODE_FROM_HEADER, TIME_FROM_HEADER, UID_FROM_HEADER):
Move to src/extract.c, since no other module uses these.
(dumpdir_t, dumpdir_iter_t): Remove; no longer used.
* src/create.c (gid_to_chars, major_to_chars, minor_to_chars):
(mode_to_chars, uid_to_chars, uintmax_to_chars, string_to_chars):
(file_dumpable_p): Now static.
* src/incremen.c (dumpdir_create0, dumpdir_create, dumpdir_free):
(dumpdir_locate, dumpdir_next, dumpdir_first): Now static.
(scan_directory, write_directory_file_entry):
Use struct dumpdir_iter * rather than dumpdir_iter_t.
* src/list.c (gid_from_header, major_from_header, minor_from_header):
(mode_from_header, time_from_header, uid_from_header):
(transform_member_name): Now static.
* src/misc.c (quote_copy_string): #if 0 out, as it's not used
anywhere.
* src/system.c (wait_for_grandchild): Now static.
* src/tar.c (request_stdin): Now static.
* src/xheader.c (xheader_init): Now static.

13 years agotar: fix misspelled identifier "set_comression_program_by_suffix"
Paul Eggert [Mon, 23 Aug 2010 18:36:53 +0000 (11:36 -0700)] 
tar: fix misspelled identifier "set_comression_program_by_suffix"

* src/suffix.c (set_compression_program_by_suffix): Renamed from
set_comression_program_by_suffix.
* src/buffer.c, src/common.h, src/tar.c: All uses changed.

13 years agotar: change interdir_made from int to bool
Paul Eggert [Fri, 20 Aug 2010 08:08:52 +0000 (01:08 -0700)] 
tar: change interdir_made from int to bool

* src/extract.c (maybe_recoverable, create_placeholder_file):
Change interdir_made from int * to bool *, since the flag has just
two values 0 and 1.  All uses changed.  This does not affect tar's
behavior.

13 years agotar: remove trailing white space from source files
Paul Eggert [Thu, 19 Aug 2010 22:49:39 +0000 (15:49 -0700)] 
tar: remove trailing white space from source files

* ChangeLog.1, ChangeLog.CVS, Makefile.am, NEWS, README:
* README-hacking, directory, doc/Makefile.am, doc/dumpdir.texi:
* doc/gendocs_template, doc/intern.texi, doc/mastermenu.el:
* doc/snapshot.texi, doc/sparse.texi, doc/tar-snapshot-edit.texi:
* doc/value.texi, lib/Makefile.am, scripts/backup-specs:
* scripts/dump-remind.in, scripts/tar-snapshot-edit, scripts/tarcat:
* scripts/xsparse.c, src/arith.h, src/buffer.c, src/compare.c:
* src/create.c, src/delete.c, src/exit.c, src/suffix.c, src/tar.c:
* src/tar.h, src/update.c, src/warning.c, src/xheader.c:
* tests/append01.at, tests/append02.at, tests/atlocal.in:
* tests/delete03.at, tests/exclude.at, tests/exclude06.at:
* tests/extrac04.at, tests/extrac05.at, tests/extrac06.at:
* tests/extrac07.at, tests/filerem01.at, tests/filerem02.at:
* tests/incr01.at, tests/incr02.at, tests/incr03.at, tests/incr06.at:
* tests/label02.at, tests/label03.at, tests/label04.at:
* tests/label05.at, tests/link02.at, tests/link03.at:
* tests/listed01.at, tests/listed02.at, tests/long01.at:
* tests/longv7.at, tests/multiv01.at, tests/multiv02.at:
* tests/multiv03.at, tests/multiv05.at, tests/multiv06.at:
* tests/multiv07.at, tests/multiv08.at, tests/options.at:
* tests/options02.at, tests/remfiles03.at, tests/rename01.at:
* tests/rename02.at, tests/rename03.at, tests/rename04.at:
* tests/rename05.at, tests/same-order01.at, tests/same-order02.at:
* tests/shortfile.at, tests/shortupd.at, tests/sparse01.at:
* tests/sparse02.at, tests/sparsemv.at, tests/sparsemvp.at:
* tests/star/README, tests/star/gtarfail2.at:
* tests/star/multi-fail.at:
* tests/star/pax-big-10g.at, tests/star/quicktest.sh:
* tests/star/ustar-big-2g.at, tests/star/ustar-big-8g.at:
* tests/update01.at, tests/update02.at, tests/volsize.at:
* tests/volume.at:
Remove trailing spaces and tabs from lines, and remove
trailing empty lines from files.  This makes it a bit easier
to share code among coreutils and other projects that do this.

13 years agotar: update licenses to latest versions from www.gnu.org
Paul Eggert [Thu, 19 Aug 2010 11:13:01 +0000 (04:13 -0700)] 
tar: update licenses to latest versions from www.gnu.org

* COPYING: Update to latest version; this is just minor formatting.
* doc/fdl.texi: Update from GFDL 1.2 to 1.3.
* doc/tar.texi: Adjust to new format of fdl.texi.  Omit trailing
white space.

13 years ago* src/misc.c (struct wd): Fix comment to match code.
Paul Eggert [Sun, 18 Jul 2010 19:34:13 +0000 (12:34 -0700)] 
* src/misc.c (struct wd): Fix comment to match code.

13 years agotar: no need to report getcwd error if never using the result
Paul R. Eggert [Sun, 18 Jul 2010 19:19:18 +0000 (12:19 -0700)] 
tar: no need to report getcwd error if never using the result

* src/misc.c (struct wd): Rename 'saved' to 'err', with new semantics.
(chdir_arg, chdir_do): Adjust to new semantics.  Do not report an
error merely because save_cwd fails; report an error only if
save_cwd's result is needed later.
* tests/extrac09.at: New file, to test for bug that was fixed.
* tests/testsuite.at: Include it.
* tests/Makefile.am (TESTSUITE_AT): Add it.

13 years agotar: go back to absolutifying filenames in normalize_filename for now
Paul R. Eggert [Fri, 16 Jul 2010 17:25:02 +0000 (10:25 -0700)] 
tar: go back to absolutifying filenames in normalize_filename for now

* src/misc.c (normalize_filename): For now, go back to making
filenames absolute, even though this causes 'tar' to fail when
getcwd fails.  However, do not attempt to resolve ".." as this
does not work with symlinks.  Also, do the right thing with
leading file system prefixes and on hosts where // != /.

13 years agoAllow for size suffixes in -L and --record-size options.
Sergey Poznyakoff [Sat, 17 Jul 2010 08:38:08 +0000 (11:38 +0300)] 
Allow for size suffixes in -L and --record-size options.

* src/tar.c (TAR_SIZE_SUFFIXES): New define.
(parse_opt): Allow for size suffixes in arguments to
-L and --record-size options.
* NEWS, doc/tar.texi: Update.

13 years agotar: don't crash if getcwd fails
Paul R. Eggert [Thu, 15 Jul 2010 18:24:39 +0000 (11:24 -0700)] 
tar: don't crash if getcwd fails

* src/extract.c: Don't include xgetcwd.h.
(extract_dir): stat "." rather than statting getcwd's output.
* src/misc.c (normalize_filename_x): Rewrite so as not to resolve
/../, which can't be done reliably in the presence of symlinks.
Don't reject valid names such as ".".
(normalize_filename): Don't make it absolute; that way, we don't
have to invoke xgetcwd which might fail.  Don't bother to realloc
at the end, since that uses time and now saves little space.
(chdir_do): Don't crash if xgetcwd fails.
* tests/Makefile.am (TESTSUITE_AT): Add listed03.at.
* tests/listed03.at: New file.
* tests/testsuite.at: Include listed03.at.

13 years agoKeep a detailed map of archive members stored in the record buffer.
Sergey Poznyakoff [Sun, 11 Jul 2010 16:56:45 +0000 (19:56 +0300)] 
Keep a detailed map of archive members stored in the record buffer.

A separate map (bufmap) provides information for creating
multi-volume continuation headers.

* src/buffer.c (bufmap): New struct.
(bufmap_head, bufmap_tail, inhibit_map): New variables.
(mv_begin_write): New function.
(mv_begin): Rename to mv_begin_read. Rewrite using mv_begin_write.
All callers changed.
(mv_total_size): Remove.
(bufmap_locate, bufmap_free, bufmap_reset): New functions.
(_flush_write): Update bufmap.
(close_archive): Free bufmap.
(add_chunk_header): Take a bufmap argument.
(gnu_add_multi_volume_header): Likewise.
(add_multi_volume_header): Likewise.
(_gnu_flush_write): Rewrite using bufmap.
(real_s_name, real_s_totsize)
(real_s_sizeleft)
(save_name, save_totsize, save_sizeleft): Removed. All
uses updated.
(mv_size_left): Update bufmap_head.
(mv_end): Rewrite.
(multi_volume_sync): Remove.

* src/common.h (mv_begin_write): New prototype.
(mv_begin): Rename to mv_begin_read.
* src/create.c: Use mv_begin_write instead of mv_begin.
Remove calls to mv_size_left and mv_end.
* src/sparse.c: Likewise.

* tests/multiv07.at: Close stdin.
* tests/spmvp00.at: Update AT_KEYWORDS.
* tests/spmvp10.at: Likewise.

* tests/multiv08.at: New testcase.
* tests/Makefile.am, tests/testsuite.at: Add multiv08.at.

13 years agoVersion 1.23.90
Sergey Poznyakoff [Sun, 11 Jul 2010 16:36:43 +0000 (19:36 +0300)] 
Version 1.23.90

* NEWS, configure.ac: Version 1.23.90
* doc/tar.texi: Document the use of lbzip2.

13 years agoFix exclusion of long file names when extracting from pax format archives.
Sergey Poznyakoff [Mon, 28 Jun 2010 13:56:54 +0000 (16:56 +0300)] 
Fix exclusion of long file names when extracting from pax format archives.

* src/list.c (read_and): Call decode_header before attempting
name_match.
(list_archive): Remove call to decode_header.

* src/compare.c (diff_archive): Remove call to decode_header.
* src/extract.c (extract_archive): Likewise.

* test/exclude06.at: New test case.
* tests/testsuite.at: Include exclude06.at.
* tests/Makefile.am (TESTSUITE_AT): Add exclude06.at.

13 years agoMinor fix.
Sergey Poznyakoff [Sun, 27 Jun 2010 21:04:49 +0000 (00:04 +0300)] 
Minor fix.

* src/buffer.c (magic): Split the character constant to help
cc recognize character boundaries (7 is a valid hex character).

13 years agoMinor fix.
Sergey Poznyakoff [Sun, 27 Jun 2010 20:42:08 +0000 (23:42 +0300)] 
Minor fix.

* src/buffer.c (magic): Fix xz magic.

13 years agoRemove some lint, found by gcc -W etc.
Paul Eggert [Wed, 16 Jun 2010 20:04:12 +0000 (13:04 -0700)] 
Remove some lint, found by gcc -W etc.

* src/common.h (label_notfound): New decl.
* src/buffer.c (set_volume_start_time, compress_type):
(guess_seekable_archive, open_compressed_archive, init_buffer):
(_flush_write, archive_is-dev, increase_volume_number):
(change_tape_menu, try_new_volume, add_chunk_header):
(multi_volume_sync):
Declare as 'static' if it's not exported.
Use function prototype (void) rather than old-style ().
* src/checkpoint.c (expand_checkpoint_string): Likewise.
* src/incremen.c (dirlist_replace_prefix, makedumpdir, read_incr_db_2):
Likewise.
* src/list.c (print_volume_label): Likewise.
* src/misc.c (normalize_filename_x): Likewise.
* src/names.c (make_name, free_name, check_name_alloc, name_next_elt):
Likewise.
* src/tar.c (tar_list_quoting_style, add_exclude_array):
(set_stat_signal): Likewise.
* src/transform.c (new_transform, _single_transform_name_to_obstack):
(_transform_name_to_obstack): Likewise.
* src/unlink.c (dunlink_alloc): Likewise.

* src/buffer.c (struct zip_magic): Use const when appropriate.
* src/incremen.c (obstack_code_rename, write_directory_file_entry):
Likewise.
* src/sparse.c (COPY_STRING): Likewise.
* src/system.c (dec_to_env, time_to_env, oct_to_env, str_to_env):
(chr_to_env): Likewise.
* src/tar.c (tar_list_quoting_style, set_stat_signal): Likewise.

* src/extract.c (extract_node): Don't return garbage.

* src/names.c: Remove old-style declarations of getgrnam etc.
All modern systems declare these, and it's not worth the hassle
of ignoring the warnings on modern systems for old-style decls.

13 years agoBugfix.
Sergey Poznyakoff [Mon, 17 May 2010 17:22:16 +0000 (20:22 +0300)] 
Bugfix.

* src/incremen.c (make_directory): Retain the slash if it is the
only character in a filename.

14 years agoRecode NEWS back to UTF-8
Sergey Poznyakoff [Fri, 2 Apr 2010 11:24:58 +0000 (14:24 +0300)] 
Recode NEWS back to UTF-8

14 years agoFix the gzip.at test case.
Sergey Poznyakoff [Wed, 31 Mar 2010 21:03:51 +0000 (00:03 +0300)] 
Fix the gzip.at test case.

* tests/gzip.at: Suppress gzip error output, as it can differ
depending on its version etc. Bug reported by Ludovic Courtès.

14 years agoNew option --full-time.
Sergey Poznyakoff [Sun, 28 Mar 2010 09:20:51 +0000 (12:20 +0300)] 
New option --full-time.

* src/common.h (full_time_option): New global.
* src/tar.c (FULL_TIME_OPTION): New constant.
(options): New option --full-time.
(parse_opt): Handle the --full-time option.
* src/list.c (simple_print_header): Pass full_time_option
as the 2nd argument to tartime.
* doc/tar.texi: Update.
* NEWS: Update.

14 years agoMinor fixes in the testsuite.
Sergey Poznyakoff [Sat, 27 Mar 2010 20:41:32 +0000 (22:41 +0200)] 
Minor fixes in the testsuite.

* tests/extrac07.at: Fix a typo (invalid number
of arguments before format list).
* tests/link02.at: Use `ln' instead of `link'.
* tests/link03.at: Likewise.

14 years agoFix coredump.
Sergey Poznyakoff [Sat, 27 Mar 2010 20:24:19 +0000 (22:24 +0200)] 
Fix coredump.

* src/names.c (collect_and_sort_names): Remove
entry from the table before freeing it.

14 years agoFix dead loop on extracting existing symlinks with the -k option.
Sergey Poznyakoff [Sat, 27 Mar 2010 20:02:28 +0000 (22:02 +0200)] 
Fix dead loop on extracting existing symlinks with the -k option.

* src/extract.c (create_placeholder_file)
(extract_link, extract_symlink)
(extract_node, extract_fifo): Handle all possible
return values from maybe_recoverable. This complements
8f390db92fc. Reported by Ico Doornekamp <bug-tar@zevv.nl>.
* NEWS: Update.

14 years agoFix undesired error exit on receiving SIGPIPE.
Sergey Poznyakoff [Sat, 20 Mar 2010 11:14:31 +0000 (13:14 +0200)] 
Fix undesired error exit on receiving SIGPIPE.

* src/tar.c: Do not ignore SIGPIPE.
* tests/sigpipe.at: New testcase.
* tests/Makefile.am, tests/testsuite.at: Add sigpipe.at
* tests/remfiles01.at: Fix error code expectation.
* NEWS: Update.

14 years agoFix --remove-files.
Sergey Poznyakoff [Wed, 17 Mar 2010 09:52:40 +0000 (11:52 +0200)] 
Fix --remove-files.

Tar --remove-files relied on canonicalize_file_name,
which replaces symlinks in file name components with
the directories they point to. Due to this, tar
effectively ignored existence of symbolic links and
was unable to remove a directory that contained any
(Alexander Kozlov <akozlov@nada.kth.se>, 2010-03-15).

* gnulib.modules: Remove canonicalize.
* src/misc.c (normalize_filename): Rewrite
from scratch. The function operates only on
its input string, it makes no attempt to test
components for existence or to resolve symbolic
links.
* tests/Makefile.am (TESTSUITE_AT): Add remfiles03.at.
* tests/testsuite.at: Likewise.
* tests/remfiles03.at: New test case.
* NEWS: Update.

14 years agoBugfixes.
Sergey Poznyakoff [Fri, 12 Mar 2010 07:48:46 +0000 (09:48 +0200)] 
Bugfixes.

* src/buffer.c (check_label_pattern): Initialize result.
* tests/remfiles01.at: Skip if run with root privileges.

14 years agoFix `--test-label' and `--label -r' behavior.
Sergey Poznyakoff [Thu, 11 Mar 2010 15:41:23 +0000 (17:41 +0200)] 
Fix `--test-label' and `--label -r' behavior.

* doc/tar.texi (Including a Label in the Archive): Revise
the section.
* NEWS: Update

* src/buffer.c (open_archive): Check volume label on
ACCESS_UPDATE as well.
* src/list.c (test_archive_label): Rewrite to match the
documentation.
* src/names.c (regex_usage_warning): Return int.
(names_notfound): Rewrite the conditional.
(label_notfound): New function.

* tests/label03.at: New testcase.
* tests/label04.at: New testcase.
* tests/label05.at: New testcase.
* tests/Makefile.am: Add new testcases.
* tests/testsuite.at: Likewise.

14 years agoDoc fixes.
Sergey Poznyakoff [Thu, 11 Mar 2010 11:25:29 +0000 (13:25 +0200)] 
Doc fixes.

* doc/tar.texi: Consistently use lowercase `see' within sentences.
More fixes spotted by Denis Excoffier.
* THANKS: Update.

14 years agoShut up a gcc warning message.
Sergey Poznyakoff [Thu, 11 Mar 2010 10:26:57 +0000 (12:26 +0200)] 
Shut up a gcc warning message.

* src/tar.c (tar_help_filter): Use a separate const
variable to hold returns from gettext. Reported by
Peter Breitenlohner.

14 years agoBugfix.
Sergey Poznyakoff [Thu, 11 Mar 2010 10:19:32 +0000 (12:19 +0200)] 
Bugfix.

* src/names.c (collect_and_sort_names): Initialize prev_name.
Reported by Dmitry V. Levin.

14 years agoVersion 1.23
Sergey Poznyakoff [Wed, 10 Mar 2010 11:23:12 +0000 (13:23 +0200)] 
Version 1.23

* configure.ac, NEWS: Update version number.

14 years agoDoc changes.
Sergey Poznyakoff [Wed, 10 Mar 2010 10:47:23 +0000 (12:47 +0200)] 
Doc changes.

* NEWS: Update.
* THANKS: Update.
* doc/snapshot.texi, doc/snapshot.texi,
doc/sparse.texi, doc/tar-snapshot-edit.texi,
doc/tar.texi: Spellchecked and proof-read. Thanks
to Denis Excoffier.
* gnulib.modules: Remove utime.

14 years agoFix possible overflow in code_timespec (tiny change)
Kamil Dudka [Mon, 8 Mar 2010 10:34:58 +0000 (12:34 +0200)] 
Fix possible overflow in code_timespec (tiny change)

* src/misc.c (code_timespec): ignore invalid values of ns

14 years agoMinor fix in the testsuite.
Sergey Poznyakoff [Mon, 8 Mar 2010 10:31:59 +0000 (12:31 +0200)] 
Minor fix in the testsuite.

* tests/extrac05.at: Skip test if creating
sparse file fails.

14 years agoFix eventual memory override and fd exhaustion in create.c
Sergey Poznyakoff [Mon, 8 Mar 2010 10:27:23 +0000 (12:27 +0200)] 
Fix eventual memory override and fd exhaustion in create.c
Both bugs reported by Kamil Dudka.

* src/create.c (check_exclusion_tags): Do not keep
pointer to a location within tagname: it may change
after xrealloc. Use byte offset instead.
(dump_file0): Close fd before returning without
dumping the directory.

14 years agoMinor change.
Sergey Poznyakoff [Tue, 2 Mar 2010 16:48:20 +0000 (18:48 +0200)] 
Minor change.

* doc/tar.texi: Improve some wording.

14 years agoAdd Lzip support
Antonio Diaz Diaz [Tue, 2 Mar 2010 16:41:41 +0000 (18:41 +0200)] 
Add Lzip support

* configure.ac: Add TAR_COMPR_PROGRAM(lzip)
* doc/tar.texi: Reflect lzip support.
* src/buffer.c (compress_type) <ct_lzip>: New constant.
(magic): Add magic for lzip.
* src/suffix.c (compression_suffixes): Add lz.
* src/tar.c: New option --lzip.

14 years agoMinor fix.
Sergey Poznyakoff [Tue, 2 Mar 2010 16:39:40 +0000 (18:39 +0200)] 
Minor fix.

* tests/exclude05.at: Rewrite awk invocation to avoid
overflowing awk's file table on Solaris.

14 years agoFix large file support.
Eric Blake [Tue, 2 Mar 2010 16:08:07 +0000 (18:08 +0200)] 
Fix large file support.

* scripts/xsparse.c (read_map): Use fseeko.
* src/incremen.c (write_directory_file): Likewise.

14 years agoBugfix
Sergey Poznyakoff [Tue, 2 Mar 2010 09:20:20 +0000 (11:20 +0200)] 
Bugfix

* src/buffer.c (seek_archive): Rewrite size computation
to prevent it from reaching negative values. Based on
report by Denis Excoffier <Denis.Excoffier@free.fr>.

14 years agoSupply more information to the --to-command script.
Sergey Poznyakoff [Thu, 25 Feb 2010 08:34:29 +0000 (10:34 +0200)] 
Supply more information to the --to-command script.

* src/system.c (stat_to_env): Pass information about the current
volume in variables TAR_ARCHIVE, TAR_VOLUME, TAR_BLOCKING_FACTOR,
TAR_FORMAT.
* doc/tar.texi: Document new environment variables.
* NEWS: Likewise.
* configure.ac: Version number 1.22.91.

14 years agoMinor change.
Sergey Poznyakoff [Wed, 17 Feb 2010 14:48:34 +0000 (16:48 +0200)] 
Minor change.

* src/names.c (regex_usage_warning): Fix warning message.

14 years agoUpdate THANKS
Sergey Poznyakoff [Fri, 5 Feb 2010 16:40:43 +0000 (18:40 +0200)] 
Update THANKS

14 years agoBugfix (tiny change)
OndÅ™ej Vašík [Fri, 5 Feb 2010 16:39:53 +0000 (18:39 +0200)] 
Bugfix (tiny change)

* src/xheader.c (xheader_read): Remove unnecessary call
to xheader_init.

14 years agoEnable silent build mode.
Sergey Poznyakoff [Tue, 26 Jan 2010 11:36:33 +0000 (13:36 +0200)] 
Enable silent build mode.

* configure.ac: Require automake 1.11, autoconf 2.63. Enable silent rules.
* NEWS: Update.
* lib/Makefile.am (rmt-command.h): Silent the rule.

14 years agoRead POSIX multivolume archives split at the header boundary.
Sergey Poznyakoff [Mon, 25 Jan 2010 15:03:28 +0000 (17:03 +0200)] 
Read POSIX multivolume archives split at the header boundary.

* src/common.h (read_header_mode): New enum.
(read_header): Change type of the 3rd argument.
* src/list.c (read_header): Change type of the 3rd argument.
All callers updated.
* src/buffer.c (try_new_volume): Allow for volumes split at the
extended/ustar header boundary. This is against POSIX specs, but
we must be able to read such archives anyway.

* tests/multiv07.at: New test case.
* tests/Makefile.am: Add multiv07.at
* tests/testsuite.at: Likewise.

* src/compare.c: Update calls to read_header.
* src/delete.c: Likewise.
* src/update.c: Likewise.

14 years agoMinor change.
Sergey Poznyakoff [Sun, 24 Jan 2010 20:33:57 +0000 (22:33 +0200)] 
Minor change.

* NEWS: Update.
* doc/tar.texi: Update.
* src/create.c (finish_header): Minor change.

14 years agoBugfix (tiny change).
Rob Vermaas [Sun, 24 Jan 2010 20:24:28 +0000 (22:24 +0200)] 
Bugfix (tiny change).

* src/tar.c (format_default_settings)[REMOTE_SHELL]: Fix
misplaced comma.

14 years agoMinor fix.
Sergey Poznyakoff [Sun, 24 Jan 2010 16:09:31 +0000 (18:09 +0200)] 
Minor fix.

* src/incremen.c (read_incr_db_01)
(read_directory_file): Initialize bufsize to 0.
Suggested by noordsij@cs.helsinki.fi.

14 years agoImprove handling of --test-label.
Sergey Poznyakoff [Sun, 24 Jan 2010 14:52:24 +0000 (16:52 +0200)] 
Improve handling of --test-label.

* src/list.c (print_volume_label): New function.
(print_header): Call print_volume_label.
(test_archive_label): New function.
* src/buffer.c (VOLUME_LABEL_APPEND): Remove.
(VOLUME_TEXT, VOLUME_TEXT_LEN): New macros
(drop_volume_label_suffix): New function.
(check_label_pattern): Use drop_volume_label_suffix.
* src/common.h (subcommand): New constant TEST_LABEL_SUBCOMMAND.
(test_label_option): Remove.
(drop_volume_label_suffix): New proto.
(test_archive_label): New proto.
* src/names.c (all_names_found): Remove test for test_label_option.
* src/tar.c (subcommand_string): Handle TEST_LABEL_SUBCOMMAND.
(set_subcommand_option): Improve diagnostics.
(parse_opt): Set subcommand if --test-label is given.
(main): Handle TEST_LABEL_SUBCOMMAND.

14 years agoFix listing of volume labels (in particular in PAX archives).
Sergey Poznyakoff [Fri, 22 Jan 2010 16:09:57 +0000 (18:09 +0200)] 
Fix listing of volume labels (in particular in PAX archives).

* src/buffer.c (match_volume_label): Call set_volume_label.
(check_label_pattern): Get label string
as argument.
(match_volume_label): Handle volume labels stored in
global PAX headers.
* src/common.c (print_header,read_header): Change signature.
(read_header_primitive): Remove prototype.
* src/list.c (recent_global_header): New static.
(list_archive): Always print volume labels.
(read_header_primitive): Remove.
(read_header): Change the signature (all callers updated)
Save the recent global header.
(volume_label_printed): New static.
(simple_print_header): New function (ex-print_header).
(print_header): Change the signature (all callers updated).
For POSIX formats, print first volume header (if set).
* src/xheader.c (xheader_write_global): Write the data
accumulated in xhdr->stk even if keyword_global_override_list
is empty.
(xheader_read): On unexpected EOF, report error instead of
coredumping.
(XHDR_PROTECTED, XHDR_GLOBAL): New defines.
(struct xhdr_tab): Remove `protected' with `flags'. All uses updated.
(decg): If XHDR_GLOBAL bit is set, call the keyword's decode
method instead of adding it to `kwl'.

* src/compare.c: Update calls to read_header.
* src/create.c: Likewise.
* src/delete.c: Likewise.
* src/update.c: Likewise.
* src/extract.c: Likewise.
(extract_volhdr): Do not print "Reading <label>" statement, because
it is inconsistent: it is not printed if the volume begins with a
member continued from the previous volume.

* tests/label01.at: New testcase.
* tests/label02.at: New testcase.
* tests/Makefile.am, tests/testsuite.at: Add new testcases.

14 years agoFix prefix length calculation in ustar mode.
Sergey Poznyakoff [Fri, 22 Jan 2010 15:52:42 +0000 (17:52 +0200)] 
Fix prefix length calculation in ustar mode.

* src/create.c (split_long_name): Fix prefix length
calculation.
(write_ustar_long_name): Improve ustar mode compatibility
with the Sun version.

14 years agoRewrite update algorithm.
Sergey Poznyakoff [Wed, 14 Oct 2009 20:26:52 +0000 (23:26 +0300)] 
Rewrite update algorithm.

* src/common.h (namebuf_t): New typedef.
(namebuf_create, namebuf_free)
(namebuf_name): New prototypes.
(remname): New prototype.
* src/misc.c (struct namebuf): New structure.
(namebuf_create, namebuf_free)
(namebuf_name): New functions.
* src/create.c (dup_dir0): Remove is_avoided_name
checks. This is taken care of in update_archive.
* src/incremen.c (scan_directory): Use namebuf
to produce full file names.
* src/names.c (nametail): Remove extra level of
indirection. All uses updated.
(avoided_name_table, add_avoided_name)
(is_avoided_name): Remove.
* src/update.c (update_archive): Change algorithm.
Instead of adding unmodified files to the avoided_name
table, create namelist so that it contains only
modified files.

* tests/Makefile.am: Add update01.at, update02.at
* tests/testsuite.at: Likewise.
* tests/update.at (AT_KEYWORDS): Add update00.

14 years agoMinor changes.
Sergey Poznyakoff [Wed, 14 Oct 2009 14:55:15 +0000 (17:55 +0300)] 
Minor changes.

* src/tar.c (main): Ignore SIGPIPE.
* src/system.c (sys_child_open_for_compress)
(sys_child_open_for_uncompress): Reset SIGPIPE
in child to default.
* tests/remfiles01.at: Avoid race conditions.
* tests/remfiles02.at: Likewise.

14 years agoBugfix.
Sergey Poznyakoff [Wed, 14 Oct 2009 14:51:19 +0000 (17:51 +0300)] 
Bugfix.

* src/buffer.c (_open_archive): Call guess_seekable_archive
only if the call to open_compressed_archive succeeded.

14 years agoImprove previous changes.
Sergey Poznyakoff [Sat, 10 Oct 2009 16:49:38 +0000 (19:49 +0300)] 
Improve previous changes.

* acinclude.m4: Fix typos.
* gnulib.modules: Add xvasprintf.
* src/common.h: Include xvasprintf.h.
* src/tar.c (options): Remove docstrings for --gzip, --bzip2,
--compress, --lzop, --lzma and --xz.
(tar_help_filter): Generate these using actual values of
*_PROGRAM constants.
(format_default_settings): Use xasprintf.
(parse_opt): Use *_PROGRAM defines instead of hardcoded
program names.

14 years agoAllow installers to specify alternative program names for compression programs.
Sergey Poznyakoff [Sat, 10 Oct 2009 14:29:18 +0000 (17:29 +0300)] 
Allow installers to specify alternative program names for compression programs.

This adds --with-gzip, --with-bzip2 etc. switches to the configure, so that
one can do, e.g. ./configure --with-bzip2=lbzip2 and have lbzip2 executed
whenever user calls `tar --bzip2'.

* acinclude.m4: New file.
* configure.ac: Add TAR_COMPR_PROGRAM invocations for
the supported compressors.
* src/buffer.c (magic): Use *_COMPRESSOR defines instead
of hardcoded program names.
* src/suffix.c (compression_suffixes): Likewise.

14 years agoMinor fix.
Sergey Poznyakoff [Fri, 9 Oct 2009 08:48:11 +0000 (11:48 +0300)] 
Minor fix.

* src/buffer.c (magic): Fix `xz' entry: add the name of the program.
* src/suffix.c (compression_suffixes, nsuffixes): Mark as static.

14 years agoProvide a way to explicitly set mtime for extended header ustar blocks.
Sergey Poznyakoff [Wed, 7 Oct 2009 18:08:29 +0000 (21:08 +0300)] 
Provide a way to explicitly set mtime for extended header ustar blocks.

* src/tar.c (struct textual_date): ts is a copy of the structure,
not a pointer to it. Date is a copy as well, hence the `const' is
taken away.
(get_date_or_file): Return 0/1 depending on success/failure.
Copy timestamp to the `ts' member. Store a copy of the string
in `date'.
(report_textual_dates): Report only if verbose_option is set,
but always free the list.
(expand_pax_option): New function.
(parse_opt): Preprocess the argument to xheader_set_option with
expand_pax_option.
(decode_options): Call report_textual_dates unconditionally.
* src/xheader.c (exthdr_mtime_option, exthdr_mtime)
(globexthdr_mtime_option, globexthdr_mtime): New statics.
(xheader_set_keyword_equal): handle exthdr.mtime and globexthdr.mtime.
(xheader_write): Override `t' argument if a corresponding
exthdr.mtime or globexthdr.mtime option is set.
* NEWS: Update
* doc/tar.texi: Document the changes.

14 years agoUse file's mtime as mtime for its extended header.
Sergey Poznyakoff [Wed, 7 Oct 2009 15:40:07 +0000 (18:40 +0300)] 
Use file's mtime as mtime for its extended header.

This makes two pax archives binary equivalent if they
have the same contents and care is taken to make extended
headers otherwise reproducible, e.g. by using:

  --pax-option=exthdr.name=%d/PaxHeaders/%f,atime:=0

Proposed by Michael D. Adams <mdmkolbe@gmail.com>.

* src/common.h (start_private_header): Take time_t as 3rd param.
(xheader_write): Likewise.
* src/create.c (start_private_header): Take time_t as 3rd param.
All callers updated.
(write_extended): Use file's mtime as mtime for its extended header,
Use current time stamp as mtime for global headers.
(xheader_write): Take time_t as 3rd param.

14 years agoFix bugs in handling the --remove-files option.
Sergey Poznyakoff [Wed, 7 Oct 2009 13:42:06 +0000 (16:42 +0300)] 
Fix bugs in handling the --remove-files option.

Make sure the files are deleted only if they were succesfully stored
to the archive.

* src/exit.c: New file.
* src/unlink.c: New file.
* src/Makefile.am (tar_SOURCES): Add exit.c and unlink.c.
* src/common.h: Include progname.h
(program_name): Remove global.
(records_written): New extern.
(queue_deferred_unlink, finish_deferred_unlinks): New prototypes.
(fatal_exit_hook): New extern.
* src/create.c (create_archive): Call finish_deferred_unlinks.
(dump_hard_link, dump_file0): Don't actually unlink the file,
queue it to deferred_unlinks instead.
* src/delete.c (records_written): Remove extern: declared in
common.h.
* src/extract.c (extract_archive): Set fatal_exit_hook.
(fatal_exit, xalloc_die): Move to exit.c
* src/system.c (sys_wait_for_child): Exit immediately
if the child dies or exits with a non-zero status.
(sys_child_open_for_compress)
(sys_child_open_for_uncompress): Use set_program_name,
instead of setting program_name directly.
* src/tar.c (main): Use set_program_name,
instead of setting program_name directly.

* tests/Makefile.am (TESTSUITE_AT): Add remfiles01.at
and remfiles02.at.
* tests/testsuite.at: Likewise.
* tests/gzip.at: Reflect the above changes.

14 years agoFix bug in OLDGNU format creation.
Sergey Poznyakoff [Sun, 4 Oct 2009 20:37:57 +0000 (23:37 +0300)] 
Fix bug in OLDGNU format creation.

See tests/append02.at for a detailed description

* src/common.h (MODE_FROM_HEADER): Take additional argument.
(mode_from_header): Likewise.
* src/create.c (mode_to_chars): Store all mode bits if
using OLDGNU_FORMAT. This reverses f4e4adea80a.
* src/list.c (decode_header): Use header mode field
to discern between GNU and OLDGNU formats.
(mode_from_header): Store unrecognized mode bits (from 10th up)
in the location pointed to by the third parameter.
* tests/append02.at: Update documentation and references.

14 years agoRestore extra help output.
Sergey Poznyakoff [Wed, 16 Sep 2009 08:52:34 +0000 (11:52 +0300)] 
Restore extra help output.

* src/tar.c (tar_list_quoting_styles): Change first argument to
struct obstack.
(format_default_settings): New function.
(show_default_settings)
(show_default_settings_fs): Removed.
(tar_help): Removed.
(tar_help_filter): New function.
(argp): Set help_filter.
(parse_opt): Fix error message.

14 years agoImprove command line option handling.
Sergey Poznyakoff [Tue, 8 Sep 2009 08:08:49 +0000 (11:08 +0300)] 
Improve command line option handling.

* gnulib.modules: Add argp-version-etc and progname,
use getopt-gnu instead of getopt.
* src/tar.c (HANG_OPTION, USAGE_OPTION)
(VERSION_OPTION): Remove.
(options): Remove corresponding options. Let argp
handle them.
(parse_opt): Likewise.
(_argp_hang): Removed.
(tar_authors): New variable.
(decode_options): Call argp_version_setup.
Do not use ARGP_NO_HELP flag in the call to argp_parse.

14 years agoAvoid overwriting exit_status with a value indicating less important condition.
Sergey Poznyakoff [Tue, 8 Sep 2009 08:04:48 +0000 (11:04 +0300)] 
Avoid overwriting exit_status with a value indicating less important condition.

* src/tar.c (set_exit_status): New function.
* src/common.h (set_exit_status): New prototype.
* src/compare.c: Use set_exit_status instead of
exit_status assignments.
* src/create.c: Likewise.
* src/misc.c: Likewise.

* src/system.c (wait_for_grandchild): Use auto variable
instead of the global exit_status.
* src/incremen.c (scan_directory): Use file_removed_diag
instead of stat_diag.

14 years agoAutomatic detection of seekable archives.
Sergey Poznyakoff [Tue, 8 Sep 2009 07:27:57 +0000 (10:27 +0300)] 
Automatic detection of seekable archives.

* src/buffer.c (guess_seekable_archive): New function.
(_open_archive): Call guess_seekable_archive for archives
open for reading.
(new_volume): Likewise.
* src/common.h (seek_option): New global.
* src/tar.c (options): New option --no-seek.
(parse_opt): --seek and --no-seek set seek_option,
not seekable_archive.
(decode_options): Initialize seek_option to -1.

* NEWS: Update.
* doc/tar.texi: Update.

14 years agoFix testcases.
Sergey Poznyakoff [Thu, 27 Aug 2009 17:12:14 +0000 (20:12 +0300)] 
Fix testcases.

* tests/extrac08.at: Ensure a predictable umask value.
* tests/xform-h.at (xform): do not depend on file name
ordering.

14 years agoFix interaction between --listed-incremental and -C
Sergey Poznyakoff [Thu, 13 Aug 2009 13:45:49 +0000 (16:45 +0300)] 
Fix interaction between --listed-incremental and -C

* src/incremen.c (read_directory_file): Execute eventual -C dir
after opening the snapshot file.
(collect_and_sort_names): Remove call to chdir_do
* tests/incr05.at, tests/incr06.at: Use relative file names for
snapshot files.

14 years agoUpdate for new exclude module from gnulib. Add testcases by Phil Proudman.
Sergey Poznyakoff [Wed, 12 Aug 2009 16:25:29 +0000 (19:25 +0300)] 
Update for new exclude module from gnulib. Add testcases by Phil Proudman.

* src/names.c (is_pattern): Remove.
(regex_usage_warning): Use fnmatch_pattern_has_wildcards instead of
is_pattern.
* src/tar.c: New option --exclude-backups.
(vcs_file_table, backup_file_table): New globals.
(add_exclude_array): New function.
* tests/exclude01.at, tests/exclude02.at,
tests/exclude03.at, tests/exclude04.at,
tests/exclude05.at: New testcases. Supplied by Phil Proudman.
* tests/Makefile.am (TESTSUITE_AT): Add new tests.
* tests/testsuite.at: Add new tests.
* THANKS: Update.

14 years agoRemove src/version.c (reappeared after migration to Git)
Sergey Poznyakoff [Sun, 9 Aug 2009 22:03:31 +0000 (01:03 +0300)] 
Remove src/version.c (reappeared after migration to Git)

14 years agoMinor fixes.
Sergey Poznyakoff [Sun, 9 Aug 2009 08:20:52 +0000 (11:20 +0300)] 
Minor fixes.

* src/misc.c (file_removed_diag): Set exit code to TAREXIT_DIFFERS.

14 years agoMinor fixes
Sergey Poznyakoff [Sat, 8 Aug 2009 19:33:16 +0000 (22:33 +0300)] 
Minor fixes

14 years agoFix handling of files removed during incremental dumps.
Sergey Poznyakoff [Sat, 8 Aug 2009 16:53:54 +0000 (19:53 +0300)] 
Fix handling of files removed during incremental dumps.

Changes to src/create.c and src/incremen.c are partially
based on patch from Alexander Peslyak <solar at openwall.com>.

The new testcases require paxutils commit f653a2b or later.

* src/common.h (struct name): New member `cmdline'.
(dump_file): Change type of the 2nd argument to bool.
(file_removed_diag, dir_removed_diag): New prototypes.
(addname): New argument `cmdline'.
(name_from_list): Change return value.
* src/create.c (dump_dir0, dump_dir): top_level is bool.
(create_archive): Update calls to name_from_list.
Take advantage of the name->cmdline to set top_level argument
during incremental backups.
(dump_file0): top_level is bool.
Do not bail out if a no-top-level file disappears during incremental
backup, use file_removed_diag instead.
(dump_filed): top_level is bool.
* src/incremen.c (update_parent_directory): Silently ignore
ENOENT.  It should have already been reported elsewhere.
(scan_directory): Use dir_removed_diag to report missing directories.
* src/misc.c (file_removed_diag, dir_removed_diag): New functions.
* src/names.c (name_gather): Set ->cmdname.
(addname): Likewise. All uses updated.
(name_from_list): Return struct name const *. All uses updated.

* tests/filerem01.at: New testcase.
* tests/filerem02.at: New testcase.
* tests/Makefile.am, tests/testsuite.at: Add filerem01.at, filerem02.at
* tests/grow.at, test/truncate.at: Use new syntax for genfile --run.

* NEWS: Update.
* doc/tar.texi: Minor fix.

14 years agoOptimize searches for directory structures by keeping a pointer to struct directory...
Sergey Poznyakoff [Sat, 8 Aug 2009 10:16:53 +0000 (13:16 +0300)] 
Optimize searches for directory structures by keeping a pointer to struct directory in struct name.

* src/common.h (struct name): New member `directory' replaces
dir_contents. Rearrange members.
(rebase_directory): Change signature.
(scan_directory): Change signature.
(name_fill_directory)
(directory_contents, safe_directory_contents): New prototypes.
(append_incremental_renames): Change signature.
(replace_prefix): New proto.
* src/compare.c (diff_dumpdir): Use directory_contents + scan_directory.
* src/create.c
* src/incremen.c (replace_prefix): Move to misc.c
(rebase_directory): Rewrite.
(scan_directory): Return pointer to struct directory.
(directory_contents, safe_directory_contents): New functions.
(get_directory_contents): Remove.
(name_fill_directory): New function.
(append_incremental_renames): Rewrite. This also fixes a memory leak.
* src/names.c (name_gather, addname): Reflect changes in struct name.
(add_hierarchy_to_namelist): Rewrite using name_fill_directory and
directory_contents.
(rebase_child_list): Update call to rebase_directory.
(collect_and_sort_names): Optimize

* src/misc.c (replace_prefix): New function.
* src/names.c (add_hierarchy_to_namelist): Use new get_directory_contents.

* tests/incr05.at: New test case.
* tests/incr06.at: New test case.
* tests/Makefile.am, test/testsuite.at: Add incr05.at and incr06.at.

* doc/Makefile.am (check-options): Improve rule.
* doc/tar.texi, NEWS: Update.

14 years agoMinor fixes.
Sergey Poznyakoff [Fri, 7 Aug 2009 19:40:06 +0000 (22:40 +0300)] 
Minor fixes.

* src/common.h (rebase_directory): New prototype.
* src/incremen.c (rebase_directory): Use replace_prefix.
* src/names.c (collect_and_sort_names): Abort if
hash_insert fails.

14 years agoImprove listed incremental dumps.
Sergey Poznyakoff [Fri, 7 Aug 2009 11:52:55 +0000 (14:52 +0300)] 
Improve listed incremental dumps.

The modified algorithm tries to avoid dumping the same
directory twice and ensures the order of the directories
in the resulting archive is the same, whatever their order
on the command line.  It also fixes the operation of
--listed-incremental -C.

* gnulib.modules: Add canonicalize
* src/common.h (incremental_level): New global.
(check_exclusion_tags): first argument is const.
(get_directory_contents): Add third argument.
(zap_slashes, normalize_filename): New prototypes.
(chdir_count): New prototype.
(WARN_VERBOSE_WARNINGS): New define.
(WARN_ALL): Exclude WARN_VERBOSE_WARNINGS.
* src/compare.c (diff_dumpdir): Update the call to get_directory_contents.
* src/create.c (check_exclusion_tags): First argument is const.
Use ISSLASH and DIRECTORY_SEPARATOR instead of referring to '/'.

* src/incremen.c (struct directory): New member `caname'.
(hash_directory_name): Rename to hash_directory_canonical_name. Operate
on the canonical name.
(compare_directory_names): Rename to compare_directory_canonical_names.
Operate on the canonical name.
(make_directory): Take two arguments.
(free_directory): Free caname.
(attach_directory): Create caname.
(find_directory): Use caname for lookups.
(PD_VERBOSE): Remove.
(PD_FORCE_INIT): New define.
(procdir): First argument is const.
Reinitialize directory if PD_FORCE_INIT bit is set.
Do not use PD_VERBOSE or verbose_option for issuing warnings.
Rely on WARNOPT instead.
Always set *entry.
(scan_directory): Take three arguments. The third one is a boolean
which is true if the directory is explicitly mentioned on the command
line.
(get_directory_contents): Remove.  Use scan_directory instead.
All callers updated.
(read_directory_file): Truncate the file if --level=0 is given.
* src/misc.c: Include canonicalize.h
(zap_slashes, normalize_filename): New functions.
(chdir_count): New function.
* src/names.c (add_hierarchy_to_namelist): Take three arguments, as
get_directory_contents and scan_directory.
(collect_and_sort_names): Allow at most one -C, before file name
arguments.
Read directory file after eventual changing to another directory.
Avoid adding the same directory under different pathnames to
the list.
* src/tar.c: New option --level.

* tests/incr03.at, tests/incr04.at, tests/listed01.at,
tests/listed02.at, tests/rename01.at, tests/rename02.at,
tests/rename03.at: Update for new tar behavior.
* tests/multiv01.at: Do not use --listed-incremental.

14 years agoForgotten to push src/warning.c
Sergey Poznyakoff [Wed, 5 Aug 2009 19:18:33 +0000 (22:18 +0300)] 
Forgotten to push src/warning.c

14 years agoImplement the --warning option.
Sergey Poznyakoff [Wed, 5 Aug 2009 10:52:38 +0000 (13:52 +0300)] 
Implement the --warning option.

* src/warning.c: New file.
* src/Makefile.am: Add warning.c
* src/common.h: Provide definitions for warning classes.
(warning_option): New global.
(WARNOPT): New define.
(set_warning_option): New prototype.
* src/tar.c: New option `--warning'.
* src/compare.c: When applicable WARNOPT instead of WARN.
* src/create.c: Likewise.
* src/extract.c: Likewise.
* src/incremen.c: Likewise.
* src/list.c: Likewise.

* NEWS, doc/tar.texi: Update.

14 years agoFix descriptions of some options (tiny change)
Carl Worth [Wed, 5 Aug 2009 07:42:42 +0000 (10:42 +0300)] 
Fix descriptions of some options (tiny change)

14 years agoFix backup handling and restoring file modes of existing directories
Sergey Poznyakoff [Wed, 5 Aug 2009 07:38:50 +0000 (10:38 +0300)] 
Fix backup handling and restoring file modes of existing directories

* NEWS, THANKS: Update
* src/extract.c (extract_dir): reset status to 0 if the
directory already exists.
* src/misc.c (maybe_backup_file): Assign before_backup_name
and clear after_backup_name before checking if we really need
to backup the file.
* tests/backup01.at: New testcase.
* tests/extrac08.at: New testcase.
* tests/Makefile.am, tests/testsuite.at: Add extrac08.at and
backup01.at

14 years agoFix hard links recognition with -c --remove-files
Sergey Poznyakoff [Thu, 30 Jul 2009 20:48:04 +0000 (23:48 +0300)] 
Fix hard links recognition with -c --remove-files

* src/create.c (dump_hard_link): Always look up in the link table
if remove_files_option is set. Patch suggested by Theodore Ts'o
<tytso@mit.edu>.
(check_links): Remove extra newline from the warning message.
* tests/link02.at, tests/link03.at: New testcases.
* tests/Makefile.am (TESTSUITE_AT): Add link02.at and link03.at
* tests/testsuite.at: Include link02.at and link03.at

14 years agoFix handling of hard link targets by -c --transform
Sergey Poznyakoff [Thu, 30 Jul 2009 08:43:16 +0000 (11:43 +0300)] 
Fix handling of hard link targets by -c --transform

* src/create.c (file_count_links): Transform link target
before the look up.
* tests/xform-h.at: New test case.
* tests/Makefile.am (TESTSUITE_AT): Add xform-h.at.
* tests/testsuite.at: Add xform-h.at

14 years agoMinor fix.
Sergey Poznyakoff [Tue, 23 Jun 2009 13:52:33 +0000 (16:52 +0300)] 
Minor fix.

* src/extract.c (file_newer_p): Do not report error on ENOENT

This page took 0.075098 seconds and 4 git commands to generate.