summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Add missing option to manpage and remove duplicate operationHEADmasterBenno Schulenberg2023-05-012-11/+9
| | | | | | | * doc/tar.1: Add needed option -f after operation -A, sort operation -t alphabetically, add --file after --concatenate, consistently use long option --file in the GNU-style section, and delete duplicate --update. * doc/tar.texi: Add small missing word, and lowercase a letter.
* 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.