summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2013-11-27shred: provide --remove methods to avoid excessive syncingPádraig Brady
A sync operation is very often expensive. For illustration I timed the following python script which indicated that each ext4 dir sync was taking about 2ms and 12ms, on an SSD and traditional disk respectively. import os d=os.open(".", os.O_DIRECTORY|os.O_RDONLY) for i in range(1000): os.fdatasync(d) So syncing for each character for each file can result in significant delays. Often this overhead is redundant, as only the data is sensitive and not the file name. Even if the names are sensitive, your file system may employ synchronous metadata updates, which also makes explicit syncing redundant. * tests/misc/shred-remove.sh: Ensure all the new parameters actually unlink the file. * doc/coreutils.texi (shred invocation): Describe the new parameters to the --remove option. * src/shred.c (Usage): Likewise. (main): Parse the new options. (wipename): Inspect the new enum to see which of the now optional tasks to perform. * NEWS: Mention the new feature. * THANKS.in: Add reporter Joseph D. Wagner
2013-11-27tail: improve inotify handling of symlinksPádraig Brady
Previous behavior failed to read contents of a (re)appearing file, when symlinked by tail's watched file. Also we now diagnose other edge cases when running in inotify mode, where an initially missing or regular file changes to a symlink. * src/tail.c (main): If any arg is a symlink, use polling mode. (recheck): Diagnose the edge case where a symlink appears during inotify processing. * tests/tail-2/symlink.sh: Test the fix. Mention the edge cases. * tests/local.mk: Reference the new test. * NEWS: Mention the fix. Reported by: Ondrej Oprala
2013-11-27df: add --output=file to directly output specified argumentsPádraig Brady
* src/df.c (usage): Document the new 'file' --output field. (get_dev): Add a new parameter to pass the specified argument from the command line through. Use '-' if a command line parameter is not being used. * doc/coreutils.texi (df invocation): Describe the new 'file' field. * tests/df/df-output.sh: Adjust all fields test, and add a specific test for --output=file. * NEWS: Mention the new feature.
2013-11-27timeout: avoid unlikely issues with --kill-afterPádraig Brady
* src/timeout.c (cleanup): When calling settimeout() from this signal handler, ensure we don't call out to error() or gettext(), which are not async-signal-safe. Also reset the errno which may be cleared by settimeout().
2013-11-27tests: ensure factor tests can be regeneratedPádraig Brady
* tests/local.mk (factor-tests:) Add -f to the mv command that replaces any existing generated tests. This is required to avoid prompts when root initially generates the tests, and they subsequently need to be regenerated by a non root user.
2013-11-27sort: avoid issues when issuing diagnostics from child processesPádraig Brady
* src/sort.c: (async_safe_die): A new limited version of error(), that outputs fixed strings and unconverted errnos to stderr. This is safe to call in the limited context of a signal handler, or in this particular case, between the fork() and exec() of a multithreaded process. (move_fd_or_die): Use the async_safe_die() rather than error(). (maybe_create_temp): Likewise. (open_temp): Likewise. Fixes http://bugs.gnu.org/15970
2013-11-26doc: clarify the operation of ls -kPádraig Brady
* src/ls.c (usage): Mention -k only changes the display for disk usage (directory total, and ls -s), and imply that it can be overridden (by --block-size, and -h). * doc/coreutils.texi (block size): Mention that ls -k handling is different to other utilities. Addresses http://bugs.gnu.org/14525
2013-11-23dircolors: add a new entry to colorize 'lz4' filesJohn
* src/dircolors.hin: Add entry for the speed optimized 'lz4' compressor.
2013-11-22tests: enhance rm test regarding "." and ".."Bernhard Voelker
Recent commit 2da7009d changed the error diagnostic of rm(1) trying to remove "." or "..". Enhance the corresponding test. * tests/rm/r-4.sh: Ensure rm(1) outputs the expected error diagnostic.
2013-11-21maint: avoid perl warning in sc_check-AUTHORSBernhard Voelker
With newer perl, "make syntax-check" issues many warnings like: -i used with no filenames on the command line, reading from STDIN. * cfg.mk (sc_check-AUTHORS): Remove the -i flag in the perl invocation as it is reading from a pipe.
2013-11-21doc: enhance diagnostic when rm skips "." or ".." argumentsBernhard Voelker
The error diagnostic "rm: cannot remove directory: '.'" does not give the user a hint for the reason. Issue a clearer error message. * src/remove.c (rm_fts): Enhance the error diagnostic in the above case to emphasize that skipping is done deliberately. In the corresponding comment, mention that POSIX mandates this behavior. Likewise in the subsequent comment for skipping "/". * doc/coreutils.texi (rm invocation): In the paragraph describing the above behavior, mention that POSIX mandates it.
2013-11-18tests: fix false rm -I test failure when run as rootPádraig Brady
Fix a recent regression introduced in commit v8.21-127-g5ee7d8f Also related to this is the recent query about root run `rm -I` ignoring the mode bits of a file: https://bugzilla.redhat.com/1013171 * tests/rm/interactive-once.sh: Avoid the messages and corresponding file presence checks with write protected files when running as root.
2013-11-17stty: add support for mark/space parityColin Leitner
This adds support for using a constant or "stick" parity bit. * src/stty.c (usage): Mention the new flag. * tests/misc/stty.sh: Adjust for the new flag. * NEWS: Mention the improvement. * docs/coreutils.texi (stty invocation): Mention the new flag.
2013-11-11base64: improve encoding I/O efficiencyPádraig Brady
Since the I/O overhead is significant to the relatively simple processing done by this utility, use fputs() rather than fputc() to output '\n'. Time to process a 100MiB file was measured to decrease from 0.417s to 0.383s, i.e. an 8% improvement. Related to these changes, is a processing improvement in gnulib, which increases throughput by 60% when processing full buffers, which improves processing of a 100MiB file with standard wrapped output, down to 0.256s. http://git.sv.gnu.org/gitweb/?p=gnulib.git;a=commit;h=43fd1e7b Also increase the encoding buffer size from 3 to 30KiB. This was seen to give a further 8% improvement, taking processing time down to 0.235s in the wrapped output case. The decoding size buffer is not adjusted, due to the noted caveat with --ignore-garbage. * src/base64.c (BLOCKSIZE): Split into ENC_ and DEC_ variants, with the former increased from 3KiB to 30KiB. (wrap_write): Use the simpler fputc() rather than fputs() to output the '\n' character. Also check against EOF rather than < 0 for errors. (do_encode): Likewise. * NEWS: Mention the large increase in performance, which with the I/O improvements in coreutils and the processing improvement in gnulib, amount to about a 60% throughput increase.
2013-11-08shred: avoid data write pass with --size=0Pádraig Brady
* src/shred.c (dopass): Exit early to avoid redundant heap allocation, and more importantly avoiding a file sync when we're writting no data, as this can have side effects. Also with --verbose, this avoids printing of "pass status" which could be confusing as to whether data was actually written. * tests/misc/shred-passes.sh: Ensure the status for data passes are not written when not doing any data writes.
2013-11-08shred: increase I/O block size for periodic pattern casePádraig Brady
* src/shred.c (dopass): In the periodic pattern case increase the I/O block size from 12KiB to 60KiB (also a multiple of 3 and 4096). * NEWS: Adjust accordingly.
2013-11-08shred: fix direct I/O failures for last write to filePádraig Brady
Since direct I/O is now enabled with commit v8.21-139-gebaf961 we must handle the case where we write an odd size at the end of a file (with --exact), or we specify an odd --size that is larger than 64KiB, or in the very unlikely case of a device with an odd size. This issue was present since direct I/O support was first added in v5.3.0, but latent since v6.0. Theoretically this could have also been an issue after that on systems which didn't have alignment constraints, but did have size constraints for direct I/O. * src/shred.c (dopass): On the first pass for a file, always retry a write that fails with EINVAL, so we handle direct I/O failure at either the start or end of the file. Adjust the comment as the original case is out of date and implicitly handled by this more general fix. * tests/misc/shred-exact.sh: Add a test case. * NEWS: Add a "bug fix" entry for shred since there are two related issues now fixed.
2013-11-07cp: fix --link regarding the dereferencing of symbolic linksGian Piero Carrubba
* src/copy.c (create_hard_link): Add a bool 'dereference' parameter, and pass AT_SYMLINK_FOLLOW as 'flags' to linkat() when dereference is true. (should_dereference): Add new 'bool' function to determine if a file should be dereferenced or not. (copy_internal): Use the above new should_dereference() and remember its return value in a new local bool 'dereference' variable. Use that in all three calls to create_hard_link(). * src/cp.c (main): after parsing the options, if x.dereference is still DEFEF_UNDEFINED and the x.recursive is true, then only set x.dereference to DEREF_NEVER iff --link was not specified. * doc/coreutils.texi (cp invocation): Mention that cp(1) does not follow symbolic links in the source when --link is specified. Likewise in the description of the -R option when used together with that option. * tests/cp/same-file.sh: Adapt the expected results for the -fl, the -bl and the -bfl tests. * tests/cp/link-deref.sh: Add a new test. * tests/local.mk (all_tests): Reference the above new test. * NEWS (Changes in behavior): Mention the change. This fixes http://bugs.gnu.org/15173 Co-authored-by: Bernhard Voelker <mail@bernhard-voelker.de>
2013-11-06shred: write larger chunks when possiblePádraig Brady
* src/shred.c (dopass): When not needing to write periodic patterns, use a 64KiB block size to reduce the number of write system calls.
2013-11-05shred: enable direct I/O when possiblePádraig Brady
Commit v5.92-1057-g43d487b introduced a regression in coreutils 6.0 where it removed the page alignment of the buffer to write, thus disabling direct I/O. We want to use direct I/O when possible to avoid impacting the page cache at least, as we know we don't want to cache the data we're writing. * src/shred.c (dopass): Allocate the buffer on the heap, while using a more general calculation to allow to have the output size independent from the fillpattern() size constraint of a multiple of 3. Also we dispense with the union as it's no longer needed given we're aligning on a page boundary and thus don't need to explicitly handle uint32_t alignment.
2013-11-01md5sum, sha*sum: improve help for --check related optionsPádraig Brady
* src/md5sum.c (usage): s/three/four/ in the message pertaining to the --check related options. Also clarify that --strict is just significant for the formatting of the checksum lines. Also since we're changing both strings, move the --strict description in with the description of the other options and order alphabetically. * THANKS.in: Added reporter: Daniel Mach
2013-11-01maint: simplify printing of md5sum file namesPádraig Brady
* src/md5sum.c (main): Add a comment as to why we continue to escape names that do not have '\n' but do have '\\' chars. (print_filename): Use the predetermined boolean to decide whether to escape or not, so that in the common case we can output the file name directly, rather than inspecting each char. * tests/misc/md5sum.pl: Add case to show '\\' chars cause escaping. * tests/misc/sha1sum.pl: Likewise.
2013-11-01build: fix dependencies of man/sha*sum.1Bernhard Voelker
Although the above man pages depend on src/md5sum.c as a shared source, the build of the man pages directly requires their own executables to exist. * man/local.mk (man/sha1sum.1): Change the dependency from 'src/md5sum' to 'src/sha1sum'. (man/sha224sum.1): s/md5sum/sha224sum/ (man/sha256sum.1): s/md5sum/sha256sum/ (man/sha384sum.1): s/md5sum/sha384sum/ (man/sha512sum.1): s/md5sum/sha512sum/ Reported by Pádraig Brady in http://lists.gnu.org/archive/html/coreutils/2013-11/msg00006.html
2013-10-15dircolors: add putty-256color terminal typeMike Frysinger
* src/dircolors.hin: Add putty-256color Reported-by: Thomas D. <whissi@whissi.de>, via http://bugs.gentoo.org/486786 Fixes http://bugs.gnu.org/15624
2013-10-15maint: update the instructions for building prerequisitesPádraig Brady
* README-prereq: Update as per the latest required versions in bootstrap.conf. Also add a missing cd command. Reported by Aaron Davies Fixes http://bugs.gnu.org/15612
2013-10-11cp: correct error message for invalid arguments of '--no-preserve'Ondřej Vašík
* src/cp.c (decode_preserve_arg): Correct error message for invalid arguments of '--no-preserve'. Reported by M.Vadkerti in http://bugzilla.redhat.com/1018206 Fixes http://bugs.gnu.org/15588
2013-10-10doc: clarify the example for cp --preserve=linksPádraig Brady
* doc/coreutils.texi (cp invocation): Give more detail about what's happening in the example, explicitly calling out the --no-dereference option required to make the -H and -L options significant. Also mention the option order significance of the -H and -L options. Fixes http://bugs.gnu.org/15579
2013-10-07mktemp: fix incorrect exit status from previous commitPádraig Brady
* src/mktemp.c (main): Use an exit() strategy consistent with the previous clauses dealing with optional error messages to ensure we exit with the correct status in all cases. Prompted by the continuous integration build failure at: http://hydra.nixos.org/build/6412979
2013-10-06mktemp: with --quiet, only suppress I/O errorsPádraig Brady
The reason for having a --quiet option is to suppress only some subset of possible errors. The most useful separation here is with usage/internal errors, and errors due to file creation etc. (i.e. I/O errors). * src/mktemp.c (main): Match the --help and info docs and only suppress the file/dir creation error messages. * tests/misc/mktemp.pl: Adjust accordingly.
2013-10-06mktemp: synchronize the -p option with docsPádraig Brady
* src/mktemp.c (usage): Synchronize the -p option description with the logic and info docs. I.E. that -p is just an alias of --tmpdir. Also for consistency treat --tmpdir='' the same with or without -t. I.E. always ignore the --tmpdir option if the param is empty. Fixes http://bugs.gnu.org/15425
2013-10-06doc: expand the texinfo examples for the paste commandKarl Berry
* doc/coreutils.texi (paste invocation): Move the synopsis to the top. Provide examples for the different type of operations possible. Add a specific common example to join consecutive lines with a space.
2013-09-26rm: with -I, prompt before deleting a write protected fileSergio Durigan Junior
This regression was introduced in commit v6.7-71-g0928c24 * src/rm.c (main): Make the -I option behave like --interactive=once. * tests/rm/interactive-once.sh: Add cases for single and multiple files. * NEWS: Mention the bug fix. Fixes http://bugs.gnu.org/9308
2013-09-22maint: move all id(1) tests to the same directoryPádraig Brady
* tests/misc/id-context.sh -> tests/id/context.sh * tests/misc/id-setgid.sh -> tests/id/setgid.sh * tests/misc/id-uid.sh -> tests/id/uid.sh * tests/misc/id-zero.sh -> tests/id/zero.sh * tests/local.mk: Reference the renamed tests
2013-09-22tests: parameterize the "root" usernamePádraig Brady
* tests/misc/chroot-credentials.sh: Don't assume uid 0 has the "root" name, nor any name for that matter.
2013-09-22maint: remove unused parameters to parse_user_spec()Pádraig Brady
* src/chown.c (main): Since "name" parameters to parse_user_spec() are now optional, just pass NULL for those unused parameters. * src/chroot.c (main): Likewise.
2013-09-22id: support specifying the user by user IDPádraig Brady
* src/id.c (usage): Remove 'name' from the synopsis, implying that one can also specify by user ID. (main): Like chown(1), call parse_user_spec() to implement user name or ID lookup with appropriate precedence. * doc/coreutils.texi (id invocation): Mention that a user ID is supported and how '+' affects lookup order. * tests/misc/id-groups.sh: Remove test now subsumed into... * tests/misc/id-uid.sh: New test covering new interface. * tests/local.mk: Rename the test. * NEWS: Mention the new feature. Addresses http://bugs.gnu.org/15421
2013-09-22build: update gnulib submodule to latest; also bootstrap to latestPádraig Brady
Notes tests/init.sh is still in sync with gnulib. * bootstrap: Update to latest. * gnulib: Sync many fixes/changes, including: a fix for http://bugs.gnu.org/15066 and preparation for http://bugs.gnu.org/15421
2013-09-22tests: avoid a failure when there isn't a name for all user IDsPádraig Brady
* tests/misc/id-zero.sh: Don't check exit status when in -n mode. Prompted by the continuous integration build failure at: http://hydra.nixos.org/build/6196762
2013-09-21id: add -z, --zero optionBernhard Voelker
* src/group-list.h (print_group_list): Add a parameter for the delimiter of type char. * src/group-list.c (print_group_list): Likewise, and use it instead of a white space character to delimit the group entries. * src/groups.c (main): Pass white space character to print_group_list(). * src/id.c (longopts): Add array element for the new long option. (usage): Document the new option. While at it, fix the alignment of the descriptions to match that of HELP_OPTION_DESCRIPTION. (main): Define the bool flag opt_zero indicating the use of the new option. In the getopt_long loop, handle it. Output an error diagnostic in the case the --zero option has been specified together with the default format. In the case of -gG, pass either a NUL or a white space character to print_group_list() - depending on the above new flag. Likewise change the printing of the final newline character: output a NUL instead if the --zero option has been specified. * doc/coreutils.texi (id invocation): Document the new option. While at it, move the @exitstatus macro down after the macro @primaryAndSupplementaryGroups in order to be consistent with other texinfo documents. (groups invocation): Move @exitstatus down after the macro @primaryAndSupplementaryGroups here, too. * tests/misc/id-zero.sh: Add new test exercising the new option. * tests/local.mk (all_tests): Reference it. * NEWS (New features): Mention the new option. Fixes http://bugs.gnu.org/9987
2013-09-12maint: avoid patching help2manBernhard Voelker
Commit cde1ea0e separated the coreutils-specific patches from help2man. Most changes had been made to accommodate to the coreutils style guide, i.e., to avoid syntax-check failures like sc_long_lines. Yet 2 changes had to be put into the patch help2man.diff. But this added the dependency to patch(1) in distribution builds. Incidentally, the 2 remaining parts of the patch can easily be done outside of help2man. Therefore, this commit partly reverts the recent separation of help2man into 'help2man.in' and 'help2man.diff', and instead uses the original help2man script. * man/help2man.in: Rename to ... * man/help2man: ... this file. * man/help2man.diff: Remove. * man/local.mk (mandeps): Remove man/help2man. (man/help2man): Remove recipe. (.x.1): Add the --info-page option when calling help2man in order to change the name of the texinfo manual from the default, "info PRG", to "info coreutils 'PRG invocation'". Furthermore, use an sed pattern to remove the sentence starting with "For complete documentation". * .gitignore (/man/help2man): Remove entry. * .x-update-copyright: Replace the entries for the files 'man/help2man.diff' and 'man/help2man.in' by 'man/help2man'. * cfg.mk (sc_long_lines): Instead of 'man/help2man.in', exempt 'man/help2man' from this test. (sc_po_check): Likewise. (sc_space_tab): Instead of 'man/help2man.diff', exempt 'man/help2man' from this test. (sc_trailing_blank): Likewise. (sc_prohibit_tab_based_indentation): Instead of 'man/help2man.in' and 'man/help2man.diff', exempt 'man/help2man'. * man/dummy-man: Recognize the option --info-page=... as no-op.
2013-09-12maint: use help2man configured with --disable-nlsBernhard Voelker
Prompted by the continuous integration build failure at: http://hydra.nixos.org/build/6038769 The previously committed 'help2man' requires a Perl module which does not seem to be installed everywhere - and which is not needed for our purposes: Can't locate Locale/gettext.pm in @INC BEGIN failed--compilation aborted at ./man/help2man line 28. This module was pulled in automatically by the default configure call. Use the NLS-disabled version instead. * man/help2man.in: Use help2man configured with the --disable-nls option to avoid the dependency to the above Perl module. * man/help2man.diff: Adapt the line numbers of the hunks in the coreutils-specific patch for help2man to apply without fuzz. Reported by Pádraig Brady.
2013-09-10build: fix corrupted patch causing bootstrap failuresPádraig Brady
The patch was corrupted in commit v8.21-50-g7b65f8e * gl/modules/tempname.diff: Fix the offsets so that the patch applies cleanly. Note that this was only apparent with patch < 2.6. With patch >= 2.6, patch will not indicate an error applying the second hunk of the patch and silently ignore it. I double checked that all patches now apply cleanly by adjusting gnulib-tool to run patch with --fuzz=0 which might be advisable going forward, even on a per project basis. The silent ignoring of hunks by newer patch(1) has been reported. Fixes http://bugs.gnu.org/15255
2013-09-09maint: update help2man to 1.43.3Bernhard Voelker
Instead of diverging further from the upstream GNU help2man project (http://www.gnu.org/software/help2man/), hold a copy of the original script and keep track of our changes in a separate patch file. The man pages created with the new version show the following, non-invasive differences: a) command options in the EXAMPLE sections are no longer in bold format, b) file names are underlined now consistently. * man/help2man: Rename to ... * man/help2man.in: ... this file, and update content from the upstream GNU help2man project. * man/help2man.diff: Add patch file for help2man to remove the sentence "For complete documentation ..." (see commit 5d4f09d8), and to emit "info coreutils 'PROG invocation'" into the man pages (77abf69a). * man/local.mk (mandeps): Add help2man to the dependencies of the man pages. (man/help2man): Add rule to generate this script from the upstream help2man.in file and the help2man.diff patch. * .gitignore: Add man/help2man as it is no longer version controlled. * cfg.mk (sc_long_lines): Exempt help2man.in from this check. (sc_po_check): Likewise. (sc_space_tab): Likewise. (sc_trailing_blank): Exempt man/help2man.diff from this check. (sc_prohibit_tab_based_indentation): Instead of help2man, now exempt both help2man.in and help2man.diff from this test. * .x-update-copyright: Add new file and add the above new help2man files as well as the COPYING file.
2013-09-05ls: fix possible incorrect exit status when recursing directoriesFUJIWARA Katsunori
If there is an error reading a directory that was referenced through recursion, rather than directly on the command line, then exit with the "less serious" exit code, rather than the "serious" exit code reserved for command line arguments. This issue was introduced in commit v5.2.1-1908-gb58dea5 * src/ls.c (print_dir): Ensure that the command_line_arg param is false for directories being recursed into. * NEWS: Mention the bug fix. Fixes http://bugs.gnu.org/15249
2013-09-01maint: update out of date confusing commentsPádraig Brady
* src/copy.c (copy_internal): Change mention of the removed --reply=no option, to the similar in this context --no-clobber. * src/sort.c: SI and IEC suffixes can now be mixed when --human-numeric.
2013-08-29df: fix "blocks" translation in headerPádraig Brady
* src/df.c (get_header): Get the translation of "blocks" here, rather than just marking the string for translation. Fixes http://bugs.gnu.org/15054
2013-08-10doc: clarify when seq endsBernhard Voelker
* doc/coreutils.texi (seq invocation): Add a sentence clarifying that seq terminates when LAST becomes smaller than the current number plus INCREMENT. * src/seq.c (usage): Likewise. Fixes http://bugs.gnu.org/15068
2013-08-07doc: use more modern file system type examples in df descriptionBernhard Voelker
* doc/coreutils.texi (df invocation): In the example list of common file system types, exchange the entries which are not so common anymore (4.2, ufs, efs, hsfs, pcfs) by far more prominent ones (ext2, ext3, ext4, xfs, btrfs, iso9660, ntfs, fat).
2013-08-07doc: fix typo in description of dfFilipus Klutiero
* doc/coreutils.texi (df invocation): s/pseude/pseudo/ * THANKS.in (Filipus Klutiero): Remove entry, now that it will be automatically included in the generated THANKS file. Fixes http://bugs.gnu.org/15041
2013-08-05doc: more semicolons instead of periods in option descriptionsBenno Schulenberg
Also slightly rephrase some descriptions for extra clarity, and add more consistent indentation. * src/df.c (usage): Semicolon, no final period. * src/du.c (usage): Likewise, plus indentation and clarifying words. * src/ls.c (usage): Semicolon, rephrasings, added parentheses for clarity, indentation. * src/rm.c (usage): Semicolons. * src/tail.c (usage): Adjust -f description to prefer explanatory language instead of option syntax.