summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Change some wording in doc/intern.texiSergey Poznyakoff2023-04-181-3/+4
|
* Exclude VCS directory with writing from an archiveAnton Makrushin2023-04-184-1/+93
| | | | See https://savannah.gnu.org/bugs/?62859
* Detect EOF when deleting from archive.Sergey Poznyakoff2023-02-214-0/+47
| | | | | | | | | See https://savannah.gnu.org/bugs/?63823 * src/delete.c (flush_file): Break the loop on EOF. * tests/delete06.at: New test. * tests/Makefile.am: Add new test. * tests/testsuite.at: Likewise.
* Changes in extended header decoderSergey Poznyakoff2023-02-111-3/+12
| | | | | * src/xheader.c (decode_time): Fix error detection. (raw_path_decoder): Ignore empty paths.
* Prevent dead loop in extract_fileSergey Poznyakoff2023-02-111-6/+7
| | | | | | | * src/extract.c (maybe_recoverable): If make_directories indicates success, suppose some intermediate directories have been made, even if in fact they have not. That's necessary to avoid dead loops when maybe_recoverable is called with the same arguments again.
* Fix boundary checking in base-256 decoderSergey Poznyakoff2023-02-111-2/+3
| | | | | * src/list.c (from_header): Base-256 encoding is at least 2 bytes long.
* Adjust to Gnulib macro renamingPaul Eggert2023-01-062-2/+2
| | | | | * src/Makefile.am, tests/Makefile.am (LDADD): Gnulib renamed LIB_HAS_ACL to FILE_HAS_ACL_LIB.
* build: update gnulib, paxutils submodules to latestPaul Eggert2023-01-062-0/+0
|
* Go back to single-file bootstrapPaul Eggert2023-01-066-1386/+1326
| | | | | | | | | | Gnulib now supports a single-file bootstrap with --pull and --gen options, in place of the three files autopull.sh, autogen.sh, bootstrap-funclib.sh. This keeps the top level a bit cleaner. * bootstrap: Sync from Gnulib build-aux/bootstrap instead of from top/bootstrap. * autopull.sh, autogen.sh, bootstrap-funclib.sh: Remove.
* Fix ‘assume’ includePaul Eggert2023-01-061-0/+1
| | | | * src/tar.c: Include verify.h, needed for ‘assume’.
* Update copyright yearsPaul Eggert2023-01-06317-317/+318
| | | | | | | | | UPDATE_COPYRIGHT_USE_INTERVALS=1 \ gnulib/build-aux/update-copyright \ $(git ls-files | sed -e '/^gnulib$/d /^paxutils$/d /^COPYING$/d /\/fdl.texi$/d')
* Optionally warn about missing zero blocks at the end of the archiveSergey Poznyakoff2022-12-295-97/+243
| | | | | | | | | | | | | | | | (In response to savannah bug #63574) * doc/intern.texi: Document actual tar behaviour in regard to missing end-of-file marker. * doc/tar.texi: Rewrite the "warnings" section. Document --warning=missing-zero-blocks * src/common.h (WARN_MISSING_ZERO_BLOCKS): New constant. (WARN_ALL): Include all warning bits. * src/list.c (read_and): If EOF is reached without seeing end-of-file blocks and the "missing-zero-blocks" warning is requested, warn about the fact. * src/warning.c: New warnings: "missing-zero-blocks", "verbose". (warning_option): Change definition to reflect changes in common.h
* Fix example use of find command in documentationSergey Poznyakoff2022-12-271-2/+6
|
* Fix savannah bug #63567Sergey Poznyakoff2022-12-261-1/+2
| | | | | * src/buffer.c (short_read): Increase records_read only if a full record has been read.
* Fix -Af F bug when F is not a regular filePaul Eggert2022-11-031-37/+12
| | | | | | | | Problem reported by Boris Gjenero in: https://lists.gnu.org/r/bug-tar/2022-11/msg00001.html * src/update.c (append_file): Don’t assume that FILE_NAME is a regular file whose size can be determined before reading. Instead, simply read from the file until its end is reached.
* Fix README-* filesPaul Eggert2022-11-032-37/+20
| | | | | | | | | README-alpha is for alpha releases, which are not from Git or CVS, so omit mention of that. I'm not sure we'll ever do alpha releases, but if we do, README-alpha assumes the tarballs are already bit. Update README-hacking with info that was mistakenly put into README-alpha. Also mention Bison, needed for parse-date.y.
* Fix undefined behavior on bad extended headerPaul Eggert2022-10-271-2/+2
| | | | | * src/xheader.c (locate_handler): Avoid undefined behavior if strlen(keyword) < kwlen.
* Fix savannah bug #63123Sergey Poznyakoff2022-10-221-50/+58
| | | | | | | | | | | | The bug was introduced by commit 79d1ac38c1, which didn't take into account all the consequences of returning RECOVER_OK on EEXIST, in particular interactions with the delayed_set_stat logic. The commit 79d1ac38c1 is reverted (the bug it was intended to fix was actually fixed by 79a442d7b0). Instead: * src/extract.c (maybe_recoverable): Don't call maybe_recoverable if EEXIST is reported when UNLINK_FIRST_OLD_FILES option is set.
* Fix savannah bug #63250Sergey Poznyakoff2022-10-221-0/+1
| | | | * src/buffer.c (magic): Add signature of LZMA files produced by xz.
* Mention previous bug fixPaul Eggert2022-10-071-1/+3
|
* tests: check for recently-fixed bugPaul Eggert2022-10-072-0/+36
| | | | | * tests/exclude17.at: New file. * tests/testsuite.at (AT_CHECK_TIMESTAMP): Add it.
* tar: fix --exclude-vcs-ignores memoryAurélien Martin2022-10-071-0/+1
| | | | | | | | | The function frees the patterns' wordsplit structure without asking add_exclude to reallocate the strings. In many cases, this leads to each file name in the directory being checked against the memory location where it just got reallocated. * src/exclist.c: Use EXCLUDE_ALLOC. Copyright-paperwork-exempt: Yes
* build: update submodules to latestPaul Eggert2022-09-103-0/+3
| | | | | | * src/common.h: Include <inttostr.h> since paxutils no longer does. (STRINGIFY_BIGINT): New macro, copied from older paxutils. (UINTMAX_STRSIZE_BOUND): New constant, also from older paxutils.
* Fix bootstrap.conf when no paxutilsPaul Eggert2022-09-101-1/+3
| | | | | * bootstrap.conf: Don’t assume the paxutils subdirectory already exists, when bootstrapping.
* Fix data loss when acting as filterPaul Eggert2022-09-038-17/+35
| | | | | | | | | | | | | | | | | | | | | This bug was introduced by the recent lseek-related changes. * src/delete.c (delete_archive_members): * src/update.c (update_archive): Copy the member if acting as a filter, rather than lseeking over it, which is possible if stdin is a regular file. * src/list.c (skim_file, skim_member): * src/sparse.c (sparse_skim_file): New functions, for copying when a filter. * src/list.c (skip_file): Remove; replaced with skim_file. All callers changed. (skip_member): Reimplement in terms of skim_member. * src/sparse.c (sparse_skip_file): Remove; replaced with sparse_skim_file. All callers changed. * src/update.c (acting_as_filter): New static var. (update_archive): Set it; this is like delete.c. * tests/delete01.at (deleting a member after a big one): * tests/delete02.at (deleting a member from stdin archive): Also test filter case.
* Fix --delete bug with short readsPaul Eggert2022-09-023-2/+10
| | | | | | * gnulib.modules: Add idx. * src/common.h: Include idx.h. * src/delete.c (move_archive): Don’t botch short reads.
* Do not diagnose same xattr file twicePaul Eggert2022-08-262-44/+17
| | | | | | | | * src/extract.c (set_xattr): Simplify, by having it do only the mknodat and xattrs_xattrs_set, rather than also trying to recover from failure. Caller simplified too. * tests/xattr07.at (xattrs: xattrs and --skip-old-files): Adjust test to match fixed behavior.
* Fix bug with -x --xattr read-only filesPaul Eggert2022-08-264-16/+58
| | | | | | | | | | | | | Problem reported by Kevin Raymond in: https://bugzilla.redhat.com/show_bug.cgi?id=1886540 * src/extract.c (open_output_file): If we already created the empty file, do not open with O_EXCL, or with O_CREAT or O_TRUNC for that matter. Instead, use only O_NOFOLLOW to avoid some races. When estimating current mode, use openflag & O_EXCL rather than overwriting_old_files. (extract_file): Also invert S_IWUSR if it’s not set. * tests/xattr08.at: New test. * tests/Makefile.am, tests/testsuite.at: Add it.
* Avoid quadratic behavior with delayed linksPaul Eggert2022-08-151-94/+139
| | | | | | | | | | | | | | | | | | | Do this by searching a hash table instead of a linked list. Problem reported by Martin Dørum in https://mort.coffee/home/tar/ via Gavin Smith in: https://lists.gnu.org/r/bug-tar/2022-07/msg00003.html * src/extract.c: Include hash.h. Improve performance a bit on non-birthtime hosts (struct delayed_link.has_predecessor): New member. (delayed_link_head): Remove, replacing with ... (delayed_link_table): ... this new variable. All uses of linked list replaced with hash table. (dl_hash, dl_compare): New functions for hash table. (create_placeholder_file): Initialize has_predecessor. (apply_delayed_link): New function, with body taken from most of the old apply_delayed_link. (apply_delayed_links): Use it. Respect has_predecessor. Don’t bother freeing as we are about to exit.
* Improve performance a bit on non-birthtime hostsPaul Eggert2022-08-151-3/+21
| | | | | | | * src/extract.c (HAVE_BIRTHTIME, BIRTHTIME_EQ): New macros. (struct delayed_link, create_placeholder_file, extract_link) (apply_delayed_links): Avoid unnecessary work on platforms like GNU/Linux that lack birthtime.
* Avoid excess lseek etc.Paul Eggert2022-08-155-153/+119
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * src/buffer.c, src/delete.c: Do not include system-ioctl.h. * src/buffer.c (guess_seekable_archive): Remove. This is now done by get_archive_status, in a different way. (get_archive_status): New function that gets archive_stat unless remote, and sets seekable_archive etc. (_open_archive): Prefer bool for boolean. (_open_archive, new_volume): Get archive status consistently by calling get_archive_status in both places. * src/buffer.c (backspace_output): * src/compare.c (verify_volume): * src/delete.c (move_archive): Let mtioseek worry about mtio. * src/common.h (archive_stat): New global, replacing ar_dev and ar_ino. All uses changed. * src/delete.c (move_archive): Check for integer overflow. Also report overflow if the archive position would go negative. * src/system.c: Include system-ioctl.h, for MTIOCTOP etc. (mtioseek): New function, which also checks for integer overflow. (sys_save_archive_dev_ino): Remove. (archive_stat): Now (sys_get_archive_stat): Also initialize mtioseekable_archive. (sys_file_is_archive): Don’t return true if the archive is /dev/null since it’s not a problem in that case. (sys_detect_dev_null_output): Cache dev_null_stat. doc: omit MS-DOS mentions in doc It’s really FAT32 we’re worried about now, not MS-DOS. And doschk is no longer a GNU program.
* Omit MS-DOS mentions in docPaul Eggert2022-08-151-5/+3
| | | | | It’s really FAT32 we’re worried about now, not MS-DOS. And doschk is no longer a GNU program.
* Work around GCC bug 106436Paul Eggert2022-07-251-0/+1
| | | | * src/tar.c (optloc_eq): Use ‘assume’ to pacify GCC bug.
* Avoid unlikely crash when xasprintf returns 0Paul Eggert2022-07-251-9/+24
| | | | | | | Problem caught by GCC 12. * src/tar.c (easprintf): New static function, which never returns a null pointer. All uses of xasprintf replaced by uses of this function.
* Update .gitignorePaul Eggert2022-07-251-21/+22
| | | | * .gitignore: Redo for current sources.
* Fix minor type confusionPaul Eggert2022-07-251-15/+15
| | | | * src/tar.c (decode_options): Don’t assign ‘false’ to a pointer.
* Work around GCC bug 106428Paul Eggert2022-07-251-5/+7
| | | | | * src/names.c (read_next_name): Reword and clarify to avoid GCC bug 106428.
* Work around GCC bug 106427Paul Eggert2022-07-251-3/+7
| | | | | * lib/wordsplit.c (coalesce_segment): Reword to avoid GCC bug 106427.
* Adjust to Gnulib bootstrap revampPaul Eggert2022-07-248-1038/+1501
| | | | | | | | | | * autogen.sh, autopull.sh, bootstrap-funclib.sh: New files, copied from gnulib/top. * bootstrap: Copy from gnulib/top/bootstrap (as opposed to copying from gnulib/build-aux/bootstrap, as we used to). * bootstrap.conf (bootstrap_post_pull_hook) (bootstrap_post_import_hook): New functions. Move commands into these functions as needed.
* * doc/tar.1: Fix --xattrs-exclude typo.Paul Eggert2022-07-111-5/+5
|
* Avoid EOVERFLOW problems in some symlink testsPaul Eggert2022-06-131-16/+12
| | | | | | | | | | * src/extract.c (is_directory_link): New arg ST. Caller changed. (is_directory_link, open_output_file): Use readlinkat, not fstatat, to determine whether a string names a symlink. This avoids EOVERFLOW issues. (extract_dir): Avoid duplicate calls to fstatat when keep_directory_symlink_option && fstatat_flags == 0 and the file is a symlink to an existing file.
* Fix ‘make dist-xz’ bugPaul Eggert2022-06-131-1/+1
| | | | | | Problem reported by Pavel Raiskup in: https://lists.gnu.org/r/bug-tar/2022-06/msg00014.html * bootstrap.conf (copy_files): Also copy DISTFILES.
* Fix commentary in new test casePaul Eggert2022-06-131-9/+1
|
* Fix doc -c typoPaul Eggert2022-06-121-1/+1
| | | | | https://lists.gnu.org/r/bug-tar/2022-06/msg00006.html * doc/tar.texi (Extended File Attributes): Fix typo.
* Update to current Autoconf & GettextPaul Eggert2022-06-124-17/+39
| | | | | | | | | | | * acinclude.m4, configure.ac: Use AS_HELP_STRING, not AC_HELP_STRING. * bootstrap: Sync from Gnulib. * configure.ac: Require Autoconf 2.71 and Gettext 0.21. Use AC_PROG_CC, not AC_PROG_CC_STDC. Prefer AC_COMPILE_IFELSE to AC_TRY_COMPILE. Use AC_CONFIG_FILES. * gnulib.modules: Use gettext-h, not gettext.
* build: update gnulib and paxutils submodules to latestPaul Eggert2022-06-122-0/+0
|
* tar: fix race conditionJames Abbatiello2022-06-101-8/+8
| | | | | | | | | Problem reported in: https://lists.gnu.org/r/bug-tar/2022-03/msg00000.html * src/extract.c (make_directories): Retry the file creation as long as the directory exists, regardless of whether tar itself created the directory. Copyright-paperwork-exempt: Yes
* tar: fix race conditionPaul Eggert2022-06-102-23/+43
| | | | | | | | | Problem reported by James Abbatiello in: https://lists.gnu.org/r/bug-tar/2022-03/msg00000.html * src/extract.c (make_directories): Do not assume that when mkdirat fails with errno == EEXIST that there is an existing file that can be statted. It could be a dangling symlink. Instead, wait until the end and stat it.
* test: new test extrac25.atPaul Eggert2022-06-103-0/+48
| | | | | | * tests/Makefile.am (TESTSUITE_AT): Add extrac25.at. * tests/extrac25.at: New file. * tests/testsuite.at: Include it.
* Warn “file changed as we read it” less oftenPaul Eggert2022-06-093-20/+61
| | | | | | | | | | * src/create.c (dump_file0): Remove an fstatat call that is unnecessary because the file wasn’t read so we can treat the first fstatat as atomic. Warn “file changed” when the file’s size, mtime, user ID, group ID, or mode changes, instead of when the file’s size or ctime changes. Also, when such a change happens, do not change exit status if --ignore-failed-read. Finally, don’t attempt to change atime back if it didn’t change.