--- coreutils-8.23.orig/debian/README.source +++ coreutils-8.23/debian/README.source @@ -0,0 +1,38 @@ +This package uses dpatch to manage all modifications to the upstream +source. Changes are stored in the source package as diffs in +debian/patches and applied during the build. + +To get the fully patched source after unpacking the source package, cd +to the root level of the source package and run: + + debian/rules patch + +Removing a patch is as simple as removing its entry from the +debian/patches/00list file, and please also remove the patch file +itself. + +Creating a new patch is done with "dpatch-edit-patch patch XX_patchname" +where you should replace XX with a new number and patchname with a +descriptive shortname of the patch. You can then simply edit all the +files your patch wants to edit, and then simply "exit 0" from the shell +to actually create the patch file. + +To tweak an already existing patch, call "dpatch-edit-patch XX_patchname" +and replace XX_patchname with the actual filename from debian/patches +you want to use. + +To clean up afterwards again, "debian/rules unpatch" will do the +work for you - or you can of course choose to call +"fakeroot debian/rules clean" all together. + + +--- + +this documentation is part of dpatch package, and may be used by +packages using dpatch to comply with policy on README.source. This +documentation is meant to be useful to users who are not proficient in +dpatch in doing work with dpatch-based packages. Please send any +improvements to the BTS of dpatch package. + +original text by Gerfried Fuchs, edited by Junichi Uekawa +10 Aug 2008. --- coreutils-8.23.orig/debian/changelog +++ coreutils-8.23/debian/changelog @@ -0,0 +1,1321 @@ +coreutils (8.23-3ubuntu1.1) vivid; urgency=medium + + * Add support for correctly processing /proc/self/mountinfo. + * Fix df to prioritize mounts of the root of a device over bind mounts. + (LP: #1432871) + + -- Dave Chiluk Wed, 30 Sep 2015 21:06:59 +0000 + +coreutils (8.23-3ubuntu1) vivid; urgency=low + + * Merge from Debian unstable. Remaining changes: + - debian/rules: Let it cross build: + + Preseed some autoconf tests. + + Don't rebuild the man pages. + - debian/control: + + Depend on acl and strace for autopkgtests. + - debian/tests/upstream: + + Adjust for changed test layout in 8.20. + + Update list of autopkgtest-runnable unit tests (LP: #1246805). + - debian/patches/80_fedora_sysinfo.dpatch + + Make 'uname -i -p' return the real processor/hardware, + instead of unknown. + - debian/patches/99_float_endian_detection: + + Fix detection of floating point endianness. + * update "Remaining changes" to reflect current status + * drop debian/patches/99_test_nohup_tty.dpatch as its upstream + * remove leftover ".failed" patch files from some earlier merge + + -- Michael Vogt Mon, 03 Nov 2014 08:08:11 +0100 + +coreutils (8.23-3) unstable; urgency=low + + * Standards version 3.9.6.0 + * build with verbose make (Closes: #751132) + * add numfmt to package description (Closes: #764698) + * [31] show duplicate remote mounts in df (Closes: #737399) + * [32] cherry pick upstream fix to make info doc references + more reliable (Closes: #760861) + + -- Michael Stone Wed, 29 Oct 2014 20:58:59 -0400 + +coreutils (8.23-2ubuntu3) utopic; urgency=medium + + * Don't run tests during autopkg tests which depend on the test + binaries (getlimits, ginstall). + + -- Matthias Klose Mon, 08 Sep 2014 13:03:00 +0200 + +coreutils (8.23-2ubuntu2) utopic; urgency=medium + + * Update the list of skipped autopkg tests. + + -- Matthias Klose Wed, 03 Sep 2014 19:36:19 +0200 + +coreutils (8.23-2ubuntu1) utopic; urgency=medium + + * Merge with Debian; remaining changes: + - Make 'uname -i -p' return the real processor/hardware, instead of + unknown. + - debian/tests/upstream: Adjust for changed test layout in 8.20. + - Configure with --disable-silent-rules. + - Let it cross build: + + Preseed some autoconf tests. + + Don't rebuild the man pages. + - Re-enable tests, except when cross-building. + - Fix detection of floating point endianness. + - Update list of autopkgtest-runnable unit tests (LP: #1246805). + - Ignore skipped tests in autopkgtest harness. + - Depend on acl and strace for autopkgtests. + + -- Matthias Klose Tue, 02 Sep 2014 22:54:09 +0200 + +coreutils (8.23-2) unstable; urgency=low + + * Added missing replaces (Closes: #760233, #760234) + + -- Michael Stone Mon, 01 Sep 2014 19:52:12 -0400 + +coreutils (8.23-1) unstable; urgency=low + + * New upstream version + * Include realpath command in coreutils package and replace Debian + version of the command from the realpath package (Closes: #730779). + Add transational realpath package to help with upgrades. + (from Robert Luberda ) + * Add build-arch and build-indep targets required by Policy + 3.9.4. (Niels Thykier ) (Closes: #721118) + + -- Michael Stone Mon, 01 Sep 2014 09:56:18 -0400 + +coreutils (8.21-1.2) unstable; urgency=low + + * Non-maintainer upload. + * Ensure config.{sub,guess} are up to date for new arches, using + autotools-dev (Closes: #689611) + * Add aarch64 assembler in longlong.h (from Colin Watson) (Closes: #698330) + + -- Wookey Sat, 12 Apr 2014 01:51:02 +0000 + +coreutils (8.21-1.1) unstable; urgency=medium + + * Non-Maintainer Upload + * Do not install su on hurd-i386 any more (Closes: #737806). + + -- Samuel Thibault Wed, 05 Feb 2014 22:50:43 +0000 + +coreutils (8.21-1ubuntu5) trusty; urgency=medium + + * Pull patch from upstream to fix nohup test with the new bash. + + -- Adam Conrad Mon, 24 Mar 2014 00:42:22 -0600 + +coreutils (8.21-1ubuntu4) trusty; urgency=medium + + * Fix detection of floating point endianness. + + -- Colin Watson Wed, 18 Dec 2013 13:29:08 +0000 + +coreutils (8.21-1ubuntu3) trusty; urgency=low + + * Update list of autopkgtest-runnable unit tests (LP: #1246805). + * Ignore skipped tests in autopkgtest harness. + * Depend on acl and strace for autopkgtests. + + -- Colin Watson Thu, 31 Oct 2013 11:22:35 -0700 + +coreutils (8.21-1ubuntu2) trusty; urgency=low + + * Backport from gnulib upstream (Paul Eggert): + - xvasprintf-tests: port to GCC with hardening flags + + -- Colin Watson Thu, 31 Oct 2013 08:33:23 -0700 + +coreutils (8.21-1ubuntu1) trusty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Make 'uname -i -p' return the real processor/hardware, instead of + unknown. + - debian/tests/upstream: Adjust for changed test layout in 8.20. + - Configure with --disable-silent-rules. + - Let it cross build: + + Preseed some autoconf tests. + + Don't rebuild the man pages. + - (aarch64): Make add_ssaaaa and sub_ddmmss actually work. + * Re-enable tests, except when cross-building. + + -- Colin Watson Thu, 31 Oct 2013 07:24:28 -0700 + +coreutils (8.21-1) unstable; urgency=low + + * New upstream version + * Disable tests by default. I'm not entirely happy about doing this, as the + build tests have uncovered more than one library bug that would have been + problematic, but of late they've failed more because of buildd oddities + than real problems. I am trying this early in the jessie cycle, and will + turn the tests back on if it ends up being an issue. + + -- Michael Stone Sat, 20 Jul 2013 15:45:55 -0400 + +coreutils (8.20-3ubuntu5) raring; urgency=low + + * Backport from gmp upstream: + - (aarch64): Make add_ssaaaa and sub_ddmmss actually work. + + -- Colin Watson Thu, 17 Jan 2013 04:21:35 +0000 + +coreutils (8.20-3ubuntu4) raring; urgency=low + + * Configure with --disable-silent-rules. + * Let it cross build: + - Preseed some autoconf tests. + - Build make-prime-list with the build compiler. + - Don't rebuild the man pages. + + -- Matthias Klose Wed, 12 Dec 2012 18:38:55 +0100 + +coreutils (8.20-3ubuntu3) raring; urgency=low + + * debian/tests/upstream: Adjust for changed test layout in 8.20. + + -- Martin Pitt Fri, 30 Nov 2012 22:08:22 +0100 + +coreutils (8.20-3ubuntu2) raring; urgency=low + + * Avoid PPC64 instructions unless _LP64 is defined. + * Revert build-dependency from gettext:any to gettext, now that gettext is + Multi-Arch: foreign. + + -- Colin Watson Thu, 29 Nov 2012 14:32:40 +0000 + +coreutils (8.20-3ubuntu1) raring; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Make 'uname -i -p' return the real processor/hardware, instead of + unknown. + - Build-depend on gettext:any instead of on gettext, so that apt-get can + properly resolve build-dependencies on the tool when cross-building. + + -- Colin Watson Wed, 28 Nov 2012 03:03:42 +0000 + +coreutils (8.20-3) unstable; urgency=low + + * actually include autopkgtest changes + + -- Michael Stone Sun, 18 Nov 2012 10:17:12 -0500 + +coreutils (8.20-2) unstable; urgency=low + + * Add upstream patch to fix build failure on hppa (Closes: #693578) + * Disable df test which seems to fail on some buildds + * Get rid of realpath (provided by other package) (Closes: #693211) + * Add autopkgtest. Thanks Martin Pitt. (Closes: #692748) + * Fix HAVE_LONG_LONG typo in factor. Thanks Daniel Schepler + (Closes: #693337) + + -- Michael Stone Sun, 18 Nov 2012 09:26:57 -0500 + +coreutils (8.20-1) unstable; urgency=low + + * New upstream version + - fixes possible data loss in sort -u (from 8.6) (Closes: #685238) + - df prefers shorter device names (Closes: #653073) + * Update watch file (Closes: #693171) + + -- Michael Stone Tue, 13 Nov 2012 20:49:45 -0500 + +coreutils (8.13-3.3) unstable; urgency=low + + * Non-maintainer upload + * [50] Updates to Danish, German, Spanish, French, and Vietnamese + translations from translationproject.org (Closes: #671807) + * [51] (Etienne Millon) Fix typo in "/usr/bin/[ --help" output with + LANG=fr (Closes: #598481) + * [52] (Michael Below) Fix typos in ln -s "permission denied" + message with LANG=de (Closes: #683401) + * [55] Touch pot file to ensure binary message catalogs are + regenerated during the build. + + -- Jonathan Nieder Mon, 10 Sep 2012 22:02:19 -0700 + +coreutils (8.13-3.2ubuntu7) raring; urgency=low + + * Backport require_valgrind_ so that tests work better. + * Make valgrind failures non-fatal; we don't have sufficiently accurate + suppressions for linker startup issues on all architectures. However, + do still run those tests and check for corrupted output. + * Don't build-depend on valgrind on armhf, as it apparently breaks there. + + -- Colin Watson Fri, 09 Nov 2012 10:01:28 +0000 + +coreutils (8.13-3.2ubuntu6) raring; urgency=low + + * Backport upstream patch to avoid data-corrupting free-memory-read in + cp/mv/install when dealing with a very fragmented and sparse input file + on certain filesystems (LP: #1073514). + * Build-depend on valgrind in order to be able to run the test for the + above fix. + * Fix 99_sort_-u_data_loss.dpatch so that the added test is actually run. + + -- Colin Watson Thu, 08 Nov 2012 16:24:07 +0000 + +coreutils (8.13-3.2ubuntu5) raring; urgency=low + + * debian/tests/upstream: Drop the three tests that fail with "skipped test: + this shell lacks ulimit support" in our test environment. + + -- Martin Pitt Thu, 08 Nov 2012 06:01:55 +0100 + +coreutils (8.13-3.2ubuntu4) raring; urgency=low + + [ Paul Larson ] + * Fix debian/tests/upstream: Make the test script count the number of test + failures, declare them at the end of the test run, and exit with the + number of failed tests. (LP: #1075612) + + [ Martin Pitt ] + * debian/tests/upstream: Drop du/bigtime test, does not work in our test + environment. + + -- Martin Pitt Wed, 07 Nov 2012 15:51:30 +0100 + +coreutils (8.13-3.2ubuntu3) raring; urgency=low + + * Add debian/tests/: autopkgtest for running a subset of the upstream tests + against the system installed binaries. The other upstream tests need a + built tree, and are run during package build. (LP: #1073445) + * Add 01_gnulib-gets.dpatch: Avoid assuming that gets is declared in bundled + gnulib. Backported from upstream gnulib SVN to fix FTBFS. + + -- Martin Pitt Tue, 06 Nov 2012 13:21:20 +0100 + +coreutils (8.13-3.2ubuntu2) quantal; urgency=low + + * Update config.guess,sub for aarch64 + + -- Wookey Mon, 01 Oct 2012 15:41:06 +0100 + +coreutils (8.13-3.2ubuntu1) quantal; urgency=low + + * Resynchronise with Debian. Remaining changes: + - [80] Make 'uname -i -p' return the real processor/hardware, instead of + unknown. + - Build-depend on gettext:any instead of on gettext, so that apt-get can + properly resolve build-dependencies on the tool when cross-building. + * Backport upstream patches to fix data-loss and free-memory read bugs in + 'sort -u' (LP: #1038468). + + -- Colin Watson Mon, 10 Sep 2012 14:07:50 +0100 + +coreutils (8.13-3.2) unstable; urgency=low + + * Non-maintainer upload. + * Don't declare separate build-arch/build-indep targets when they just + fall through to the same common build rule, since they don't have correct + target dependencies themselves. Closes: #670481. + * Enable hardening build flags. Thanks to Moritz Muehlenhoff for the + patch. Closes: #653743. + * debian/patches/99_Werror-format-string.dpatch: fix the gnulib test suite + so that it doesn't fail to build with hardening flags on. + * Mark coreutils Multi-Arch: foreign. Thanks to Colin Watson. + Closes: #649397. + * debian/patches/99_tests-misc-sort-continue-Port-to-Fedora-15.dpatch: + cherry-pick from upstream to fix a build failure whenever the build + system happens to be holding an fd open, as happens when running in + certain environments (e.g., Lucas's test rebuild farm, or bzr-builddeb). + Closes: #669555. + + -- Steve Langasek Wed, 02 May 2012 02:27:43 +0000 + +coreutils (8.13-3.1ubuntu1) quantal; urgency=low + + * Merge from Debian unstable, remaining changes: + - [80] Make 'uname -i -p' return the real processor/hardware, instead of + unknown. + - Build-depend on gettext:any instead of on gettext, so that apt-get can + properly resolve build-dependencies on the tool when cross-building. + * Incorporate changes from Debian NMU to DELAYED/5-days: + - Don't declare separate build-arch/build-indep targets when they just + fall through to the same common build rule, since they don't have + correct target dependencies themselves. Closes: #670481. + - Enable hardening build flags. Thanks to Moritz Muehlenhoff for the + patch. Closes: #653743. + - debian/patches/99_Werror-format-string.dpatch: fix the gnulib test + suite so that it doesn't fail to build with hardening flags on. + - Mark coreutils Multi-Arch: foreign. Thanks to Colin Watson. + Closes: #649397. + - debian/patches/99_tests-misc-sort-continue-Port-to-Fedora-15.dpatch: + cherry-pick from upstream to fix a build failure whenever the build + system happens to be holding an fd open, as happens when running in + certain environments (e.g., Lucas's test rebuild farm, or + bzr-builddeb). Closes: #669555. + * Dropped changes, superseded by the above NMU: + - Filter out -Werror=format-security from CFLAGS when building tests, to + avoid a build failure in gnulib-tests/test-xvasprintf.c. + + -- Steve Langasek Tue, 01 May 2012 22:07:44 -0700 + +coreutils (8.13-3.1) unstable; urgency=low + + * Non-maintainer upload. + * Use architecture wildcards instead of type-handling virtual packages in + Build-Depends (closes: #587859). Thanks to Sebastian Andrzej Siewior for + the bug report and Guillem Jover for the patch. + + -- Jakub Wilk Wed, 29 Feb 2012 00:11:27 +0100 + +coreutils (8.13-3ubuntu3) precise; urgency=low + + * Build-depend on gettext:any instead of on gettext, so that apt-get can + properly resolve build-dependencies on the tool when cross-building. + + -- Steve Langasek Sat, 31 Mar 2012 14:54:13 -0700 + +coreutils (8.13-3ubuntu2) precise; urgency=low + + * Mark coreutils Multi-Arch: foreign. + + -- Colin Watson Sun, 20 Nov 2011 17:21:08 +0000 + +coreutils (8.13-3ubuntu1) precise; urgency=low + + * Resynchronise with Debian. Remaining changes: + - [80] Make 'uname -i -p' return the real processor/hardware, instead of + unknown. + * Filter out -Werror=format-security from CFLAGS when building tests, to + avoid a build failure in gnulib-tests/test-xvasprintf.c. + + -- Colin Watson Tue, 18 Oct 2011 10:59:14 +0100 + +coreutils (8.13-3) unstable; urgency=low + + * revert previous change to -mlong-double-64 + + -- Michael Stone Sat, 01 Oct 2011 12:31:33 -0400 + +coreutils (8.13-2) unstable; urgency=low + + * Fix typo in kfbsd test patch + * Move libstdbuf.so back to /usr/lib + * [85] kfbsd ignores fractional part of timeouts over 100000s + (Closes: #641832) + * PPC uses -mlong-double-64 to prevent test failures (Closes: #641907) + * Minor build changes + + -- Michael Stone Mon, 19 Sep 2011 19:52:02 -0400 + +coreutils (8.13-1) unstable; urgency=low + + * New upstream version + - no diagnostic when tail -f from pipe (Closes: #622182) + - du ignores specified dir when part of cycle (Closes: #598438) + - corrects translation errors (Closes: #595019, #545347) + - fixes missing prototype which caused FTBFS in some cases (Closes: #585509) + - documentation updates (Closes: #395430, #115833, #545347) + * preserve upstream man pages in clean (Closes: #630735) + * respect CFLAGS in build (Closes: #596262) + * remove LC_TIME symlinks (Closes: #584837) + + -- Michael Stone Mon, 12 Sep 2011 17:21:19 -0400 + +coreutils (8.5-1ubuntu6) natty; urgency=low + + * Backport from upstream (Jim Meyering): + - tail: avoid new diagnostic when applying -f to a pipe on linux-2.6.38. + + -- Colin Watson Wed, 23 Feb 2011 13:06:43 +0000 + +coreutils (8.5-1ubuntu5) natty; urgency=low + + * debian/patches/80_fedora_sysinfo.dpatch: make 'uname -i -p' return the + real processor/hardware, instead of unknown. Patch cherry-picked from + Fedora 12 (original: coreutils-4.5.3-sysinfo.patch, from the + coreutils-7.6-5.src.rpm). LP: #470550. + + -- C de-Avillez Tue, 10 Nov 2009 12:38:24 -0600 + +coreutils (8.5-1ubuntu4) natty; urgency=low + + * No-change upload to drop upstream changelog, and build with natty + toolchain. + + -- Martin Pitt Fri, 03 Dec 2010 08:40:09 +0100 + +coreutils (8.5-1ubuntu3) maverick; urgency=low + + * Maybe test that the package builds first before uploading; dpatch is a + picky one, isn't it? + + -- Steve Langasek Fri, 11 Jun 2010 06:49:02 +0000 + +coreutils (8.5-1ubuntu2) maverick; urgency=low + + [ John Rigby ] + * debian/patches/99_stat_prototype_for_linkat.dpatch: Add missing header + include for stat() prototype. LP: #591968. + + -- Steve Langasek Fri, 11 Jun 2010 06:03:58 +0000 + +coreutils (8.5-1ubuntu1) maverick; urgency=low + + * Merge from Debian unstable, remaining changes: + - debian/rules: Do not install dangling LC_TIME symlinks + + -- Steve Langasek Mon, 07 Jun 2010 01:41:56 +0000 + +coreutils (8.5-1) unstable; urgency=low + + * New upstream version + * kfbsd patch to work around fstat bug (from jwilk) (Closes: #573940) + * temporarily killing tests on mipsel due to longstanding gcc bug #519006 + + -- Michael Stone Tue, 27 Apr 2010 20:32:54 -0400 + +coreutils (8.4-2) unstable; urgency=low + + * Fix kfbsd build test problems (Closes: #569020) + + -- Michael Stone Fri, 05 Mar 2010 19:06:22 -0500 + +coreutils (8.4-1) unstable; urgency=low + + * New upstream version + - fixes "Bad file descriptor" message from cp & touch (Closes: #563754) + - tail -F won't abort when file is moved (Closes: #561481, #561854) + - mktemp man page describes template (Closes: #548316) + * temporarily disable tests/misc/ls-time to work around some spurious + build failures (on btrfs) + + -- Michael Stone Sat, 16 Jan 2010 14:37:32 -0500 + +coreutils (8.1-1) unstable; urgency=low + + * New upstream version + - adds nproc(1) + + -- Michael Stone Sat, 21 Nov 2009 16:44:35 -0500 + +coreutils (8.0-1) unstable; urgency=low + + * New upstream version + * touch accepts leap seconds (Closes: #510347) + * ln adds -L and -P + * rm -rf should be faster + * remove usr/share/info/dir in build rules (Closes: #546016) + * replaces: timeout (Closes: #552509) + + -- Michael Stone Sat, 14 Nov 2009 16:41:02 -0500 + +coreutils (7.5-6) unstable; urgency=low + + * remove usr/share/info/dir.gz in build rules (Closes: #546016) + * [83] make sure tail -f flushes initial output before waiting + (Closes: #545422) + + -- Michael Stone Fri, 11 Sep 2009 05:59:32 -0400 + +coreutils (7.5-5) unstable; urgency=low + + * update standards version to 3.8.3.0 (no changes) + * [82] fix "function not implemented" in cp -a of symlink on older + linux kernels (Closes: #545306) + + -- Michael Stone Thu, 10 Sep 2009 20:07:24 -0400 + +coreutils (7.5-4) unstable; urgency=low + + * [81] fix tail -f - with inotify (Closes: #545422) + + -- Michael Stone Tue, 08 Sep 2009 20:54:42 -0400 + +coreutils (7.5-3) unstable; urgency=low + + * [61] update who --ips to support more ipv6 ranges (Closes: #508924) + + -- Michael Stone Fri, 04 Sep 2009 17:48:31 -0400 + +coreutils (7.5-2) unstable; urgency=low + + * [79] fix ls-misc build test problem if files are created world-writable + (Closes: #544965) + * [80] fix tail/wait build test problem on kfreebsd (Closes: #545009) + * add -mieee to sh4 build flags (Closes: #544977) + + -- Michael Stone Fri, 04 Sep 2009 16:34:34 -0400 + +coreutils (7.5-1) unstable; urgency=low + + * new upstream version + - fix ls -1 output error (Closes: #539476) + - new program "stdbuf" + - chroot adds --userspec and --groups + - cp adds --reflink + - sort adds --human-numeric-sort + - tail --follow uses inotify + * update package description (Closes: #535458) + * tweak section and priority for mktemp package + * conflict with package "timeout". I think coreutils timeout is just + different enough that it shouldn't replace that package. + + -- Michael Stone Wed, 02 Sep 2009 20:50:02 -0400 + +coreutils (7.4-2ubuntu2) lucid; urgency=low + + * rebuild rest of main for armel armv7/thumb2 optimization; + UbuntuSpec:mobile-lucid-arm-gcc-v7-thumb2 + + -- Alexander Sack Fri, 05 Mar 2010 04:06:08 +0100 + +coreutils (7.4-2ubuntu1) karmic; urgency=low + + * debian/rules: Do not install dangling LC_TIME symlinks, they are not + needed. (LP: #42293) + + -- Martin Pitt Tue, 06 Oct 2009 12:22:48 +0200 + +coreutils (7.4-2) unstable; urgency=low + + * move mktemp to /bin instead of /usr/bin (Closes: #531842) + * include fake non-essential mktemp package (Closes: #531846) + + -- Michael Stone Thu, 04 Jun 2009 17:40:56 -0400 + +coreutils (7.4-1) unstable; urgency=low + + * new upstream version (Closes: #285609) + * replaces: mktemp + * adds: arch(1) (Closes: #516050) + + -- Michael Stone Wed, 03 Jun 2009 21:26:52 -0400 + +coreutils (7.3-1) unstable; urgency=low + + * new upstream version (Closes: #525048, #524500) + + -- Michael Stone Sat, 02 May 2009 12:28:58 -0400 + +coreutils (7.2-1) unstable; urgency=low + + * new upstream version (Closes: #517558) + * [78] fix kfreebsd build problem (Closes: #520368) + + -- Michael Stone Tue, 07 Apr 2009 19:21:42 -0400 + +coreutils (7.1-2) unstable; urgency=low + + * remove timeout binary, conflicts with package "timeout" (Closes: #516652) + + -- Michael Stone Sun, 22 Feb 2009 17:35:32 -0500 + +coreutils (7.1-1) unstable; urgency=low + + * New upstream version + + -- Michael Stone Sun, 22 Feb 2009 12:36:29 -0500 + +coreutils (6.12-2) unstable; urgency=low + + * [77] fall back if utimensat doesn't exist (Closes: #515731) + + -- Michael Stone Tue, 17 Feb 2009 22:11:52 -0500 + +coreutils (6.12-1) unstable; urgency=low + + * New upstream version + * Switch to dpatch + + -- Michael Stone Mon, 16 Feb 2009 12:42:44 -0500 + +coreutils (6.10-6) unstable; urgency=low + + * [76] Add ubuntu/upstream patch to prevent failure of cp of a special + (e.g., fifo) file to an existing file + * [71] change getgrouplist patch to skip the autoconf test and use + getgrouplist unconditionally. (Patch isn't immediately ready for + upstream anyway, and I assume that glibc provides this function + on all our supported platforms. If this turns out to not be true, + I'll revisit.) (Closes: #459615) + + -- Michael Stone Fri, 04 Apr 2008 10:02:18 -0400 + +coreutils (6.10-5) unstable; urgency=low + + * [75] Fix that last patch so that it doesn't display error messages + on non-selinux systems (closes: 473739) + + -- Michael Stone Tue, 01 Apr 2008 06:55:03 -0400 + +coreutils (6.10-4) unstable; urgency=low + + * [74] upstream patch to allow dd & other commands to use /dev/stdin + (Thanks Paul Eggert) (closes: #290727) + * [75] prevent ls from displaying a + for files with an selinux context. + (this will change in future, but the exact future output isn't certain + yet) (Thanks Russell Coker) (closes: #472590) + * Add a watch file to keep people from complaining about not having a watch + file. (closes: #441108) + * printf(1) now references printf(3) (closes: #465522) + + -- Michael Stone Mon, 31 Mar 2008 18:19:52 -0400 + +coreutils (6.10-3) unstable; urgency=low + + * [71] use getgrouplist to get list of groups, e.g., for id(1) + (Closes: #459615) + * [72] display warning if user is in too many groups + (Closes: #175994) + * [73] prevent segfault in ls -l /proc/sys/fs/inotify/ + (Thanks Jan Moringen) (Closes: #463043) + * Try upstream fix for info references in man pages + (Closes: #388684) + * Upstream change in documentation for mv in the case of a + moving a symlink to a directory with a trailing '/' + (Closes: #343652) + * move kill to /bin on hurd (Closes: #380387) + * Fix some minor typos/formatting in debian packaging + * Add link to upstream FAQ in README.Debian + + -- Michael Stone Mon, 28 Jan 2008 21:11:32 -0500 + +coreutils (6.10-2) unstable; urgency=low + + * run make check with VERBOSE enabled; this no longer makes the logs + unreadably huge (thanks Julien Cristau for asking the obvious + question) + * print cpu info during build to help debug build failures + * bump policy version + * lose perl-base & bzip2 build-deps. Someday need to support lzma tarball + * drop more legacy fileutils/shellutils/textutils upgrade support. + hopefully people have finished upgrading to etch + + -- Michael Stone Wed, 23 Jan 2008 20:36:12 -0500 + +coreutils (6.10-1) unstable; urgency=low + + * new upstream release + - cp, by default, refuses to copy through a dangling destination symlink + Set POSIXLY_CORRECT if you require the old, risk-prone behavior. + + -- Michael Stone Tue, 22 Jan 2008 20:01:35 -0500 + +coreutils (6.10~20071127-1) experimental; urgency=low + + * new snapshot + * coreutils now includes mktemp, but it is not included in this package + because debian already has a mktemp package with similar syntax. + + -- Michael Stone Fri, 30 Nov 2007 14:21:47 -0500 + +coreutils (6.10~20070907-3) experimental; urgency=low + + * use correct upstream changelog + * make su suid on hurd again (Closes: #439249) + + -- Michael Stone Sat, 15 Sep 2007 12:47:01 -0400 + +coreutils (6.10~20070907-2) experimental; urgency=low + + * forgot to add bison to build-deps + + -- Michael Stone Sat, 08 Sep 2007 14:09:40 -0400 + +coreutils (6.10~20070907-1) experimental; urgency=low + + * SELinux support has been integrated upstream. This may break things + in the short term (I encourage SELinux users to test) but is + expected to simplify coreutils development since the size of the + debian diff is greatly reduced. + * Bumped policy number + * Killed off textutils/fileutils/shellutils transition packages + * most debian patches are gone, except for whoips & dd appenderrors + * may need some, like s390 no sha2, returned (see how autobuilds do) + + -- Michael Stone Sat, 08 Sep 2007 07:55:11 -0400 + +coreutils (5.97-5.4) unstable; urgency=medium + + * Non-maintainer upload. + * New patch 64_coreutils-futimens: rename futimens to cu_futimens, + since glibc now defines an futimens function with a different + prototype. Closes: #433394. + * Urgency medium for the RC bug fix. + + -- Daniel Schepler Sat, 18 Aug 2007 16:41:21 -0400 + +coreutils (5.97-5.3) unstable; urgency=high + + * This is a non-maintainer upload done with the maintainer's blessing, + to fix a FTBS bug, and to get the SELinux changes in through to Etch. + * Bug fix: "coreutils - FTBFS", thanks to Bastian Blank and Andreas + Barth. The problem is with a build time test suite, which did not + take into account that there could be two directory names with the + same inode, which is what happens if there is a bind mount. So this + is not anything s390 specific, nor is it a problem with the coreutils + package itself, just with the build time test. Applied a version of + the patch being used by upstream to fix the test. + (Closes: #380552, #407628). + + -- Manoj Srivastava Tue, 23 Jan 2007 15:00:28 -0600 + +coreutils (5.97-5.2) unstable; urgency=low + + * This is an follow up non-maintainer upload to fix an issue introduced + in my last NMU. This fixes an FTBS bugs when building for non-SELinux + environments, for example, for non Linux architectures. + * Bug fix: "coreutils: FTBFS on hurd and kfreebsd: Unguarded usage of + SELinux code", thanks to Michael Banck. I missed out on guarding + assignments one. Rather than use the suggested patch (which adds two + members to a struct on non-selinux machines that would never get used, + I went back and corrected the non-selinux patch, since that is the + correct location to add this fix. The version of the patch included + in this version should do the right thing. (Closes: #396655). + + -- Manoj Srivastava Sun, 5 Nov 2006 16:04:08 -0600 + +coreutils (5.97-5.1) unstable; urgency=low + + * With permission from the maintainer, this upload (from a non-maintainer) + updates the SELinux patch, synchronizing with the latest patches from + fedora core (:pserver:anonymous@cvs.fedora.redhat.com:/cvs/dist, + repository rpms/coreutils/devel). The patches had to be tweaked for + Debian. This bring coreutils into compatibility with the latest + version of SELinux now in Debian. + * Bug fix: "coreutils: Updated SELinux patch", thanks to Manoj + Srivastava. The NMU patch is available in that bug report, + essentially, this is a minimal change upload. (Closes: #394287). + + -- Manoj Srivastava Fri, 20 Oct 2006 15:11:27 -0500 + +coreutils (5.97-5) unstable; urgency=medium + + * Actually kill sha384 and sha512 on s390. Finally got logged into an s390 + system, which makes debugging easier. (Conversely, buildds that fail a + build without providing a log make debugging harder.) Note to debian + developers: if you want introduce a dependency on sha384 or sha512, talk + to me first. + + -- Michael Stone Thu, 31 Aug 2006 07:38:19 -0400 + +coreutils (5.97-4) unstable; urgency=medium + + * s390 just doesn't seem to like sha384 (tests fail). I'm gonna kill that & + sha512 on s390 until someone with access to that arch & interest in the + problem steps up. + * add new catalan translation Closes: #384563 + + -- Michael Stone Thu, 03 Aug 2006 20:53:46 -0400 + +coreutils (5.97-3) unstable; urgency=low + + * Update sha2 patch to fix alignment issue on sparc + (Thanks David Madore) + + -- Michael Stone Thu, 03 Aug 2006 20:53:46 -0400 + +coreutils (5.97-2) unstable; urgency=low + + * Update sha2 patch to fix FTBFS on various architectures + (Thanks David Madore) + + -- Michael Stone Tue, 01 Aug 2006 20:21:05 -0400 + +coreutils (5.97-1) unstable; urgency=low + + * New upstream version + - cat options work in /proc Closes: 370583 + * [70] add sha2 utilities Closes: 325205 + * remove spurious removal of /usr/share/man/man1/md5sum.textutils + in preinst + + -- Michael Stone Wed, 26 Jul 2006 07:34:44 -0400 + +coreutils (5.96-5) unstable; urgency=low + + * [62] fix segfault when diropen fails on remove Closes: #375333 + * [63] warn on append with trunc Closes: #373736 + * fix idiotic typo in build rules for hurd Closes: #344166 + + -- Michael Stone Sun, 25 Jun 2006 13:30:21 -0400 + +coreutils (5.96-4) unstable; urgency=low + + * Fix deprecation messages Closes: #375335 + * Try to clobber chcon man page build on hurd Closes: #344166 + + -- Michael Stone Sun, 25 Jun 2006 13:30:21 -0400 + +coreutils (5.96-3) unstable; urgency=low + + * Follow strategy from Ian Jackson to better deal with the dpkg md5sum + mess. Only remove dpkg's mad md5sum diversion `once' (ie, on upgrade + from non-/usr/bin/md5sum-supplying coreutils). This preserves any later + sysadmin-installed diversions of md5sum.textutils. + * Add NEWS.Debian notes on the POSIX2_VERSION change + * add who --ips option to display IPs instead of hostnames. Code taken + from last.c in sysvinit-2.86.ds1. + Closes: #363126 + + -- Michael Stone Sat, 27 May 2006 14:05:44 -0400 + +coreutils (5.96-2) unstable; urgency=low + + * [60] Add deprecation warnings for tail +n and sort +n, but allow that + syntax + * Build-depend on autoconf 2.59.cvs.2006.05.25-1 to avoid bug that could + affect coreutils performance. Backporters may be able to weaken that + dependency. + + -- Michael Stone Sat, 27 May 2006 09:21:43 -0400 + +coreutils (5.96-1) unstable; urgency=low + + * New upstream version + * Don't override posix version at build time anymore. Upstream has + made this less painful; is this viable for etch? + * Update copyright file (Closes: #356532) + + -- Michael Stone Tue, 23 May 2006 21:08:13 -0400 + +coreutils (5.94-2) unstable; urgency=low + + * Reorder 55_coreutils.selinux.patch to fix builds on hurd + (Closes: #344166) + * [58_getcwd-chroot] fix pwd failure on certain bind mounts + (Closes: #355810) + * [59_dircolors-moreterms] add rxvt-unicode & mlterm to dircolors + (Closes: #270139, #317503) + * Update copyright file (thanks Joost van Baal) (Closes: #356532) + * Extend the diversion hackery (Closes: #361799) + + -- Michael Stone Sat, 15 Apr 2006 21:48:43 -0400 + +coreutils (5.94-1) unstable; urgency=low + + * New upstream version (Closes: #349530, #273781, #332779, #341912) + - upstream has reverted the behavior for stat --format + and added a new --printf option with the new behavior + (Closes: #339136) + - tail -f works on append-only files again (Closes: #339400) + - tail -c 3 works again (Closes: #340364) + - tail -0f work for multiple files (but use -n 0 -f instead) + (Closes: #341785) + * [99_dircolors-shell] dircolors test doesn't depend on the shell + * Fix md5sum diversion problems with a hacksaw (Closes: #340119) + + -- Michael Stone Wed, 15 Feb 2006 14:11:23 -0500 + +coreutils (5.93-5) unstable; urgency=low + + * Actually conflict with apt-move instead of just thinking about it + (Closes: #339136) + * Drop help2man build-dep (we're actually using one in the build tree) + + -- Michael Stone Wed, 16 Nov 2005 07:46:45 -0500 + +coreutils (5.93-4) unstable; urgency=low + + * Conflict with apt-move expecting particular stat syntax (Closes: #339136) + I need to think more about what to do with upstream changes to stat -c + * For now, add upstream patch so that stat -c "%whatever\n" actually works + + -- Michael Stone Tue, 15 Nov 2005 09:30:56 -0500 + +coreutils (5.93-3) unstable; urgency=low + + * Remove --enable-pam from selinux rules (we don't use our su for selinux) + * [99] Revert change to POSIX version override (I forgot about +n usage) + I once again *strongly* urge people to convert to more portable syntax. + (search NEWS for POSIX 1003.1-2001) + (Closes: #339085) + * [57] Patch from Petr Salinger to fix selinux build problems on non-linux + systems (Closes: #338821) + + -- Michael Stone Mon, 14 Nov 2005 20:55:57 -0500 + +coreutils (5.93-2) unstable; urgency=low + + * Change section to utils (base ain't what it used to be) + * Trust the autoreconf wrapper because things are too complicated otherwise + * [56] Recognize cifs as remote so it can be ignored, e.g., in df -l + (Closes: #324934) + + -- Michael Stone Sat, 12 Nov 2005 20:28:53 -0500 + +coreutils (5.93-1) unstable; urgency=low + + * New upstream version + - tail's --allow-missing option has been removed. Use --retry instead + - stat's --link and -l options have been removed. Use --dereference + - support things like head -NUM when conforming to POSIX 1003.1-2001. + because of this, debian no longer forces POSIX version 199209 + - many other changes documented in /usr/share/doc/coreutils/NEWS.gz + * Need automake 1.9 now + * Allow build check to be skipped with nocheck option (Closes: #278915) + * Work around dpkg changes (Closes: #314713) + * Try to recover from badly planned move on part of dpkg maintainer to + put a *local* diversion on md5sum. There is no good way to handle this; + hopefully nobody will do something so stupid in the future. + * Remove some ancient debian-specific patches + - install no longer calls strip with special options + - no more --reversible option to cat + - no more --first-eof option to paste + - no more field seperator option to uniq + * [54] Update acl patch using fedora devel patch + * [55] Add selinux support from fedora devel & Manoj Srivastava + (Closes: #312426) + + -- Michael Stone Sat, 12 Nov 2005 13:34:05 -0500 + +coreutils (5.2.1-3) unstable; urgency=low + + * fix info install + * install the right upstream changelog + + -- Michael Stone Fri, 16 Jul 2004 07:28:41 -0400 + +coreutils (5.2.1-2) unstable; urgency=low + + * remove su for kfreebsd (Closes: #225131) + * add yacc to build depends. forgot that the date patch [31] forced a + rebuild from getdate.y (Closes: #259563) + + -- Michael Stone Fri, 16 Jul 2004 07:28:41 -0400 + +coreutils (5.2.1-1) unstable; urgency=low + + * New upstream version (Closes: #245360, #244784, #259282, #246509) + - Fixes ls --block-size="1" (Closes: #237330) + - `chown user.group file' now has its traditional meaning even when + conforming to POSIX 1003.1-2001, so long as no user has a name + containing `.' that happens to equal `user.group'. + - time stamps output by stat now include actual fractional seconds, + when available -- or .0000000 for files without that information. + - rmdir -p exits with status 1 on error; formerly it sometimes exited + with status 0 when given more than one argument. + - chgrp and chown now accept POSIX-mandated -L, -H, and -P options + - du can now process hierarchies of virtually unlimited depth. + - du's -H option will soon have the meaning required by POSIX + (--dereference-args, aka -D) rather then the current meaning of --si. + Now, using -H elicits a warning to that effect. + * [53] Update acl patch for 5.2.1. Now based on FC2 coreutils patch. + * Removed xattr patch. AFAICT this isn't particularly useful for anything + except selinux, and other selinux support isn't included. Also, the + option added with this patch isn't being used consistently between + different linux distributions and I'd rather not support something that + will cause incompatibilities. If anyone was depending on this support + please contact me with details. (Closes: #244603) + * fix minor typo in README.Debian (Closes: #218333) + * [31] seconds defaults to 0 when using something like + date -d '21:04 +0100' (Closes: #238046) + * rebuild should fix hppa problem (Closes: #219458) + * remove join -n + * update documentation for test so that the FD parameter to test -t is + mandatory (Closes: #255694) + + -- Michael Stone Wed, 14 Jul 2004 06:13:38 -0400 + +coreutils (5.0.91-2) unstable; urgency=low + + * add bzip2 to build-deps (Closes: #214094) + * fix stupid typo in preinst info cleanup script (Closes: #214134) + * make sure /usr/share/info doesn't contain a dir file + (Closes: #214050, #214138) + + -- Michael Stone Sat, 04 Oct 2003 18:35:32 -0400 + +coreutils (5.0.91-1) unstable; urgency=low + + * New upstream version + - date accepts a new option --rfc-2822, an alias for --rfc-822 + - split accepts a new option -d or --numeric-suffixes + - cp, install, mv, and touch now preserve microsecond resolution + - sort now supports the zero byte (NUL) as a field separator; use -t '\0' + The -t '' option, which formerly had no effect, is now an error + - sort option order no longer matters for -S, -d, -i, -o, and -t + - tail --allow-missing option is deprecated; use --retry instead + - `sha1sum --check' now accepts the BSD format for SHA1 message digests + - who -l now means `who --login', not `who --lookup', per POSIX. Feature + was deprecated in woody + - mv renaming file onto differently-cased form of the same name no longer + causes data loss on case-insensitive filesystem like vfat. Name-mapping + filesystems such as ntfs or hpfs can still have problems, see NEWS file + for details. (Closes: #189319) + - seq's default step is 1, even if LAST < FIRST (Closes: #208494) + * [30] upstream patch for du -D with symlinks (Closes: #211591) + * make sure buildinfo is cleaned up + * debian/newfiles aren't used any more + * old {file,shell,text}utils info doc indices are cleaned up (Closes: #209160) + * add sha1sum to description (Closes: #211724) + + -- Michael Stone Fri, 03 Oct 2003 23:01:28 -0400 + +coreutils (5.0.90-3) unstable; urgency=low + + * [28,29] don't hang in who or pinky trying to look up the fake + host entries that screen puts in utmp + * [50,51] acl support + - libacl1-dev build dependency + - probably won't work on non-linux, patches welcome for hurd et al. if + they break + * [52] extended attribute support + - libattr1-dev build dependency (still necessary with new libc?) + - not sure about this one, it might come out (is it always valid to + preserve ea's even if we don't know what they are for?) + + -- Michael Stone Mon, 18 Aug 2003 19:47:29 -0400 + +coreutils (5.0.90-2) unstable; urgency=medium + + * [27] tail -n 0 -f no longer causes busy wait/hang (Closes: #205251) + + -- Michael Stone Wed, 13 Aug 2003 22:46:30 -0400 + +coreutils (5.0.90-1) unstable; urgency=low + + * New upstream version + - `test -t', `test --help', and `test --version' now silently exit + with status 0. To test whether standard output is a terminal, use + `test -t 1'. To get help and version info for `test', use + `[ --help' and `[ --version'. + `test' now exits with status 2 (not 1) if there is an error. + - rm without --recursive (aka -r or -R) no longer prompts regarding + unwritable directories, as required by POSIX. + - uniq -c now uses a SPACE, not a TAB between the count and the + corresponding line, as required by POSIX. + - expr now exits with status 2 if the expression is syntactically valid, + and with status 3 if an error occurred. POSIX requires this. + - md5sum --check now accepts the output of the BSD/OpenSSL md5sum program + - chown: `.' is no longer recognized as a separator when POSIX2 version + is >= 200112 + * [26] split-fail test doesn't fail + * revert 17, patch doesn't work anyway. 26 is a new patch for the problem + of building as non-root in a chroot owned by the builder. + (Closes: #204778) + * use dh_buildinfo + * standards-version 3.6.0 + * add readlink to description (Closes: #204974) + * temporarily override posix version to 199209 so I can upload this package. + need a transition plan. try setting the environment variable + _POSIX2_VERSION on your system to "200112" and see how much breaks. + I encourage debian developers to update their packages so the above works. + + -- Michael Stone Mon, 11 Aug 2003 17:31:34 -0400 + +coreutils (5.0-5) unstable; urgency=low + + * [23] upstream patch to make split --verbose actually verbose + (Closes: #199205) + * enable kill & su for freebsd (Closes: #194743) + * [24] upstream fix for du not displaying / on last line of du / + (Closes: #200542) + * Build-conflict on automake1.4 (Closes: #200378) + * [25] chown no longer preserves setuid bits (Closes: #112597) + + -- Michael Stone Sat, 12 Jul 2003 09:11:08 -0400 + +coreutils (5.0-4) unstable; urgency=medium + + * upstream patch to prevent fd leak (Closes: #197655) + + -- Michael Stone Mon, 16 Jun 2003 17:34:51 -0400 + +coreutils (5.0-3) unstable; urgency=low + + * More hurd stuff, again (Closes: 190738) + * uname -i and -p don't exist anymore, stop complaining + + -- Michael Stone Tue, 13 May 2003 16:57:55 -0400 + +coreutils (5.0-2) unstable; urgency=low + + * Cope with symlinks at LC_TIME for woody upgrades (Closes: 191338) + * Upstream patch to fix FTBFS on hurd (Closes: 190738) + + -- Michael Stone Sun, 11 May 2003 10:29:21 -0400 + +coreutils (5.0-1) unstable; urgency=low + + * New upstream version + - false --help now exits nonzero + - a number of printf fixes + - a couple of seq fixes + + -- Michael Stone Mon, 14 Apr 2003 20:03:36 -0400 + +coreutils (4.5.10-1) unstable; urgency=low + + * New upstream version + - printf no longer segfaults for a negative field width or precision + - shred now always enables --exact for non-regular files + - du no longer lists hard-linked files more than once + - du no longer dumps core on some systems due to `infinite' recursion + via nftw's use of the buggy replacement function in getcwd.c + (Closes: #183962) + - portability patches for a few vendor compilers and 64-bit systems + - du -S *really* now works like it did before the change in 4.5.5 + * make it clearer that {file,shell,text}utils are obsolete + (Closes: #184191, #183631) + + -- Michael Stone Tue, 18 Mar 2003 19:35:23 -0500 + +coreutils (4.5.9-1) unstable; urgency=low + + * New upstream version + - du no longer truncates file sizes or sums to fit in 32-bit size_t + - work around Linux kernel bug in getcwd (fixed in 2.4.21-pre4), so that pwd + now fails if the name of the working directory is so long that getcwd + truncates it. Before it would print the truncated name and exit successfully. + - `df /some/mount-point' no longer hangs on a GNU libc system when another + hard-mounted NFS file system (preceding /some/mount-point in /proc/mounts) + is inaccessible. + - rm -rf now gives an accurate diagnostic when failing to remove a file + under certain unusual conditions + - mv and `cp --preserve=links' now preserve multiple hard links even under + certain unusual conditions where they used to fail + + -- Michael Stone Thu, 06 Mar 2003 07:09:05 -0500 + +coreutils (4.5.8-2) unstable; urgency=medium + + * Fix typesize problem in du that caused wrapping at 2G + (Closes: #183210, #183393) + * Added upstream patch to fix behavior where mv would fail to move files + under certain (rare) conditions + * Added upstream patch to fix error message "cannot chdir" when rm -rf fails + to remove a file because of insufficient permission (Closes: #178471) + + -- Michael Stone Tue, 04 Mar 2003 20:33:14 -0500 + +coreutils (4.5.8-1) unstable; urgency=low + + * New upstream version + - du -S once again works like it did before the change in 4.5.5 + - stat accepts a new file format, %B, for the size of each block + reported by %b + - du accepts new option: --apparent-size + - du --bytes (-b) works the same way it did in fileutils-3.16 and before + - du reports proper sizes for directories (not zero) + - df now always displays under `Filesystem', the device file name + corresponding to the listed mount point. Before, for a block- or + character- special file command line argument, df would display that + argument. E.g., `df /dev/hda' would list `/dev/hda' as the + `Filesystem', rather than say /dev/hda3 (the device on which `/' is + mounted), as it does now. + - test now works properly when invoked from a set user ID or set group ID + context and when testing access to files subject to alternate protection + mechanisms. For example, without this change, a set-UID program that + invoked `test -w F' (to see if F is writable) could mistakenly report + that it *was* writable, even though F was on a read-only file system, or + F had an ACL prohibiting write access, or F was marked as immutable. + * Add ipv6 support for name resolution (from "J.H.M. Dassen (Ray)" + ) (Closes: 181817) + * Provide readlink (Replaces: debianutils <= 2.3.1) + + -- Michael Stone Sun, 02 Mar 2003 11:34:07 -0500 + +coreutils (4.5.7-1) unstable; urgency=low + + * New upstream version + - Includes upstream's fix for 175135 + * {shell,text,file}utils now priority extra, section misc + * putty added to dircolors known terminal list (Closes: #180312) + * split will not terminate prematurely on non-full buffer read + (Closes: #177559) + + -- Michael Stone Sun, 09 Feb 2003 09:09:19 -0500 + +coreutils (4.5.6-2) unstable; urgency=medium + + * du behaves properly when multiple relative paths are specified on the + command line (Closes: #180228) + + -- Michael Stone Sat, 08 Feb 2003 11:01:53 -0500 + +coreutils (4.5.6-1) unstable; urgency=low + + * New upstream version + - Fixes coloring of executables on ext2 (Closes: #175135) + - uses new dirent format for info doc (currently reverted + pending dpkg install-info update) + * dd closes output before printing stats (Closes: #178400) + + -- Michael Stone Fri, 07 Feb 2003 07:49:42 -0500 + +coreutils (4.5.4-1) unstable; urgency=low + + * New upstream version + * touch gives correct error message when trying to update the time of an + unowned file + * Upstream is using newer config.{sub,guess} (Closes: #171498) + * touch test succeeds if unprivileged user can write to / (Closes: #171893) + * again with ls -s of symlink--covered all the cases yet? + also fixes ls -i of symlink (Closes: #173793) + * shred -z no longer expects argument (Closes: #172019) + + -- Michael Stone Wed, 01 Jan 2003 13:25:48 -0500 + +coreutils (4.5.3-4) unstable; urgency=low + + * ls on explicit symlink to directory properly shows directory contents + (Closes: #171459) + * ls -L on broken symlink generates error again + * run make check on package build again + + -- Michael Stone Tue, 03 Dec 2002 17:41:46 -0500 + +coreutils (4.5.3-3) unstable; urgency=low + + * printf %b works (Closes: #170983) + * remove cycle breaking patch in tsort (Closes: #168914) + + -- Michael Stone Wed, 27 Nov 2002 17:50:59 -0500 + +coreutils (4.5.3-2) unstable; urgency=low + + * ls --color works properly with -d on directories (Closes: #168203) + * explicit ls for broken symlink works (Closes: #168203) + * explicit ls -s of symlink works (Closes: #167964) + * document du -m (Closes: #167769) + + -- Michael Stone Sat, 09 Nov 2002 22:39:10 -0500 + +coreutils (4.5.3-1) unstable; urgency=low + + * New upstream version + * backed out more specific uname processor output + - Closes: #164691, #164710, #165530, #166621 + - basically no positive feedback :) + * remove /usr/share/doc/coreutils/ABOUT-NLS.gz (Closes: #164920) + * printf with a trailing \ doesn't cause end-of-string to be ignored + (Closes: #166201) + + -- Michael Stone Thu, 31 Oct 2002 21:20:37 -0500 + +coreutils (4.5.2-1) unstable; urgency=low + + * New upstream version + - translations fixed (Closes: #161629, #163712) + * .jar color fixed (Closes: #163838) + * dired test doesn't break for non-english locale (Closes: #161069) + * more specific uname processor output (Closes: #88070) + - let's see how people react to this one :) + + -- Michael Stone Tue, 08 Oct 2002 21:42:27 -0400 + +coreutils (4.5.1-2) unstable; urgency=high + + * don't provide stat (causes nasty upgrade problem) + (Closes: #161245, #161249) + * bump standards-version + * register info file properly + * DEB_BUILD_OPTIONS (Closes: #152189) + + -- Michael Stone Tue, 17 Sep 2002 21:40:51 -0400 + +coreutils (4.5.1-1) unstable; urgency=low + + * New upstream release + * Replaces fileutils, shellutils, and textutils + + -- Michael Stone Fri, 13 Sep 2002 21:00:15 -0400 + --- coreutils-8.23.orig/debian/compat +++ coreutils-8.23/debian/compat @@ -0,0 +1 @@ +5 --- coreutils-8.23.orig/debian/control +++ coreutils-8.23/debian/control @@ -0,0 +1,47 @@ +Source: coreutils +Maintainer: Ubuntu Developers +XSBC-Original-Maintainer: Michael Stone +Section: utils +Priority: required +Standards-Version: 3.9.6.0 +Build-Depends: gettext (>= 0.10.37), debhelper (>= 5.0.0), autotools-dev, dh-buildinfo, texinfo (>= 4.2), groff, dpatch, libattr1-dev [linux-any], libacl1-dev [linux-any], libselinux1-dev (>= 1.32) [linux-any], gperf, bison +XS-Testsuite: autopkgtest + +Package: coreutils +Architecture: any +Multi-Arch: foreign +Pre-Depends: ${shlibs:Depends} +Essential: yes +Replaces: mktemp, timeout, realpath +Conflicts: timeout +Depends: ${misc:Depends} +Description: GNU core utilities + This package contains the basic file, shell and text manipulation + utilities which are expected to exist on every operating system. + . + Specifically, this package includes: + arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp + csplit cut date dd df dir dircolors dirname du echo env expand expr + factor false flock fmt fold groups head hostid id install join link ln + logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup nproc numfmt + od paste pathchk pinky pr printenv printf ptx pwd readlink realpath rm + rmdir runcon sha*sum seq shred sleep sort split stat stty sum sync tac + tail tee test timeout touch tr true truncate tsort tty uname unexpand + uniq unlink users vdir wc who whoami yes +Homepage: http://gnu.org/software/coreutils + +Package: mktemp +Pre-Depends: coreutils (>= 7.4-1) +Priority: extra +Section: oldlibs +Architecture: all +Description: coreutils mktemp transitional package + Empty package to facilitate upgrades, can be safely removed. + +Package: realpath +Depends: coreutils (>= 8.23-1~) +Priority: extra +Section: oldlibs +Architecture: all +Description: coreutils realpath transitional package + Empty package to facilitate upgrades, can be safely removed. --- coreutils-8.23.orig/debian/coreutils.NEWS +++ coreutils-8.23/debian/coreutils.NEWS @@ -0,0 +1,40 @@ +coreutils (8.23-1) unstable; urgency=low + + GNU coreutils package now includes the `realpath' command that used to + be found in a separate `realpath' package. + + Even though the GNU version provides all the features of the old Debian + version, the behaviour is a bit different, namely: + + * GNU `realpath' and `realpath -s' commands require all but the + last path components to exist + + whereas: + + * Debian version of `realpath' required all the path components to exist; + * Debian version of `realpath -s' required no path components to exist. + + To get the old behaviour in GNU `realpath' an additional option needs + to be used: + + Old Debian realpath New GNU coreutils realpath + ----------------------- ---------------------------- + realpath file(s) => realpath -e file(s) + realpath -s file(s) => realpath -s -m file(s) + + -- Robert Luberda Sun, 31 Aug 2014 16:08:14 +0200 + +coreutils (5.96-3) unstable; urgency=low + + * The POSIX compatibility level is now set to POSIX 1003.1-2001, + which affects the syntax for several commands. For transition + purposes, "sort +number" and "tail +number" will be supported + for the etch release. Note that these usages are deprecated, and + will be removed in etch+1; the recommended usage is "sort -k number" + and "tail -n +number". Also, "uniq +number" should be replaced with + "uniq -s number" and "touch number filename" should be replaced with + "touch -t number filename". To revert to the older syntax, set the + environment variable _POSIX2_VERSION to "199209". + + -- Michael Stone Sat, 27 May 2006 12:56:18 -0400 + --- coreutils-8.23.orig/debian/coreutils.README.Debian +++ coreutils-8.23/debian/coreutils.README.Debian @@ -0,0 +1,10 @@ +Most of the coreutils documentation is available as info pages. (Try "info +coreutils" at a command prompt). A version of this documentation is also +available online at +http://www.gnu.org/software/coreutils/manual/html_node/index.html +(Note that the online version may not reflect the version of coreutils in this +package.) + +There is also a frequently asked questions document available at +http://www.gnu.org/software/coreutils/faq/coreutils-faq.html + --- coreutils-8.23.orig/debian/coreutils.copyright +++ coreutils-8.23/debian/coreutils.copyright @@ -0,0 +1,299 @@ +This is the Debian GNU/Linux packaged version of the GNU core +utilities. + +This package is maintained by Michael Stone and +built from sources obtained from: + ftp://ftp.gnu.org/gnu/coreutils/coreutils-8.20.tar.xz + +This debian package was first created by Michael Stone , +from coreutils 4.5.1. + +Changes: + * added Debian GNU/Linux package maintenance system files + * at times, bug fixes awaiting inclusion in the upstream source + + +Authors +======= + +See the file AUTHORS. + + +Copyright Holders and License +============================= + +lib/fts.c +--------- + + Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/*- + * Copyright (c) 1990, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + + +lib/fts_.h +---------- + + Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* + * Copyright (c) 1989, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + + +lib/rand-isaac.[ch] +------------------- + + Copyright (C) 1999-2006 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999 Colin Plumb. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + +lib/inet_ntop.c +--------------- + + Copyright (C) 2005, 2006 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* + * Copyright (c) 1996-1999 by Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + + +m4/autobuild.m4 +--------------- +dnl Copyright (C) 2004, 2006, 2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Simon Josefsson + + +src/cut.c +--------- + + Copyright (C) 1997-2007 Free Software Foundation, Inc. + Copyright (C) 1984 David M. Ihnat + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + +src/dircolors.c +--------------- + + Copyright (C) 1996-2007 Free Software Foundation, Inc. + Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000 H. Peter Anvin + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + +src/paste.c +----------- + + Copyright (C) 1997-2005 Free Software Foundation, Inc. + Copyright (C) 1984 David M. Ihnat + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + +src/shred.c +----------- + + Copyright (C) 1999-2007 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999 Colin Plumb. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + +doc/coreutils.texi (The GNU Coreutils Manual) +--------------------------------------------- + +Copyright @copyright{} 1994-1996, 2000-2008 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the section entitled ``GNU +Free Documentation License''. + + +all other files +--------------- + +Copyright (C) 1984-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL-3'. --- coreutils-8.23.orig/debian/coreutils.dirs +++ coreutils-8.23/debian/coreutils.dirs @@ -0,0 +1,2 @@ +bin +usr/share/doc/coreutils --- coreutils-8.23.orig/debian/mktemp.copyright +++ coreutils-8.23/debian/mktemp.copyright @@ -0,0 +1,3 @@ +The empty package mktemp is created by Michael Stone +and either is in the public domain or too trivial to copyright. + --- coreutils-8.23.orig/debian/patches/00list +++ coreutils-8.23/debian/patches/00list @@ -0,0 +1,11 @@ +31_df_remote_dupes +32_infofix +61_whoips +63_dd-appenderrors +72_id_checkngroups +80_fedora_sysinfo +85_timer_settime +99_kfbsd_fstat_patch +99_hppa_longlong +99_float_endian_detection +99_mountinfo --- coreutils-8.23.orig/debian/patches/31_df_remote_dupes.dpatch +++ coreutils-8.23/debian/patches/31_df_remote_dupes.dpatch @@ -0,0 +1,6049 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 31_df_remote_dupes.dpatch by Pádraig Brady +## +## All lines beginning with `## DP:' are a description of the patch. + +@DPATCH@ +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/NEWS coreutils-8.23/NEWS +--- coreutils-8.23~/NEWS 2014-07-18 18:07:21.000000000 -0400 ++++ coreutils-8.23/NEWS 2014-10-29 21:26:12.286659958 -0400 +@@ -148,6 +148,12 @@ + will now honor an empty or unknown TERM environment variable, + and not output colors even with --colors=always. + ++** Changes in behavior ++ ++ df no longer suppresses separate exports of the same remote device, ++ as these are probably explicitly mounted and may have separate ACLs etc. ++ [suppression was introduced in coreutils-8.21] ++ + ** Improvements + + chroot has better --userspec and --group look-ups, with numeric IDs never +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/NEWS.orig coreutils-8.23/NEWS.orig +--- coreutils-8.23~/NEWS.orig 1969-12-31 19:00:00.000000000 -0500 ++++ coreutils-8.23/NEWS.orig 2014-07-18 18:07:21.000000000 -0400 +@@ -0,0 +1,4227 @@ ++GNU coreutils NEWS -*- outline -*- ++ ++* Noteworthy changes in release 8.23 (2014-07-18) [stable] ++ ++** Bug fixes ++ ++ chmod -Rc no longer issues erroneous warnings for files with special bits set. ++ [bug introduced in coreutils-6.0] ++ ++ cp -a, mv, and install --preserve-context, once again set the correct SELinux ++ context for existing directories in the destination. Previously they set ++ the context of an existing directory to that of its last copied descendent. ++ [bug introduced in coreutils-8.22] ++ ++ cp -a, mv, and install --preserve-context, no longer seg fault when running ++ with SELinux enabled, when copying from file systems that return an error ++ when reading the SELinux context for a file. ++ [bug introduced in coreutils-8.22] ++ ++ cp -a and mv now preserve xattrs of symlinks copied across file systems. ++ [bug introduced with extended attribute preservation feature in coreutils-7.1] ++ ++ date could crash or go into an infinite loop when parsing a malformed TZ="". ++ [bug introduced with the --date='TZ="" ..' parsing feature in coreutils-5.3.0] ++ ++ dd's ASCII and EBCDIC conversions were incompatible with common practice and ++ with POSIX, and have been corrected as follows. First, conv=ascii now ++ implies conv=unblock, and conv=ebcdic and conv=ibm now imply conv=block. ++ Second, the translation tables for dd conv=ascii and conv=ebcdic have been ++ corrected as shown in the following table, where A is the ASCII value, W is ++ the old, wrong EBCDIC value, and E is the new, corrected EBCDIC value; all ++ values are in octal. ++ ++ A W E ++ 041 117 132 ++ 133 112 255 ++ 135 132 275 ++ 136 137 232 ++ 174 152 117 ++ 176 241 137 ++ 313 232 152 ++ 325 255 112 ++ 345 275 241 ++ ++ [These dd bugs were present in "the beginning".] ++ ++ df has more fixes related to the newer dynamic representation of file systems: ++ Duplicates are elided for virtual file systems like tmpfs. ++ Details for the correct device are output for points mounted multiple times. ++ Placeholder values are output for inaccessible file systems, rather than ++ than error messages or values for the wrong file system. ++ [These bugs were present in "the beginning".] ++ ++ df now outputs all appropriate entries in the presence of bind mounts. ++ On some systems, entries would have been incorrectly elided due to ++ them being considered "dummy" mounts. ++ [bug introduced in coreutils-8.22] ++ ++ du now silently ignores directory cycles introduced with bind mounts. ++ Previously it would issue a warning and exit with a failure status. ++ [bug introduced in coreutils-8.1] ++ ++ head --bytes=-N and --lines=-N now handles devices more ++ consistently, not ignoring data from virtual devices like /dev/zero, ++ or on BSD systems data from tty devices. ++ [bug introduced in coreutils-5.0.1] ++ ++ head --bytes=-N - no longer fails with a bogus diagnostic when stdin's ++ seek pointer is not at the beginning. ++ [bug introduced with the --bytes=-N feature in coreutils-5.0.1] ++ ++ head --lines=-0, when the input does not contain a trailing '\n', ++ now copies all input to stdout. Previously nothing was output in this case. ++ [bug introduced with the --lines=-N feature in coreutils-5.0.1] ++ ++ id, when invoked with no user name argument, now prints the correct group ID. ++ Previously, in the default output format, it would print the default group ID ++ in the password database, which may be neither real nor effective. For e.g., ++ when run set-GID, or when the database changes outside the current session. ++ [bug introduced in coreutils-8.1] ++ ++ ln -sf now replaces symbolic links whose targets can't exist. Previously ++ it would display an error, requiring --no-dereference to avoid the issue. ++ [bug introduced in coreutils-5.3.0] ++ ++ ln -sr '' F no longer segfaults. Now works as expected. ++ [bug introduced with the --relative feature in coreutils-8.16] ++ ++ numfmt now handles blanks correctly in all unibyte locales. Previously ++ in locales where character 0xA0 is a blank, numfmt would mishandle it. ++ [bug introduced when numfmt was added in coreutils-8.21] ++ ++ ptx --format long option parsing no longer falls through into the --help case. ++ [bug introduced in TEXTUTILS-1_22i] ++ ++ ptx now consistently trims whitespace when processing multiple files. ++ [This bug was present in "the beginning".] ++ ++ seq again generates correct output with start or end values = -0. ++ [bug introduced in coreutils-8.20.] ++ ++ shuf --repeat no longer dumps core if the input is empty. ++ [bug introduced with the --repeat feature in coreutils-8.22] ++ ++ sort when using multiple threads now avoids undefined behavior with mutex ++ destruction, which could cause deadlocks on some implementations. ++ [bug introduced in coreutils-8.6] ++ ++ tail -f now uses polling mode for VXFS to cater for its clustered mode. ++ [bug introduced with inotify support added in coreutils-7.5] ++ ++** New features ++ ++ od accepts a new option: --endian=TYPE to handle inputs with different byte ++ orders, or to provide consistent output on systems with disparate endianness. ++ ++ configure accepts the new option --enable-single-binary to build all the ++ selected programs in a single binary called "coreutils". The selected ++ programs can still be called directly using symlinks to "coreutils" or ++ shebangs with the option --coreutils-prog= passed to this program. The ++ install behavior is determined by the option --enable-single-binary=symlinks ++ or --enable-single-binary=shebangs (the default). With the symlinks option, ++ you can't make a second symlink to any program because that will change the ++ name of the called program, which is used by coreutils to determine the ++ desired program. The shebangs option doesn't suffer from this problem, but ++ the /proc/$pid/cmdline file might not be updated on all the platforms. The ++ functionality of each program is not affected but this single binary will ++ depend on all the required dynamic libraries even to run simple programs. ++ If you desire to build some tools outside the single binary file, you can ++ pass the option --enable-single-binary-exceptions=PROG_LIST with the comma ++ separated list of programs you want to build separately. This flag ++ considerably reduces the overall size of the installed binaries which makes ++ it suitable for embedded system. ++ ++** Changes in behavior ++ ++ chroot with an argument of "/" no longer implicitly changes the current ++ directory to "/", allowing changing only user credentials for a command. ++ ++ chroot --userspec will now unset supplemental groups associated with root, ++ and instead use the supplemental groups of the specified user. ++ ++ cut -d$'\n' again outputs lines identified in the --fields list, having ++ not done so in v8.21 and v8.22. Note using this non portable functionality ++ will result in the delayed output of lines. ++ ++ ls with none of LS_COLORS or COLORTERM environment variables set, ++ will now honor an empty or unknown TERM environment variable, ++ and not output colors even with --colors=always. ++ ++** Improvements ++ ++ chroot has better --userspec and --group look-ups, with numeric IDs never ++ causing name look-up errors. Also look-ups are first done outside the chroot, ++ in case the look-up within the chroot fails due to library conflicts etc. ++ ++ install now allows the combination of the -D and -t options. ++ ++ numfmt supports zero padding of numbers using the standard printf ++ syntax of a leading zero, for example --format="%010f". ++ Also throughput was improved by up to 800% by avoiding redundant processing. ++ ++ shred now supports multiple passes on GNU/Linux tape devices by rewinding ++ the tape before each pass, avoids redundant writes to empty files, ++ uses direct I/O for all passes where possible, and attempts to clear ++ inode storage used for small files on some file systems. ++ ++ split avoids unnecessary input buffering, immediately writing input to output ++ which is significant with --filter or when writing to fifos or stdout etc. ++ ++ stat and tail work better with HFS+, HFSX, LogFS and ConfigFS. stat -f ++ --format=%T now reports the file system type, and tail -f now uses inotify, ++ rather than the default of issuing a warning and reverting to polling. ++ ++ ++* Noteworthy changes in release 8.22 (2013-12-13) [stable] ++ ++** Bug fixes ++ ++ df now processes the mount list correctly in the presence of unstatable ++ mount points. Previously it may have failed to output some mount points. ++ [bug introduced in coreutils-8.21] ++ ++ df now processes symbolic links and relative paths to special files containing ++ a mounted file system correctly. Previously df displayed the statistics about ++ the file system the file is stored on rather than the one inside. ++ [This bug was present in "the beginning".] ++ ++ df now processes disk device nodes correctly in the presence of bind mounts. ++ Now df shows the base mounted file system rather than the last one mounted. ++ [This bug was present in "the beginning".] ++ ++ install now removes the target file if the strip program failed for any ++ reason. Before, that file was left behind, sometimes even with wrong ++ permissions. ++ [This bug was present in "the beginning".] ++ ++ ln --relative now updates existing symlinks correctly. Previously it based ++ the relative link on the dereferenced path of an existing link. ++ [This bug was introduced when --relative was added in coreutils-8.16.] ++ ++ ls --recursive will no longer exit with "serious" exit code (2), if there ++ is an error reading a directory not specified on the command line. ++ [Bug introduced in coreutils-5.3.0] ++ ++ mkdir, mkfifo, and mknod now work better when creating a file in a directory ++ with a default ACL whose umask disagrees with the process's umask, on a ++ system such as GNU/Linux where directory ACL umasks override process umasks. ++ [bug introduced in coreutils-6.0] ++ ++ mv will now replace empty directories in the destination with directories ++ from the source, when copying across file systems. ++ [This bug was present in "the beginning".] ++ ++ od -wN with N larger than 64K on a system with 32-bit size_t would ++ print approximately 2*N bytes of extraneous padding. ++ [Bug introduced in coreutils-7.0] ++ ++ rm -I now prompts for confirmation before removing a write protected file. ++ [Bug introduced in coreutils-6.8] ++ ++ shred once again uses direct I/O on systems requiring aligned buffers. ++ Also direct I/O failures for odd sized writes at end of file are now handled. ++ [The "last write" bug was introduced in coreutils-5.3.0 but masked ++ by the alignment bug introduced in coreutils-6.0] ++ ++ tail --retry -f now waits for the files specified to appear. Before, tail ++ would immediately exit when such a file is initially inaccessible. ++ [This bug was introduced when inotify support was added in coreutils-7.5] ++ ++ tail -F has improved handling of symlinks. Previously tail didn't respond ++ to the symlink target (re)appearing after being (re)created. ++ [This bug was introduced when inotify support was added in coreutils-7.5] ++ ++** New features ++ ++ cp, install, mkdir, mknod, mkfifo and mv now support "restorecon" ++ functionality through the -Z option, to set the SELinux context ++ appropriate for the new item location in the file system. ++ ++ csplit accepts a new option: --suppressed-matched, to elide the lines ++ used to identify the split points. ++ ++ df --output now accepts a 'file' field, to propagate a specified ++ command line argument through to the output. ++ ++ du accepts a new option: --inodes to show the number of inodes instead ++ of the blocks used. ++ ++ id accepts a new option: --zero (-z) to delimit the output entries by ++ a NUL instead of a white space character. ++ ++ id and ls with -Z report the SMACK security context where available. ++ mkdir, mkfifo and mknod with --context set the SMACK context where available. ++ ++ id can now lookup by user ID, in addition to the existing name lookup. ++ ++ join accepts a new option: --zero-terminated (-z). As with the sort,uniq ++ option of the same name, this makes join consume and produce NUL-terminated ++ lines rather than newline-terminated lines. ++ ++ uniq accepts a new option: --group to print all items, while separating ++ unique groups with empty lines. ++ ++ shred accepts new parameters to the --remove option to give greater ++ control over that operation, which can greatly reduce sync overhead. ++ ++ shuf accepts a new option: --repeat (-r), which can repeat items in ++ the output. ++ ++** Changes in behavior ++ ++ cp --link now dereferences a symbolic link as source before creating the ++ hard link in the destination unless the -P,--no-deref option is specified. ++ Previously, it would create a hard link of the symbolic link, even when ++ the dereferencing options -L or -H were specified. ++ ++ cp, install, mkdir, mknod and mkfifo no longer accept an argument to the ++ short -Z option. The --context equivalent still takes an optional argument. ++ ++ dd status=none now suppresses all non fatal diagnostic messages, ++ not just the transfer counts. ++ ++ df no longer accepts the long-obsolescent --megabytes option. ++ ++ stdbuf now requires at least one buffering mode option to be specified, ++ as per the documented interface. ++ ++** Improvements ++ ++ base64 encoding throughput for bulk data is increased by about 60%. ++ ++ md5sum can use libcrypto hash routines where allowed to potentially ++ get better performance through using more system specific logic. ++ sha1sum for example has improved throughput by 40% on an i3-2310M. ++ This also affects sha1sum, sha224sum, sha256sum, sha384sum and sha512sum. ++ ++ stat and tail work better with EFIVARFS, EXOFS, F2FS, HOSTFS, SMACKFS, SNFS ++ and UBIFS. stat -f --format=%T now reports the file system type, and tail -f ++ now uses inotify for files on all those except SNFS, rather than the default ++ (for unknown file system types) of issuing a warning and reverting to polling. ++ ++ shuf outputs subsets of large inputs much more efficiently. ++ Reservoir sampling is used to limit memory usage based on the number of ++ outputs, rather than the number of inputs. ++ ++ shred increases the default write block size from 12KiB to 64KiB ++ to align with other utilities and reduce the system call overhead. ++ ++ split --line-bytes=SIZE, now only allocates memory as needed rather ++ than allocating SIZE bytes at program start. ++ ++ stty now supports configuring "stick" (mark/space) parity where available. ++ ++** Build-related ++ ++ factor now builds on aarch64 based systems [bug introduced in coreutils-8.20] ++ ++ ++* Noteworthy changes in release 8.21 (2013-02-14) [stable] ++ ++** New programs ++ ++ numfmt: reformat numbers ++ ++** New features ++ ++ df now accepts the --output[=FIELD_LIST] option to define the list of columns ++ to include in the output, or all available columns if the FIELD_LIST is ++ omitted. Note this enables df to output both block and inode fields together. ++ ++ du now accepts the --threshold=SIZE option to restrict the output to entries ++ with such a minimum SIZE (or a maximum SIZE if it is negative). ++ du recognizes -t SIZE as equivalent, for compatibility with FreeBSD. ++ ++ timeout now accepts the --preserve-status option to always propagate the exit ++ status, useful for commands that can run for an indeterminite amount of time. ++ ++** Bug fixes ++ ++ cp --no-preserve=mode now no longer exits non-zero. ++ [bug introduced in coreutils-8.20] ++ ++ cut with a range like "N-" no longer allocates N/8 bytes. That buffer ++ would never be used, and allocation failure could cause cut to fail. ++ [bug introduced in coreutils-8.10] ++ ++ cut no longer accepts the invalid range 0-, which made it print empty lines. ++ Instead, cut now fails and emits an appropriate diagnostic. ++ [This bug was present in "the beginning".] ++ ++ cut now handles overlapping to-EOL ranges properly. Before, it would ++ interpret "-b2-,3-" like "-b3-". Now it's treated like "-b2-". ++ [This bug was present in "the beginning".] ++ ++ cut no longer prints extraneous delimiters when a to-EOL range subsumes ++ another range. Before, "echo 123|cut --output-delim=: -b2-,3" would print ++ "2:3". Now it prints "23". [bug introduced in 5.3.0] ++ ++ cut -f no longer inspects input line N+1 before fully outputting line N, ++ which avoids delayed output for intermittent input. ++ [bug introduced in TEXTUTILS-1_8b] ++ ++ factor no longer loops infinitely on 32 bit powerpc or sparc systems. ++ [bug introduced in coreutils-8.20] ++ ++ install -m M SOURCE DEST no longer has a race condition where DEST's ++ permissions are temporarily derived from SOURCE instead of from M. ++ ++ pr -n no longer crashes when passed values >= 32. Also, line numbers are ++ consistently padded with spaces, rather than with zeros for certain widths. ++ [bug introduced in TEXTUTILS-1_22i] ++ ++ seq -w ensures that for numbers input in scientific notation, ++ the output numbers are properly aligned and of the correct width. ++ [This bug was present in "the beginning".] ++ ++ seq -w ensures correct alignment when the step value includes a precision ++ while the start value does not, and the number sequence narrows. ++ [This bug was present in "the beginning".] ++ ++ seq -s no longer prints an erroneous newline after the first number, and ++ outputs a newline after the last number rather than a trailing separator. ++ Also seq no longer ignores a specified step value when the end value is 1. ++ [bugs introduced in coreutils-8.20] ++ ++ timeout now ensures that blocking of ALRM signals is not inherited from ++ its parent, which would cause timeouts to be ignored. ++ [the bug dates back to the initial implementation] ++ ++** Changes in behavior ++ ++ df --total now prints '-' into the target column (mount point) of the ++ summary line, accommodating the --output option where the target field ++ can be in any column. If there is no source column, then df prints ++ 'total' in the target column. ++ ++ df now properly outputs file system information with bind mounts present on ++ the system by skipping duplicate entries (identified by the device number). ++ Consequently, df also elides the early-boot pseudo file system type "rootfs". ++ ++ cut -d$'\n' no longer outputs lines identified in the --fields list, ++ to align with other implementations and to avoid delayed output of lines. ++ ++ nl no longer supports the --page-increment option, which has been ++ deprecated since coreutils-7.5. Use --line-increment instead. ++ ++** Improvements ++ ++ readlink now supports multiple arguments, and a complementary ++ -z, --zero option to delimit output items with the NUL character. ++ ++ stat and tail now know about CEPH. stat -f --format=%T now reports the file ++ system type, and tail -f uses polling for files on CEPH file systems. ++ ++ stty now supports configuring DTR/DSR hardware flow control where available. ++ ++** Build-related ++ ++ Perl is now more of a prerequisite. It has long been required in order ++ to run (not skip) a significant percentage of the tests. Now, it is ++ also required in order to generate proper man pages, via help2man. The ++ generated man/*.1 man pages are no longer distributed. Building without ++ perl, you would create stub man pages. Thus, while perl is not an ++ official prerequisite (build and "make check" will still succeed), any ++ resulting man pages would be inferior. In addition, this fixes a bug ++ in distributed (not from clone) Makefile.in that could cause parallel ++ build failure when building from modified sources, as is common practice ++ for a patched distribution package. ++ ++ factor now builds on x86_64 with x32 ABI, 32 bit MIPS, and all HPPA systems, ++ by avoiding incompatible asm. [bug introduced in coreutils-8.20] ++ ++ A root-only test predicate would always fail. Its job was to determine ++ whether our dummy user, $NON_ROOT_USERNAME, was able to run binaries from ++ the build directory. As a result, all dependent tests were always skipped. ++ Now, those tests may be run once again. [bug introduced in coreutils-8.20] ++ ++ ++* Noteworthy changes in release 8.20 (2012-10-23) [stable] ++ ++** New features ++ ++ dd now accepts 'status=none' to suppress all informational output. ++ ++ md5sum now accepts the --tag option to print BSD-style output with GNU ++ file name escaping. This also affects sha1sum, sha224sum, sha256sum, ++ sha384sum and sha512sum. ++ ++** Bug fixes ++ ++ cp could read from freed memory and could even make corrupt copies. ++ This could happen with a very fragmented and sparse input file, ++ on GNU/Linux file systems supporting fiemap extent scanning. ++ This bug also affects mv when it resorts to copying, and install. ++ [bug introduced in coreutils-8.11] ++ ++ cp --no-preserve=mode now no longer preserves the original file's ++ permissions but correctly sets mode specified by 0666 & ~umask ++ ++ du no longer emits a "disk-corrupted"-style diagnostic when it detects ++ a directory cycle that is due to a bind-mounted directory. Instead, ++ it detects this precise type of cycle, diagnoses it as such and ++ eventually exits nonzero. ++ ++ factor (when using gmp) would mistakenly declare some composite numbers ++ to be prime, e.g., 465658903, 2242724851, 6635692801 and many more. ++ The fix makes factor somewhat slower (~25%) for ranges of consecutive ++ numbers, and up to 8 times slower for some worst-case individual numbers. ++ [bug introduced in coreutils-7.0, with GNU MP support] ++ ++ ls now correctly colors dangling symlinks when listing their containing ++ directories, with orphaned symlink coloring disabled in LS_COLORS. ++ [bug introduced in coreutils-8.14] ++ ++ rm -i -d now prompts the user then removes an empty directory, rather ++ than ignoring the -d option and failing with an 'Is a directory' error. ++ [bug introduced in coreutils-8.19, with the addition of --dir (-d)] ++ ++ rm -r S/ (where S is a symlink-to-directory) no longer gives the invalid ++ "Too many levels of symbolic links" diagnostic. ++ [bug introduced in coreutils-8.6] ++ ++ seq now handles arbitrarily long non-negative whole numbers when the ++ increment is 1 and when no format-changing option is specified. ++ Before, this would infloop: ++ b=100000000000000000000; seq $b $b ++ [the bug dates back to the initial implementation] ++ ++** Changes in behavior ++ ++ nproc now diagnoses with an error, non option command line parameters. ++ ++** Improvements ++ ++ factor's core has been rewritten for speed and increased range. ++ It can now factor numbers up to 2^128, even without GMP support. ++ Its speed is from a few times better (for small numbers) to over ++ 10,000 times better (just below 2^64). The new code also runs a ++ deterministic primality test for each prime factor, not just a ++ probabilistic test. ++ ++ seq is now up to 70 times faster than it was in coreutils-8.19 and prior, ++ but only with non-negative whole numbers, an increment of 1, and no ++ format-changing options. ++ ++ stat and tail know about ZFS, VZFS and VMHGFS. stat -f --format=%T now ++ reports the file system type, and tail -f now uses inotify for files on ++ ZFS and VZFS file systems, rather than the default (for unknown file ++ system types) of issuing a warning and reverting to polling. tail -f ++ still uses polling for files on VMHGFS file systems. ++ ++** Build-related ++ ++ root-only tests now check for permissions of our dummy user, ++ $NON_ROOT_USERNAME, before trying to run binaries from the build directory. ++ Before, we would get hard-to-diagnose reports of failing root-only tests. ++ Now, those tests are skipped with a useful diagnostic when the root tests ++ are run without following the instructions in README. ++ ++ We now build most directories using non-recursive make rules. I.e., ++ rather than running make in man/, lib/, src/, tests/, instead, the top ++ level Makefile.am includes a $dir/local.mk that describes how to build ++ the targets in the corresponding directory. Two directories remain ++ unconverted: po/, gnulib-tests/. One nice side-effect is that the more ++ accurate dependencies have eliminated a nagging occasional failure that ++ was seen when running parallel "make syntax-check". ++ ++ ++* Noteworthy changes in release 8.19 (2012-08-20) [stable] ++ ++** Bug fixes ++ ++ df now fails when the list of mounted file systems (/etc/mtab) cannot ++ be read, yet the file system type information is needed to process ++ certain options like -a, -l, -t and -x. ++ [This bug was present in "the beginning".] ++ ++ sort -u could fail to output one or more result lines. ++ For example, this command would fail to print "1": ++ (yes 7 | head -11; echo 1) | sort --p=1 -S32b -u ++ [bug introduced in coreutils-8.6] ++ ++ sort -u could read freed memory. ++ For example, this evokes a read from freed memory: ++ perl -le 'print "a\n"."0"x900'|valgrind sort --p=1 -S32b -u>/dev/null ++ [bug introduced in coreutils-8.6] ++ ++** New features ++ ++ rm now accepts the --dir (-d) option which makes it remove empty directories. ++ Since removing empty directories is relatively safe, this option can be ++ used as a part of the alias rm='rm --dir'. This improves compatibility ++ with Mac OS X and BSD systems which also honor the -d option. ++ ++ ++* Noteworthy changes in release 8.18 (2012-08-12) [stable] ++ ++** Bug fixes ++ ++ cksum now prints checksums atomically so that concurrent ++ processes will not intersperse their output. ++ [the bug dates back to the initial implementation] ++ ++ date -d "$(printf '\xb0')" would print 00:00:00 with today's date ++ rather than diagnosing the invalid input. Now it reports this: ++ date: invalid date '\260' ++ [This bug was present in "the beginning".] ++ ++ df no longer outputs control characters present in the mount point name. ++ Such characters are replaced with '?', so for example, scripts consuming ++ lines output by df, can work reliably. ++ [This bug was present in "the beginning".] ++ ++ df --total now exits with an appropriate diagnostic and error code, when ++ file system --type options do not lead to a processed file system. ++ [This bug dates back to when --total was added in coreutils-7.0] ++ ++ head --lines=-N (-n-N) now resets the read pointer of a seekable input file. ++ This means that "head -n-3" no longer consumes all of its input, and lines ++ not output by head may be processed by other programs. For example, this ++ command now prints the final line, 2, while before it would print nothing: ++ seq 2 > k; (head -n-1 > /dev/null; cat) < k ++ [This bug was present in "the beginning".] ++ ++ ls --color would mis-color relative-named symlinks in / ++ [bug introduced in coreutils-8.17] ++ ++ split now ensures it doesn't overwrite the input file with generated output. ++ [the bug dates back to the initial implementation] ++ ++ stat and df now report the correct file system usage, ++ in all situations on GNU/Linux, by correctly determining the block size. ++ [df bug since coreutils-5.0.91, stat bug since the initial implementation] ++ ++ tail -f no longer tries to use inotify on AUFS or PanFS file systems ++ [you might say this was introduced in coreutils-7.5, along with inotify ++ support, but even now, its magic number isn't in the usual place.] ++ ++** New features ++ ++ stat -f recognizes the new remote file system types: aufs, panfs. ++ ++** Changes in behavior ++ ++ su: this program has been removed. We stopped installing "su" by ++ default with the release of coreutils-6.9.90 on 2007-12-01. Now, ++ that the util-linux package has the union of the Suse and Fedora ++ patches as well as enough support to build on the Hurd, we no longer ++ have any reason to include it here. ++ ++** Improvements ++ ++ sort avoids redundant processing in the presence of inaccessible inputs, ++ or unwritable output. Sort now diagnoses certain errors at start-up, ++ rather than after potentially expensive processing. ++ ++ sort now allocates no more than 75% of physical memory by default, ++ to better share system resources, and thus operate more efficiently. ++ [The default max memory usage changed from 50% to 100% in coreutils-8.16] ++ ++ ++* Noteworthy changes in release 8.17 (2012-05-10) [stable] ++ ++** Bug fixes ++ ++ id and groups, when invoked with no user name argument, would print ++ the default group ID listed in the password database, and sometimes ++ that ID would be neither real nor effective. For example, when run ++ set-GID, or in a session for which the default group has just been ++ changed, the new group ID would be listed, even though it is not ++ yet effective. [bug introduced in coreutils-8.1] ++ ++ cp S D is no longer subject to a race: if an existing D were removed ++ between the initial stat and subsequent open-without-O_CREATE, cp would ++ fail with a confusing diagnostic saying that the destination, D, was not ++ found. Now, in this unusual case, it retries the open (but with O_CREATE), ++ and hence usually succeeds. With NFS attribute caching, the condition ++ was particularly easy to trigger, since there, the removal of D could ++ precede the initial stat. [This bug was present in "the beginning".] ++ ++ split --number=C /dev/null no longer appears to infloop on GNU/Hurd ++ [bug introduced in coreutils-8.8] ++ ++ stat no longer reports a negative file size as a huge positive number. ++ [bug present since 'stat' was introduced in fileutils-4.1.9] ++ ++** New features ++ ++ split and truncate now allow any seekable files in situations where ++ the file size is needed, instead of insisting on regular files. ++ ++ fmt now accepts the --goal=WIDTH (-g) option. ++ ++ stat -f recognizes new file system types: bdevfs, inodefs, qnx6 ++ ++** Changes in behavior ++ ++ cp,mv,install,cat,split: now read and write a minimum of 64KiB at a time. ++ This was previously 32KiB and increasing to 64KiB was seen to increase ++ throughput by about 10% when reading cached files on 64 bit GNU/Linux. ++ ++ cp --attributes-only no longer truncates any existing destination file, ++ allowing for more general copying of attributes from one file to another. ++ ++ ++* Noteworthy changes in release 8.16 (2012-03-26) [stable] ++ ++** New features ++ ++ As a GNU extension, 'chmod', 'mkdir', and 'install' now accept operators ++ '-', '+', '=' followed by octal modes; for example, 'chmod +40 FOO' enables ++ and 'chmod -40 FOO' disables FOO's group-read permissions. Operator ++ numeric modes can be combined with symbolic modes by separating them with ++ commas; for example, =0,u+r clears all permissions except for enabling ++ user-read permissions. Unlike ordinary numeric modes, operator numeric ++ modes do not preserve directory setuid and setgid bits; for example, ++ 'chmod =0 FOO' clears all of FOO's permissions, including setuid and setgid. ++ ++ Also, ordinary numeric modes with five or more digits no longer preserve ++ setuid and setgid bits, so that 'chmod 00755 FOO' now clears FOO's setuid ++ and setgid bits. This allows scripts to be portable to other systems which ++ lack the GNU extension mentioned previously, and where ordinary numeric ++ modes do not preserve directory setuid and setgid bits. ++ ++ dd now accepts the count_bytes, skip_bytes iflags and the seek_bytes ++ oflag, to more easily allow processing portions of a file. ++ ++ dd now accepts the conv=sparse flag to attempt to create sparse ++ output, by seeking rather than writing to the output file. ++ ++ ln now accepts the --relative option, to generate a relative ++ symbolic link to a target, irrespective of how the target is specified. ++ ++ split now accepts an optional "from" argument to --numeric-suffixes, ++ which changes the start number from the default of 0. ++ ++ split now accepts the --additional-suffix option, to append an ++ additional static suffix to output file names. ++ ++ basename now supports the -a and -s options, which allow processing ++ of more than one argument at a time. Also the complementary ++ -z option was added to delimit output items with the NUL character. ++ ++ dirname now supports more than one argument. Also the complementary ++ -z option was added to delimit output items with the NUL character. ++ ++** Bug fixes ++ ++ du --one-file-system (-x) would ignore any non-directory specified on ++ the command line. For example, "touch f; du -x f" would print nothing. ++ [bug introduced in coreutils-8.15] ++ ++ mv now lets you move a symlink onto a same-inode destination file that ++ has two or more hard links. Before, it would reject that, saying that ++ they are the same, implicitly warning you that the move would result in ++ data loss. In this unusual case, when not moving the symlink onto its ++ referent, there is no risk of data loss, since the symlink will ++ typically still point to one of the hard links. ++ ++ "mv A B" could succeed, yet A would remain. This would happen only when ++ both A and B were hard links to the same symlink, and with a kernel for ++ which rename("A","B") does nothing and returns 0 (POSIX mandates this ++ surprising rename no-op behavior). Now, mv handles this case by skipping ++ the usually-useless rename and simply unlinking A. ++ ++ realpath no longer mishandles a root directory. This was most ++ noticeable on platforms where // is a different directory than /, ++ but could also be observed with --relative-base=/ or ++ --relative-to=/. [bug since the beginning, in 8.15] ++ ++** Improvements ++ ++ ls can be much more efficient, especially with large directories on file ++ systems for which getfilecon-, ACL-check- and XATTR-check-induced syscalls ++ fail with ENOTSUP or similar. ++ ++ 'realpath --relative-base=dir' in isolation now implies '--relative-to=dir' ++ instead of causing a usage failure. ++ ++ split now supports an unlimited number of split files as default behavior. ++ ++ ++* Noteworthy changes in release 8.15 (2012-01-06) [stable] ++ ++** New programs ++ ++ realpath: print resolved file names. ++ ++** Bug fixes ++ ++ du -x no longer counts root directories of other file systems. ++ [bug introduced in coreutils-5.1.0] ++ ++ ls --color many-entry-directory was uninterruptible for too long ++ [bug introduced in coreutils-5.2.1] ++ ++ ls's -k option no longer affects how ls -l outputs file sizes. ++ It now affects only the per-directory block counts written by -l, ++ and the sizes written by -s. This is for compatibility with BSD ++ and with POSIX 2008. Because -k is no longer equivalent to ++ --block-size=1KiB, a new long option --kibibyte stands for -k. ++ [bug introduced in coreutils-4.5.4] ++ ++ ls -l would leak a little memory (security context string) for each ++ nonempty directory listed on the command line, when using SELinux. ++ [bug probably introduced in coreutils-6.10 with SELinux support] ++ ++ rm -rf DIR would fail with "Device or resource busy" on Cygwin with NWFS ++ and NcFsd file systems. This did not affect Unix/Linux-based kernels. ++ [bug introduced in coreutils-8.0, when rm began using fts] ++ ++ split -n 1/2 FILE no longer fails when operating on a growing file, or ++ (on some systems) when operating on a non-regular file like /dev/zero. ++ It would report "/dev/zero: No such file or directory" even though ++ the file obviously exists. Same for -n l/2. ++ [bug introduced in coreutils-8.8, with the addition of the -n option] ++ ++ stat -f now recognizes the FhGFS and PipeFS file system types. ++ ++ tac no longer fails to handle two or more non-seekable inputs ++ [bug introduced in coreutils-5.3.0] ++ ++ tail -f no longer tries to use inotify on GPFS or FhGFS file systems ++ [you might say this was introduced in coreutils-7.5, along with inotify ++ support, but the new magic numbers weren't in the usual places then.] ++ ++** Changes in behavior ++ ++ df avoids long UUID-including file system names in the default listing. ++ With recent enough kernel/tools, these long names would be used, pushing ++ second and subsequent columns far to the right. Now, when a long name ++ refers to a symlink, and no file systems are specified, df prints the ++ usually-short referent instead. ++ ++ tail -f now uses polling (not inotify) when any of its file arguments ++ resides on a file system of unknown type. In addition, for each such ++ argument, tail -f prints a warning with the FS type magic number and a ++ request to report it to the bug-reporting address. ++ ++ ++* Noteworthy changes in release 8.14 (2011-10-12) [stable] ++ ++** Bug fixes ++ ++ ls --dereference no longer outputs erroneous "argetm" strings for ++ dangling symlinks when an 'ln=target' entry is in $LS_COLORS. ++ [bug introduced in fileutils-4.0] ++ ++ ls -lL symlink once again properly prints "+" when the referent has an ACL. ++ [bug introduced in coreutils-8.13] ++ ++ sort -g no longer infloops for certain inputs containing NaNs ++ [bug introduced in coreutils-8.5] ++ ++** Improvements ++ ++ md5sum --check now supports the -r format from the corresponding BSD tool. ++ This also affects sha1sum, sha224sum, sha384sum and sha512sum. ++ ++ pwd now works also on systems without openat. On such systems, pwd ++ would fail when run from a directory whose absolute name contained ++ more than PATH_MAX / 3 components. The df, stat and readlink programs ++ are also affected due to their use of the canonicalize_* functions. ++ ++** Changes in behavior ++ ++ timeout now only processes the first signal received from the set ++ it is handling (SIGTERM, SIGINT, ...). This is to support systems that ++ implicitly create threads for some timer functions (like GNU/kFreeBSD). ++ ++** Build-related ++ ++ "make dist" no longer builds .tar.gz files. ++ xz is portable enough and in wide-enough use that distributing ++ only .tar.xz files is enough. ++ ++ ++* Noteworthy changes in release 8.13 (2011-09-08) [stable] ++ ++** Bug fixes ++ ++ chown and chgrp with the -v --from= options, now output the correct owner. ++ I.E. for skipped files, the original ownership is output, not the new one. ++ [bug introduced in sh-utils-2.0g] ++ ++ cp -r could mistakenly change the permissions of an existing destination ++ directory. [bug introduced in coreutils-6.8] ++ ++ cp -u -p would fail to preserve one hard link for each up-to-date copy ++ of a src-hard-linked name in the destination tree. I.e., if s/a and s/b ++ are hard-linked and dst/s/a is up to date, "cp -up s dst" would copy s/b ++ to dst/s/b rather than simply linking dst/s/b to dst/s/a. ++ [This bug appears to have been present in "the beginning".] ++ ++ fts-using tools (rm, du, chmod, chgrp, chown, chcon) no longer use memory ++ proportional to the number of entries in each directory they process. ++ Before, rm -rf 4-million-entry-directory would consume about 1GiB of memory. ++ Now, it uses less than 30MB, no matter how many entries there are. ++ [this bug was inherent in the use of fts: thus, for rm the bug was ++ introduced in coreutils-8.0. The prior implementation of rm did not use ++ as much memory. du, chmod, chgrp and chown started using fts in 6.0. ++ chcon was added in coreutils-6.9.91 with fts support. ] ++ ++ pr -T no longer ignores a specified LAST_PAGE to stop at. ++ [bug introduced in textutils-1.19q] ++ ++ printf '%d' '"' no longer accesses out-of-bounds memory in the diagnostic. ++ [bug introduced in sh-utils-1.16] ++ ++ split --number l/... no longer creates extraneous files in certain cases. ++ [bug introduced in coreutils-8.8] ++ ++ timeout now sends signals to commands that create their own process group. ++ timeout is no longer confused when starting off with a child process. ++ [bugs introduced in coreutils-7.0] ++ ++ unexpand -a now aligns correctly when there are spaces spanning a tabstop, ++ followed by a tab. In that case a space was dropped, causing misalignment. ++ We also now ensure that a space never precedes a tab. ++ [bug introduced in coreutils-5.3.0] ++ ++** Changes in behavior ++ ++ chmod, chown and chgrp now output the original attributes in messages, ++ when -v or -c specified. ++ ++ cp -au (where --preserve=links is implicit) may now replace newer ++ files in the destination, to mirror hard links from the source. ++ ++** New features ++ ++ date now accepts ISO 8601 date-time strings with "T" as the ++ separator. It has long parsed dates like "2004-02-29 16:21:42" ++ with a space between the date and time strings. Now it also parses ++ "2004-02-29T16:21:42" and fractional-second and time-zone-annotated ++ variants like "2004-02-29T16:21:42.333-07:00" ++ ++ md5sum accepts the new --strict option. With --check, it makes the ++ tool exit non-zero for any invalid input line, rather than just warning. ++ This also affects sha1sum, sha224sum, sha384sum and sha512sum. ++ ++ split accepts a new --filter=CMD option. With it, split filters output ++ through CMD. CMD may use the $FILE environment variable, which is set to ++ the nominal output file name for each invocation of CMD. For example, to ++ split a file into 3 approximately equal parts, which are then compressed: ++ split -n3 --filter='xz > $FILE.xz' big ++ Note the use of single quotes, not double quotes. ++ That creates files named xaa.xz, xab.xz and xac.xz. ++ ++ timeout accepts a new --foreground option, to support commands not started ++ directly from a shell prompt, where the command is interactive or needs to ++ receive signals initiated from the terminal. ++ ++** Improvements ++ ++ cp -p now copies trivial NSFv4 ACLs on Solaris 10. Before, it would ++ mistakenly apply a non-trivial ACL to the destination file. ++ ++ cp and ls now support HP-UX 11.11's ACLs, thanks to improved support ++ in gnulib. ++ ++ df now supports disk partitions larger than 4 TiB on MacOS X 10.5 ++ or newer and on AIX 5.2 or newer. ++ ++ join --check-order now prints "join: FILE:LINE_NUMBER: bad_line" for an ++ unsorted input, rather than e.g., "join: file 1 is not in sorted order". ++ ++ shuf outputs small subsets of large permutations much more efficiently. ++ For example 'shuf -i1-$((2**32-1)) -n2' no longer exhausts memory. ++ ++ stat -f now recognizes the GPFS, MQUEUE and PSTOREFS file system types. ++ ++ timeout now supports sub-second timeouts. ++ ++** Build-related ++ ++ Changes inherited from gnulib address a build failure on HP-UX 11.11 ++ when using /opt/ansic/bin/cc. ++ ++ Numerous portability and build improvements inherited via gnulib. ++ ++ ++* Noteworthy changes in release 8.12 (2011-04-26) [stable] ++ ++** Bug fixes ++ ++ tail's --follow=name option no longer implies --retry on systems ++ with inotify support. [bug introduced in coreutils-7.5] ++ ++** Changes in behavior ++ ++ cp's extent-based (FIEMAP) copying code is more reliable in the face ++ of varying and undocumented file system semantics: ++ - it no longer treats unwritten extents specially ++ - a FIEMAP-based extent copy always uses the FIEMAP_FLAG_SYNC flag. ++ Before, it would incur the performance penalty of that sync only ++ for 2.6.38 and older kernels. We thought all problems would be ++ resolved for 2.6.39. ++ - it now attempts a FIEMAP copy only on a file that appears sparse. ++ Sparse files are relatively unusual, and the copying code incurs ++ the performance penalty of the now-mandatory sync only for them. ++ ++** Portability ++ ++ dd once again compiles on AIX 5.1 and 5.2 ++ ++ ++* Noteworthy changes in release 8.11 (2011-04-13) [stable] ++ ++** Bug fixes ++ ++ cp -a --link would not create a hardlink to a symlink, instead ++ copying the symlink and then not preserving its timestamp. ++ [bug introduced in coreutils-8.0] ++ ++ cp now avoids FIEMAP issues with BTRFS before Linux 2.6.38, ++ which could result in corrupt copies of sparse files. ++ [bug introduced in coreutils-8.10] ++ ++ cut could segfault when invoked with a user-specified output ++ delimiter and an unbounded range like "-f1234567890-". ++ [bug introduced in coreutils-5.3.0] ++ ++ du would infloop when given --files0-from=DIR ++ [bug introduced in coreutils-7.1] ++ ++ sort no longer spawns 7 worker threads to sort 16 lines ++ [bug introduced in coreutils-8.6] ++ ++ touch built on Solaris 9 would segfault when run on Solaris 10 ++ [bug introduced in coreutils-8.8] ++ ++ wc would dereference a NULL pointer upon an early out-of-memory error ++ [bug introduced in coreutils-7.1] ++ ++** New features ++ ++ dd now accepts the 'nocache' flag to the iflag and oflag options, ++ which will discard any cache associated with the files, or ++ processed portion thereof. ++ ++ dd now warns that 'iflag=fullblock' should be used, ++ in various cases where partial reads can cause issues. ++ ++** Changes in behavior ++ ++ cp now avoids syncing files when possible, when doing a FIEMAP copy. ++ The sync is only needed on Linux kernels before 2.6.39. ++ [The sync was introduced in coreutils-8.10] ++ ++ cp now copies empty extents efficiently, when doing a FIEMAP copy. ++ It no longer reads the zero bytes from the input, and also can efficiently ++ create a hole in the output file when --sparse=always is specified. ++ ++ df now aligns columns consistently, and no longer wraps entries ++ with longer device identifiers, over two lines. ++ ++ install now rejects its long-deprecated --preserve_context option. ++ Use --preserve-context instead. ++ ++ test now accepts "==" as a synonym for "=" ++ ++ ++* Noteworthy changes in release 8.10 (2011-02-04) [stable] ++ ++** Bug fixes ++ ++ du would abort with a failed assertion when two conditions are met: ++ part of the hierarchy being traversed is moved to a higher level in the ++ directory tree, and there is at least one more command line directory ++ argument following the one containing the moved sub-tree. ++ [bug introduced in coreutils-5.1.0] ++ ++ join --header now skips the ordering check for the first line ++ even if the other file is empty. [bug introduced in coreutils-8.5] ++ ++ join -v2 now ensures the default output format prints the match field ++ at the start of the line when it is different to the match field for ++ the first file. [bug present in "the beginning".] ++ ++ rm -f no longer fails for EINVAL or EILSEQ on file systems that ++ reject file names invalid for that file system. ++ ++ uniq -f NUM no longer tries to process fields after end of line. ++ [bug introduced in coreutils-7.0] ++ ++** New features ++ ++ cp now copies sparse files efficiently on file systems with FIEMAP ++ support (ext4, btrfs, xfs, ocfs2). Before, it had to read 2^20 bytes ++ when copying a 1MiB sparse file. Now, it copies bytes only for the ++ non-sparse sections of a file. Similarly, to induce a hole in the ++ output file, it had to detect a long sequence of zero bytes. Now, ++ it knows precisely where each hole in an input file is, and can ++ reproduce them efficiently in the output file. mv also benefits ++ when it resorts to copying, e.g., between file systems. ++ ++ join now supports -o 'auto' which will automatically infer the ++ output format from the first line in each file, to ensure ++ the same number of fields are output for each line. ++ ++** Changes in behavior ++ ++ join no longer reports disorder when one of the files is empty. ++ This allows one to use join as a field extractor like: ++ join -a1 -o 1.3,1.1 - /dev/null ++ ++ ++* Noteworthy changes in release 8.9 (2011-01-04) [stable] ++ ++** Bug fixes ++ ++ split no longer creates files with a suffix length that ++ is dependent on the number of bytes or lines per file. ++ [bug introduced in coreutils-8.8] ++ ++ ++* Noteworthy changes in release 8.8 (2010-12-22) [stable] ++ ++** Bug fixes ++ ++ cp -u no longer does unnecessary copying merely because the source ++ has finer-grained time stamps than the destination. ++ ++ od now prints floating-point numbers without losing information, and ++ it no longer omits spaces between floating-point columns in some cases. ++ ++ sort -u with at least two threads could attempt to read through a ++ corrupted pointer. [bug introduced in coreutils-8.6] ++ ++ sort with at least two threads and with blocked output would busy-loop ++ (spinlock) all threads, often using 100% of available CPU cycles to ++ do no work. I.e., "sort < big-file | less" could waste a lot of power. ++ [bug introduced in coreutils-8.6] ++ ++ sort with at least two threads no longer segfaults due to use of pointers ++ into the stack of an expired thread. [bug introduced in coreutils-8.6] ++ ++ sort --compress no longer mishandles subprocesses' exit statuses, ++ no longer hangs indefinitely due to a bug in waiting for subprocesses, ++ and no longer generates many more than NMERGE subprocesses. ++ ++ sort -m -o f f ... f no longer dumps core when file descriptors are limited. ++ ++** Changes in behavior ++ ++ sort will not create more than 8 threads by default due to diminishing ++ performance gains. Also the --parallel option is no longer restricted ++ to the number of available processors. ++ ++** New features ++ ++ split accepts the --number option to generate a specific number of files. ++ ++ ++* Noteworthy changes in release 8.7 (2010-11-13) [stable] ++ ++** Bug fixes ++ ++ cp, install, mv, and touch no longer crash when setting file times ++ on Solaris 10 Update 9 [Solaris PatchID 144488 and newer expose a ++ latent bug introduced in coreutils 8.1, and possibly a second latent ++ bug going at least as far back as coreutils 5.97] ++ ++ csplit no longer corrupts heap when writing more than 999 files, ++ nor does it leak memory for every chunk of input processed ++ [the bugs were present in the initial implementation] ++ ++ tail -F once again notices changes in a currently unavailable ++ remote directory [bug introduced in coreutils-7.5] ++ ++** Changes in behavior ++ ++ cp --attributes-only now completely overrides --reflink. ++ Previously a reflink was needlessly attempted. ++ ++ stat's %X, %Y, and %Z directives once again print only the integer ++ part of seconds since the epoch. This reverts a change from ++ coreutils-8.6, that was deemed unnecessarily disruptive. ++ To obtain a nanosecond-precision time stamp for %X use %.X; ++ if you want (say) just 3 fractional digits, use %.3X. ++ Likewise for %Y and %Z. ++ ++ stat's new %W format directive would print floating point seconds. ++ However, with the above change to %X, %Y and %Z, we've made %W work ++ the same way as the others. ++ ++ stat gained support for several printf-style flags, such as %'s for ++ listing sizes with the current locale's thousands separator. ++ ++ ++* Noteworthy changes in release 8.6 (2010-10-15) [stable] ++ ++** Bug fixes ++ ++ du no longer multiply counts a file that is a directory or whose ++ link count is 1, even if the file is reached multiple times by ++ following symlinks or via multiple arguments. ++ ++ du -H and -L now consistently count pointed-to files instead of ++ symbolic links, and correctly diagnose dangling symlinks. ++ ++ du --ignore=D now ignores directory D even when that directory is ++ found to be part of a directory cycle. Before, du would issue a ++ "NOTIFY YOUR SYSTEM MANAGER" diagnostic and fail. ++ ++ split now diagnoses read errors rather than silently exiting. ++ [bug introduced in coreutils-4.5.8] ++ ++ tac would perform a double-free when given an input line longer than 16KiB. ++ [bug introduced in coreutils-8.3] ++ ++ tail -F once again notices changes in a currently unavailable directory, ++ and works around a Linux kernel bug where inotify runs out of resources. ++ [bugs introduced in coreutils-7.5] ++ ++ tr now consistently handles case conversion character classes. ++ In some locales, valid conversion specifications caused tr to abort, ++ while in all locales, some invalid specifications were undiagnosed. ++ [bugs introduced in coreutils 6.9.90 and 6.9.92] ++ ++** New features ++ ++ cp now accepts the --attributes-only option to not copy file data, ++ which is useful for efficiently modifying files. ++ ++ du recognizes -d N as equivalent to --max-depth=N, for compatibility ++ with FreeBSD. ++ ++ sort now accepts the --debug option, to highlight the part of the ++ line significant in the sort, and warn about questionable options. ++ ++ sort now supports -d, -f, -i, -R, and -V in any combination. ++ ++ stat now accepts the %m format directive to output the mount point ++ for a file. It also accepts the %w and %W format directives for ++ outputting the birth time of a file, if one is available. ++ ++** Changes in behavior ++ ++ df now consistently prints the device name for a bind mounted file, ++ rather than its aliased target. ++ ++ du now uses less than half as much memory when operating on trees ++ with many hard-linked files. With --count-links (-l), or when ++ operating on trees with no hard-linked files, there is no change. ++ ++ ls -l now uses the traditional three field time style rather than ++ the wider two field numeric ISO style, in locales where a style has ++ not been specified. The new approach has nicer behavior in some ++ locales, including English, which was judged to outweigh the disadvantage ++ of generating less-predictable and often worse output in poorly-configured ++ locales where there is an onus to specify appropriate non-default styles. ++ [The old behavior was introduced in coreutils-6.0 and had been removed ++ for English only using a different method since coreutils-8.1] ++ ++ rm's -d now evokes an error; before, it was silently ignored. ++ ++ sort -g now uses long doubles for greater range and precision. ++ ++ sort -h no longer rejects numbers with leading or trailing ".", and ++ no longer accepts numbers with multiple ".". It now considers all ++ zeros to be equal. ++ ++ sort now uses the number of available processors to parallelize ++ the sorting operation. The number of sorts run concurrently can be ++ limited with the --parallel option or with external process ++ control like taskset for example. ++ ++ stat now provides translated output when no format is specified. ++ ++ stat no longer accepts the --context (-Z) option. Initially it was ++ merely accepted and ignored, for compatibility. Starting two years ++ ago, with coreutils-7.0, its use evoked a warning. Printing the ++ SELinux context of a file can be done with the %C format directive, ++ and the default output when no format is specified now automatically ++ includes %C when context information is available. ++ ++ stat no longer accepts the %C directive when the --file-system ++ option is in effect, since security context is a file attribute ++ rather than a file system attribute. ++ ++ stat now outputs the full sub-second resolution for the atime, ++ mtime, and ctime values since the Epoch, when using the %X, %Y, and ++ %Z directives of the --format option. This matches the fact that ++ %x, %y, and %z were already doing so for the human-readable variant. ++ ++ touch's --file option is no longer recognized. Use --reference=F (-r) ++ instead. --file has not been documented for 15 years, and its use has ++ elicited a warning since coreutils-7.1. ++ ++ truncate now supports setting file sizes relative to a reference file. ++ Also errors are no longer suppressed for unsupported file types, and ++ relative sizes are restricted to supported file types. ++ ++ ++* Noteworthy changes in release 8.5 (2010-04-23) [stable] ++ ++** Bug fixes ++ ++ cp and mv once again support preserving extended attributes. ++ [bug introduced in coreutils-8.4] ++ ++ cp now preserves "capabilities" when also preserving file ownership. ++ ++ ls --color once again honors the 'NORMAL' dircolors directive. ++ [bug introduced in coreutils-6.11] ++ ++ sort -M now handles abbreviated months that are aligned using blanks ++ in the locale database. Also locales with 8 bit characters are ++ handled correctly, including multi byte locales with the caveat ++ that multi byte characters are matched case sensitively. ++ ++ sort again handles obsolescent key formats (+POS -POS) correctly. ++ Previously if -POS was specified, 1 field too many was used in the sort. ++ [bug introduced in coreutils-7.2] ++ ++** New features ++ ++ join now accepts the --header option, to treat the first line of each ++ file as a header line to be joined and printed unconditionally. ++ ++ timeout now accepts the --kill-after option which sends a kill ++ signal to the monitored command if it's still running the specified ++ duration after the initial signal was sent. ++ ++ who: the "+/-" --mesg (-T) indicator of whether a user/tty is accepting ++ messages could be incorrectly listed as "+", when in fact, the user was ++ not accepting messages (mesg no). Before, who would examine only the ++ permission bits, and not consider the group of the TTY device file. ++ Thus, if a login tty's group would change somehow e.g., to "root", ++ that would make it unwritable (via write(1)) by normal users, in spite ++ of whatever the permission bits might imply. Now, when configured ++ using the --with-tty-group[=NAME] option, who also compares the group ++ of the TTY device with NAME (or "tty" if no group name is specified). ++ ++** Changes in behavior ++ ++ ls --color no longer emits the final 3-byte color-resetting escape ++ sequence when it would be a no-op. ++ ++ join -t '' no longer emits an error and instead operates on ++ each line as a whole (even if they contain NUL characters). ++ ++ ++* Noteworthy changes in release 8.4 (2010-01-13) [stable] ++ ++** Bug fixes ++ ++ nproc --all is now guaranteed to be as large as the count ++ of available processors, which may not have been the case ++ on GNU/Linux systems with neither /proc nor /sys available. ++ [bug introduced in coreutils-8.1] ++ ++** Build-related ++ ++ Work around a build failure when using buggy . ++ Alternatively, configure with --disable-libcap. ++ ++ Compilation would fail on systems using glibc-2.7..2.9 due to changes in ++ gnulib's wchar.h that tickled a bug in at least those versions of glibc's ++ own header. Now, gnulib works around the bug in those older ++ glibc headers. ++ ++ Building would fail with a link error (cp/copy.o) when XATTR headers ++ were installed without the corresponding library. Now, configure ++ detects that and disables xattr support, as one would expect. ++ ++ ++* Noteworthy changes in release 8.3 (2010-01-07) [stable] ++ ++** Bug fixes ++ ++ cp -p, install -p, mv, and touch -c could trigger a spurious error ++ message when using new glibc coupled with an old kernel. ++ [bug introduced in coreutils-6.12]. ++ ++ ls -l --color no longer prints "argetm" in front of dangling ++ symlinks when the 'LINK target' directive was given to dircolors. ++ [bug introduced in fileutils-4.0] ++ ++ pr's page header was improperly formatted for long file names. ++ [bug introduced in coreutils-7.2] ++ ++ rm -r --one-file-system works once again. ++ The rewrite to make rm use fts introduced a regression whereby ++ a commmand of the above form would fail for all subdirectories. ++ [bug introduced in coreutils-8.0] ++ ++ stat -f recognizes more file system types: k-afs, fuseblk, gfs/gfs2, ocfs2, ++ and rpc_pipefs. Also Minix V3 is displayed correctly as minix3, not minux3. ++ [bug introduced in coreutils-8.1] ++ ++ tail -f (inotify-enabled) once again works with remote files. ++ The use of inotify with remote files meant that any changes to those ++ files that was not done from the local system would go unnoticed. ++ [bug introduced in coreutils-7.5] ++ ++ tail -F (inotify-enabled) would abort when a tailed file is repeatedly ++ renamed-aside and then recreated. ++ [bug introduced in coreutils-7.5] ++ ++ tail -F (inotify-enabled) could fail to follow renamed files. ++ E.g., given a "tail -F a b" process, running "mv a b" would ++ make tail stop tracking additions to "b". ++ [bug introduced in coreutils-7.5] ++ ++ touch -a and touch -m could trigger bugs in some file systems, such ++ as xfs or ntfs-3g, and fail to update timestamps. ++ [bug introduced in coreutils-8.1] ++ ++ wc now prints counts atomically so that concurrent ++ processes will not intersperse their output. ++ [the issue dates back to the initial implementation] ++ ++ ++* Noteworthy changes in release 8.2 (2009-12-11) [stable] ++ ++** Bug fixes ++ ++ id's use of mgetgroups no longer writes beyond the end of a malloc'd buffer ++ [bug introduced in coreutils-8.1] ++ ++ id no longer crashes on systems without supplementary group support. ++ [bug introduced in coreutils-8.1] ++ ++ rm once again handles zero-length arguments properly. ++ The rewrite to make rm use fts introduced a regression whereby ++ a command like "rm a '' b" would fail to remove "a" and "b", due to ++ the presence of the empty string argument. ++ [bug introduced in coreutils-8.0] ++ ++ sort is now immune to the signal handling of its parent. ++ Specifically sort now doesn't exit with an error message ++ if it uses helper processes for compression and its parent ++ ignores CHLD signals. [bug introduced in coreutils-6.9] ++ ++ tail without -f no longer accesses uninitialized memory ++ [bug introduced in coreutils-7.6] ++ ++ timeout is now immune to the signal handling of its parent. ++ Specifically timeout now doesn't exit with an error message ++ if its parent ignores CHLD signals. [bug introduced in coreutils-7.6] ++ ++ a user running "make distcheck" in the coreutils source directory, ++ with TMPDIR unset or set to the name of a world-writable directory, ++ and with a malicious user on the same system ++ was vulnerable to arbitrary code execution ++ [bug introduced in coreutils-5.0] ++ ++ ++* Noteworthy changes in release 8.1 (2009-11-18) [stable] ++ ++** Bug fixes ++ ++ chcon no longer exits immediately just because SELinux is disabled. ++ Even then, chcon may still be useful. ++ [bug introduced in coreutils-8.0] ++ ++ chcon, chgrp, chmod, chown and du now diagnose an ostensible directory cycle ++ and arrange to exit nonzero. Before, they would silently ignore the ++ offending directory and all "contents." ++ ++ env -u A=B now fails, rather than silently adding A to the ++ environment. Likewise, printenv A=B silently ignores the invalid ++ name. [the bugs date back to the initial implementation] ++ ++ ls --color now handles files with capabilities correctly. Previously ++ files with capabilities were often not colored, and also sometimes, files ++ without capabilites were colored in error. [bug introduced in coreutils-7.0] ++ ++ md5sum now prints checksums atomically so that concurrent ++ processes will not intersperse their output. ++ This also affected sum, sha1sum, sha224sum, sha384sum and sha512sum. ++ [the bug dates back to the initial implementation] ++ ++ mktemp no longer leaves a temporary file behind if it was unable to ++ output the name of the file to stdout. ++ [the bug dates back to the initial implementation] ++ ++ nice -n -1 PROGRAM now runs PROGRAM even when its internal setpriority ++ call fails with errno == EACCES. ++ [the bug dates back to the initial implementation] ++ ++ nice, nohup, and su now refuse to execute the subsidiary program if ++ they detect write failure in printing an otherwise non-fatal warning ++ message to stderr. ++ ++ stat -f recognizes more file system types: afs, cifs, anon-inode FS, ++ btrfs, cgroupfs, cramfs-wend, debugfs, futexfs, hfs, inotifyfs, minux3, ++ nilfs, securityfs, selinux, xenfs ++ ++ tail -f (inotify-enabled) now avoids a race condition. ++ Before, any data appended in the tiny interval between the initial ++ read-to-EOF and the inotify watch initialization would be ignored ++ initially (until more data was appended), or forever, if the file ++ were first renamed or unlinked or never modified. ++ [The race was introduced in coreutils-7.5] ++ ++ tail -F (inotify-enabled) now consistently tails a file that has been ++ replaced via renaming. That operation provokes either of two sequences ++ of inotify events. The less common sequence is now handled as well. ++ [The bug came with the implementation change in coreutils-7.5] ++ ++ timeout now doesn't exit unless the command it is monitoring does, ++ for any specified signal. [bug introduced in coreutils-7.0]. ++ ++** Changes in behavior ++ ++ chroot, env, nice, and su fail with status 125, rather than 1, on ++ internal error such as failure to parse command line arguments; this ++ is for consistency with stdbuf and timeout, and avoids ambiguity ++ with the invoked command failing with status 1. Likewise, nohup ++ fails with status 125 instead of 127. ++ ++ du (due to a change in gnulib's fts) can now traverse NFSv4 automounted ++ directories in which the stat'd device number of the mount point differs ++ during a traversal. Before, it would fail, because such a mismatch would ++ usually represent a serious error or a subversion attempt. ++ ++ echo and printf now interpret \e as the Escape character (0x1B). ++ ++ rm -f /read-only-fs/nonexistent now succeeds and prints no diagnostic ++ on systems with an unlinkat syscall that sets errno to EROFS in that case. ++ Before, it would fail with a "Read-only file system" diagnostic. ++ Also, "rm /read-only-fs/nonexistent" now reports "file not found" rather ++ than the less precise "Read-only file system" error. ++ ++** New programs ++ ++ nproc: Print the number of processing units available to a process. ++ ++** New features ++ ++ env and printenv now accept the option --null (-0), as a means to ++ avoid ambiguity with newlines embedded in the environment. ++ ++ md5sum --check now also accepts openssl-style checksums. ++ So do sha1sum, sha224sum, sha384sum and sha512sum. ++ ++ mktemp now accepts the option --suffix to provide a known suffix ++ after the substitution in the template. Additionally, uses such as ++ "mktemp fileXXXXXX.txt" are able to infer an appropriate --suffix. ++ ++ touch now accepts the option --no-dereference (-h), as a means to ++ change symlink timestamps on platforms with enough support. ++ ++ ++* Noteworthy changes in release 8.0 (2009-10-06) [beta] ++ ++** Bug fixes ++ ++ cp --preserve=xattr and --archive now preserve extended attributes even ++ when the source file doesn't have write access. ++ [bug introduced in coreutils-7.1] ++ ++ touch -t [[CC]YY]MMDDhhmm[.ss] now accepts a timestamp string ending in .60, ++ to accommodate leap seconds. ++ [the bug dates back to the initial implementation] ++ ++ ls --color now reverts to the color of a base file type consistently ++ when the color of a more specific type is disabled. ++ [bug introduced in coreutils-5.90] ++ ++ ls -LR exits with status 2, not 0, when it encounters a cycle ++ ++ "ls -is" is now consistent with ls -lis in ignoring values returned ++ from a failed stat/lstat. For example ls -Lis now prints "?", not "0", ++ for the inode number and allocated size of a dereferenced dangling symlink. ++ ++ tail --follow --pid now avoids a race condition where data written ++ just before the process dies might not have been output by tail. ++ Also, tail no longer delays at all when the specified pid is not live. ++ [The race was introduced in coreutils-7.5, ++ and the unnecessary delay was present since textutils-1.22o] ++ ++** Portability ++ ++ On Solaris 9, many commands would mistakenly treat file/ the same as ++ file. Now, even on such a system, path resolution obeys the POSIX ++ rules that a trailing slash ensures that the preceding name is a ++ directory or a symlink to a directory. ++ ++** Changes in behavior ++ ++ id no longer prints SELinux " context=..." when the POSIXLY_CORRECT ++ environment variable is set. ++ ++ readlink -f now ignores a trailing slash when deciding if the ++ last component (possibly via a dangling symlink) can be created, ++ since mkdir will succeed in that case. ++ ++** New features ++ ++ ln now accepts the options --logical (-L) and --physical (-P), ++ added by POSIX 2008. The default behavior is -P on systems like ++ GNU/Linux where link(2) creates hard links to symlinks, and -L on ++ BSD systems where link(2) follows symlinks. ++ ++ stat: without -f, a command-line argument of "-" now means standard input. ++ With --file-system (-f), an argument of "-" is now rejected. ++ If you really must operate on a file named "-", specify it as ++ "./-" or use "--" to separate options from arguments. ++ ++** Improvements ++ ++ rm: rewrite to use gnulib's fts ++ This makes rm -rf significantly faster (400-500%) in some pathological ++ cases, and slightly slower (20%) in at least one pathological case. ++ ++ rm -r deletes deep hierarchies more efficiently. Before, execution time ++ was quadratic in the depth of the hierarchy, now it is merely linear. ++ However, this improvement is not as pronounced as might be expected for ++ very deep trees, because prior to this change, for any relative name ++ length longer than 8KiB, rm -r would sacrifice official conformance to ++ avoid the disproportionate quadratic performance penalty. Leading to ++ another improvement: ++ ++ rm -r is now slightly more standards-conformant when operating on ++ write-protected files with relative names longer than 8KiB. ++ ++ ++* Noteworthy changes in release 7.6 (2009-09-11) [stable] ++ ++** Bug fixes ++ ++ cp, mv now ignore failure to preserve a symlink time stamp, when it is ++ due to their running on a kernel older than what was implied by headers ++ and libraries tested at configure time. ++ [bug introduced in coreutils-7.5] ++ ++ cp --reflink --preserve now preserves attributes when cloning a file. ++ [bug introduced in coreutils-7.5] ++ ++ cp --preserve=xattr no longer leaks resources on each preservation failure. ++ [bug introduced in coreutils-7.1] ++ ++ dd now exits with non-zero status when it encounters a write error while ++ printing a summary to stderr. ++ [bug introduced in coreutils-6.11] ++ ++ dd cbs=N conv=unblock would fail to print a final newline when the size ++ of the input was not a multiple of N bytes. ++ [the non-conforming behavior dates back to the initial implementation] ++ ++ df no longer requires that each command-line argument be readable ++ [bug introduced in coreutils-7.3] ++ ++ ls -i now prints consistent inode numbers also for mount points. ++ This makes ls -i DIR less efficient on systems with dysfunctional readdir, ++ because ls must stat every file in order to obtain a guaranteed-valid ++ inode number. [bug introduced in coreutils-6.0] ++ ++ tail -f (inotify-enabled) now flushes any initial output before blocking. ++ Before, this would print nothing and wait: stdbuf -o 4K tail -f /etc/passwd ++ Note that this bug affects tail -f only when its standard output is buffered, ++ which is relatively unusual. ++ [bug introduced in coreutils-7.5] ++ ++ tail -f once again works with standard input. inotify-enabled tail -f ++ would fail when operating on a nameless stdin. I.e., tail -f < /etc/passwd ++ would say "tail: cannot watch `-': No such file or directory", yet the ++ relatively baroque tail -f /dev/stdin < /etc/passwd would work. Now, the ++ offending usage causes tail to revert to its conventional sleep-based ++ (i.e., not inotify-based) implementation. ++ [bug introduced in coreutils-7.5] ++ ++** Portability ++ ++ ln, link: link f z/ would mistakenly succeed on Solaris 10, given an ++ existing file, f, and nothing named "z". ln -T f z/ has the same problem. ++ Each would mistakenly create "z" as a link to "f". Now, even on such a ++ system, each command reports the error, e.g., ++ link: cannot create link `z/' to `f': Not a directory ++ ++** New features ++ ++ cp --reflink accepts a new "auto" parameter which falls back to ++ a standard copy if creating a copy-on-write clone is not possible. ++ ++** Changes in behavior ++ ++ tail -f now ignores "-" when stdin is a pipe or FIFO. ++ tail-with-no-args now ignores -f unconditionally when stdin is a pipe or FIFO. ++ Before, it would ignore -f only when no file argument was specified, ++ and then only when POSIXLY_CORRECT was set. Now, :|tail -f - terminates ++ immediately. Before, it would block indefinitely. ++ ++ ++* Noteworthy changes in release 7.5 (2009-08-20) [stable] ++ ++** Bug fixes ++ ++ dd's oflag=direct option now works even when the size of the input ++ is not a multiple of e.g., 512 bytes. ++ ++ dd now handles signals consistently even when they're received ++ before data copying has started. ++ ++ install runs faster again with SELinux enabled ++ [introduced in coreutils-7.0] ++ ++ ls -1U (with two or more arguments, at least one a nonempty directory) ++ would print entry names *before* the name of the containing directory. ++ Also fixed incorrect output of ls -1RU and ls -1sU. ++ [introduced in coreutils-7.0] ++ ++ sort now correctly ignores fields whose ending position is specified ++ before the start position. Previously in numeric mode the remaining ++ part of the line after the start position was used as the sort key. ++ [This bug appears to have been present in "the beginning".] ++ ++ truncate -s failed to skip all whitespace in the option argument in ++ some locales. ++ ++** New programs ++ ++ stdbuf: A new program to run a command with modified stdio buffering ++ for its standard streams. ++ ++** Changes in behavior ++ ++ ls --color: files with multiple hard links are no longer colored differently ++ by default. That can be enabled by changing the LS_COLORS environment ++ variable. You can control that using the MULTIHARDLINK dircolors input ++ variable which corresponds to the 'mh' LS_COLORS item. Note these variables ++ were renamed from 'HARDLINK' and 'hl' which were available since ++ coreutils-7.1 when this feature was introduced. ++ ++** Deprecated options ++ ++ nl --page-increment: deprecated in favor of --line-increment, the new option ++ maintains the previous semantics and the same short option, -i. ++ ++** New features ++ ++ chroot now accepts the options --userspec and --groups. ++ ++ cp accepts a new option, --reflink: create a lightweight copy ++ using copy-on-write (COW). This is currently only supported within ++ a btrfs file system. ++ ++ cp now preserves time stamps on symbolic links, when possible ++ ++ sort accepts a new option, --human-numeric-sort (-h): sort numbers ++ while honoring human readable suffixes like KiB and MB etc. ++ ++ tail --follow now uses inotify when possible, to be more responsive ++ to file changes and more efficient when monitoring many files. ++ ++ ++* Noteworthy changes in release 7.4 (2009-05-07) [stable] ++ ++** Bug fixes ++ ++ date -d 'next mon', when run on a Monday, now prints the date ++ 7 days in the future rather than the current day. Same for any other ++ day-of-the-week name, when run on that same day of the week. ++ [This bug appears to have been present in "the beginning". ] ++ ++ date -d tuesday, when run on a Tuesday -- using date built from the 7.3 ++ release tarball, not from git -- would print the date 7 days in the future. ++ Now, it works properly and prints the current date. That was due to ++ human error (including not-committed changes in a release tarball) ++ and the fact that there is no check to detect when the gnulib/ git ++ submodule is dirty. ++ ++** Build-related ++ ++ make check: two tests have been corrected ++ ++** Portability ++ ++ There have been some ACL-related portability fixes for *BSD, ++ inherited from gnulib. ++ ++ ++* Noteworthy changes in release 7.3 (2009-05-01) [stable] ++ ++** Bug fixes ++ ++ cp now diagnoses failure to preserve selinux/xattr attributes when ++ --preserve=context,xattr is specified in combination with -a. ++ Also, cp no longer suppresses attribute-preservation diagnostics ++ when preserving SELinux context was explicitly requested. ++ ++ ls now aligns output correctly in the presence of abbreviated month ++ names from the locale database that have differing widths. ++ ++ ls -v and sort -V now order names like "#.b#" properly ++ ++ mv: do not print diagnostics when failing to preserve xattr's on file ++ systems without xattr support. ++ ++ sort -m no longer segfaults when its output file is also an input file. ++ E.g., with this, touch 1; sort -m -o 1 1, sort would segfault. ++ [introduced in coreutils-7.2] ++ ++** Changes in behavior ++ ++ shred, sort, shuf: now use an internal pseudorandom generator by default. ++ This is mainly noticeable in shred where the 3 random passes it does by ++ default should proceed at the speed of the disk. Previously /dev/urandom ++ was used if available, which is relatively slow on GNU/Linux systems. ++ ++** Improved robustness ++ ++ cp would exit successfully after copying less than the full contents ++ of a file larger than ~4000 bytes from a linux-/proc file system to a ++ destination file system with a fundamental block size of 4KiB or greater. ++ Reading into a 4KiB-or-larger buffer, cp's "read" syscall would return ++ a value smaller than 4096, and cp would interpret that as EOF (POSIX ++ allows this). This optimization, now removed, saved 50% of cp's read ++ syscalls when copying small files. Affected linux kernels: at least ++ 2.6.9 through 2.6.29. ++ [the optimization was introduced in coreutils-6.0] ++ ++** Portability ++ ++ df now pre-mounts automountable directories even with automounters for ++ which stat-like syscalls no longer provoke mounting. Now, df uses open. ++ ++ 'id -G $USER' now works correctly even on Darwin and NetBSD. Previously it ++ would either truncate the group list to 10, or go into an infinite loop, ++ due to their non-standard getgrouplist implementations. ++ [truncation introduced in coreutils-6.11] ++ [infinite loop introduced in coreutils-7.1] ++ ++ ++* Noteworthy changes in release 7.2 (2009-03-31) [stable] ++ ++** New features ++ ++ pwd now accepts the options --logical (-L) and --physical (-P). For ++ compatibility with existing scripts, -P is the default behavior ++ unless POSIXLY_CORRECT is requested. ++ ++** Bug fixes ++ ++ cat once again immediately outputs data it has processed. ++ Previously it would have been buffered and only output if enough ++ data was read, or on process exit. ++ [bug introduced in coreutils-6.0] ++ ++ comm's new --check-order option would fail to detect disorder on any pair ++ of lines where one was a prefix of the other. For example, this would ++ fail to report the disorder: printf 'Xb\nX\n'>k; comm --check-order k k ++ [bug introduced in coreutils-7.0] ++ ++ cp once again diagnoses the invalid "cp -rl dir dir" right away, ++ rather than after creating a very deep dir/dir/dir/... hierarchy. ++ The bug strikes only with both --recursive (-r, -R) and --link (-l). ++ [bug introduced in coreutils-7.1] ++ ++ ls --sort=version (-v) sorted names beginning with "." inconsistently. ++ Now, names that start with "." are always listed before those that don't. ++ ++ pr: fix the bug whereby --indent=N (-o) did not indent header lines ++ [bug introduced in coreutils-6.9.90] ++ ++ sort now handles specified key ends correctly. ++ Previously -k1,1b would have caused leading space from field 2 to be ++ included in the sort while -k2,3.0 would have not included field 3. ++ ++** Changes in behavior ++ ++ cat,cp,install,mv,split: these programs now read and write a minimum ++ of 32KiB at a time. This was seen to double throughput when reading ++ cached files on GNU/Linux-based systems. ++ ++ cp -a now tries to preserve extended attributes (xattr), but does not ++ diagnose xattr-preservation failure. However, cp --preserve=all still does. ++ ++ ls --color: hard link highlighting can be now disabled by changing the ++ LS_COLORS environment variable. To disable it you can add something like ++ this to your profile: eval `dircolors | sed s/hl=[^:]*:/hl=:/` ++ ++ ++* Noteworthy changes in release 7.1 (2009-02-21) [stable] ++ ++** New features ++ ++ Add extended attribute support available on certain filesystems like ext2 ++ and XFS. ++ cp: Tries to copy xattrs when --preserve=xattr or --preserve=all specified ++ mv: Always tries to copy xattrs ++ install: Never copies xattrs ++ ++ cp and mv accept a new option, --no-clobber (-n): silently refrain ++ from overwriting any existing destination file ++ ++ dd accepts iflag=cio and oflag=cio to open the file in CIO (concurrent I/O) ++ mode where this feature is available. ++ ++ install accepts a new option, --compare (-C): compare each pair of source ++ and destination files, and if the destination has identical content and ++ any specified owner, group, permissions, and possibly SELinux context, then ++ do not modify the destination at all. ++ ++ ls --color now highlights hard linked files, too ++ ++ stat -f recognizes the Lustre file system type ++ ++** Bug fixes ++ ++ chgrp, chmod, chown --silent (--quiet, -f) no longer print some diagnostics ++ [bug introduced in coreutils-5.1] ++ ++ cp uses much less memory in some situations ++ ++ cp -a now correctly tries to preserve SELinux context (announced in 6.9.90), ++ doesn't inform about failure, unlike with --preserve=all ++ ++ du --files0-from=FILE no longer reads all of FILE into RAM before ++ processing the first file name ++ ++ seq 9223372036854775807 9223372036854775808 now prints only two numbers ++ on systems with extended long double support and good library support. ++ Even with this patch, on some systems, it still produces invalid output, ++ from 3 to at least 1026 lines long. [bug introduced in coreutils-6.11] ++ ++ seq -w now accounts for a decimal point added to the last number ++ to correctly print all numbers to the same width. ++ ++ wc --files0-from=FILE no longer reads all of FILE into RAM, before ++ processing the first file name, unless the list of names is known ++ to be small enough. ++ ++** Changes in behavior ++ ++ cp and mv: the --reply={yes,no,query} option has been removed. ++ Using it has elicited a warning for the last three years. ++ ++ dd: user specified offsets that are too big are handled better. ++ Previously, erroneous parameters to skip and seek could result ++ in redundant reading of the file with no warnings or errors. ++ ++ du: -H (initially equivalent to --si) is now equivalent to ++ --dereference-args, and thus works as POSIX requires ++ ++ shred: now does 3 overwrite passes by default rather than 25. ++ ++ ls -l now marks SELinux-only files with the less obtrusive '.', ++ rather than '+'. A file with any other combination of MAC and ACL ++ is still marked with a '+'. ++ ++ ++* Noteworthy changes in release 7.0 (2008-10-05) [beta] ++ ++** New programs ++ ++ timeout: Run a command with bounded time. ++ truncate: Set the size of a file to a specified size. ++ ++** New features ++ ++ chgrp, chmod, chown, chcon, du, rm: now all display linear performance, ++ even when operating on million-entry directories on ext3 and ext4 file ++ systems. Before, they would exhibit O(N^2) performance, due to linear ++ per-entry seek time cost when operating on entries in readdir order. ++ Rm was improved directly, while the others inherit the improvement ++ from the newer version of fts in gnulib. ++ ++ comm now verifies that the inputs are in sorted order. This check can ++ be turned off with the --nocheck-order option. ++ ++ comm accepts new option, --output-delimiter=STR, that allows specification ++ of an output delimiter other than the default single TAB. ++ ++ cp and mv: the deprecated --reply=X option is now also undocumented. ++ ++ dd accepts iflag=fullblock to make it accumulate full input blocks. ++ With this new option, after a short read, dd repeatedly calls read, ++ until it fills the incomplete block, reaches EOF, or encounters an error. ++ ++ df accepts a new option --total, which produces a grand total of all ++ arguments after all arguments have been processed. ++ ++ If the GNU MP library is available at configure time, factor and ++ expr support arbitrarily large numbers. Pollard's rho algorithm is ++ used to factor large numbers. ++ ++ install accepts a new option --strip-program to specify the program used to ++ strip binaries. ++ ++ ls now colorizes files with capabilities if libcap is available ++ ++ ls -v now uses filevercmp function as sort predicate (instead of strverscmp) ++ ++ md5sum now accepts the new option, --quiet, to suppress the printing of ++ 'OK' messages. sha1sum, sha224sum, sha384sum, and sha512sum accept it, too. ++ ++ sort accepts a new option, --files0-from=F, that specifies a file ++ containing a null-separated list of files to sort. This list is used ++ instead of filenames passed on the command-line to avoid problems with ++ maximum command-line (argv) length. ++ ++ sort accepts a new option --batch-size=NMERGE, where NMERGE ++ represents the maximum number of inputs that will be merged at once. ++ When processing more than NMERGE inputs, sort uses temporary files. ++ ++ sort accepts a new option --version-sort (-V, --sort=version), ++ specifying that ordering is to be based on filevercmp. ++ ++** Bug fixes ++ ++ chcon --verbose now prints a newline after each message ++ ++ od no longer suffers from platform bugs in printf(3). This is ++ probably most noticeable when using 'od -tfL' to print long doubles. ++ ++ seq -0.1 0.1 2 now prints 2,0 when locale's decimal point is ",". ++ Before, it would mistakenly omit the final number in that example. ++ ++ shuf honors the --zero-terminated (-z) option, even with --input-range=LO-HI ++ ++ shuf --head-count is now correctly documented. The documentation ++ previously claimed it was called --head-lines. ++ ++** Improvements ++ ++ Improved support for access control lists (ACLs): On MacOS X, Solaris 7..10, ++ HP-UX 11, Tru64, AIX, IRIX 6.5, and Cygwin, "ls -l" now displays the presence ++ of an ACL on a file via a '+' sign after the mode, and "cp -p" copies ACLs. ++ ++ join has significantly better performance due to better memory management ++ ++ ls now uses constant memory when not sorting and using one_per_line format, ++ no matter how many files are in a given directory. I.e., to list a directory ++ with very many files, ls -1U is much more efficient. ++ ++ od now aligns fields across lines when printing multiple -t ++ specifiers, and no longer prints fields that resulted entirely from ++ padding the input out to the least common multiple width. ++ ++** Changes in behavior ++ ++ stat's --context (-Z) option has always been a no-op. ++ Now it evokes a warning that it is obsolete and will be removed. ++ ++ ++* Noteworthy changes in release 6.12 (2008-05-31) [stable] ++ ++** New features ++ ++ cp, install, mv, and touch now preserve nanosecond resolution on ++ file timestamps, on platforms that have the 'utimensat' and ++ 'futimens' system calls. ++ ++** Bug fixes ++ ++ chcon, runcon: --help output now includes the bug-reporting address ++ ++ cp -p copies permissions more portably. For example, on MacOS X 10.5, ++ "cp -p some-fifo some-file" no longer fails while trying to copy the ++ permissions from the some-fifo argument. ++ ++ id with no options now prints the SELinux context only when invoked ++ with no USERNAME argument. ++ ++ id and groups once again print the AFS-specific nameless group-ID (PAG). ++ Printing of such large-numbered, kernel-only (not in /etc/group) group-IDs ++ was suppressed in 6.11 due to ignorance that they are useful. ++ ++ uniq: avoid subtle field-skipping malfunction due to isblank misuse. ++ In some locales on some systems, isblank(240) (aka  ) is nonzero. ++ On such systems, uniq --skip-fields=N would fail to skip the proper ++ number of fields for some inputs. ++ ++ tac: avoid segfault with --regex (-r) and multiple files, e.g., ++ "echo > x; tac -r x x". [bug present at least in textutils-1.8b, from 1992] ++ ++** Changes in behavior ++ ++ install once again sets SELinux context, when possible ++ [it was deliberately disabled in 6.9.90] ++ ++ ++* Noteworthy changes in release 6.11 (2008-04-19) [stable] ++ ++** Bug fixes ++ ++ configure --enable-no-install-program=groups now works. ++ ++ "cp -fR fifo E" now succeeds with an existing E. Before this fix, using ++ -fR to copy a fifo or "special" file onto an existing file would fail ++ with EEXIST. Now, it once again unlinks the destination before trying ++ to create the destination file. [bug introduced in coreutils-5.90] ++ ++ dd once again works with unnecessary options like if=/dev/stdin and ++ of=/dev/stdout. [bug introduced in fileutils-4.0h] ++ ++ id now uses getgrouplist, when possible. This results in ++ much better performance when there are many users and/or groups. ++ ++ ls no longer segfaults on files in /proc when linked with an older version ++ of libselinux. E.g., ls -l /proc/sys would dereference a NULL pointer. ++ ++ md5sum would segfault for invalid BSD-style input, e.g., ++ echo 'MD5 (' | md5sum -c - Now, md5sum ignores that line. ++ sha1sum, sha224sum, sha384sum, and sha512sum are affected, too. ++ [bug introduced in coreutils-5.1.0] ++ ++ md5sum -c would accept a NUL-containing checksum string like "abcd\0..." ++ and would unnecessarily read and compute the checksum of the named file, ++ and then compare that checksum to the invalid one: guaranteed to fail. ++ Now, it recognizes that the line is not valid and skips it. ++ sha1sum, sha224sum, sha384sum, and sha512sum are affected, too. ++ [bug present in the original version, in coreutils-4.5.1, 1995] ++ ++ "mkdir -Z x dir" no longer segfaults when diagnosing invalid context "x" ++ mkfifo and mknod would fail similarly. Now they're fixed. ++ ++ mv would mistakenly unlink a destination file before calling rename, ++ when the destination had two or more hard links. It no longer does that. ++ [bug introduced in coreutils-5.3.0] ++ ++ "paste -d'\' file" no longer overruns memory (heap since coreutils-5.1.2, ++ stack before then) [bug present in the original version, in 1992] ++ ++ "pr -e" with a mix of backspaces and TABs no longer corrupts the heap ++ [bug present in the original version, in 1992] ++ ++ "ptx -F'\' long-file-name" would overrun a malloc'd buffer and corrupt ++ the heap. That was triggered by a lone backslash (or odd number of them) ++ at the end of the option argument to --flag-truncation=STRING (-F), ++ --word-regexp=REGEXP (-W), or --sentence-regexp=REGEXP (-S). ++ ++ "rm -r DIR" would mistakenly declare to be "write protected" -- and ++ prompt about -- full DIR-relative names longer than MIN (PATH_MAX, 8192). ++ ++ "rmdir --ignore-fail-on-non-empty" detects and ignores the failure ++ in more cases when a directory is empty. ++ ++ "seq -f % 1" would issue the erroneous diagnostic "seq: memory exhausted" ++ rather than reporting the invalid string format. ++ [bug introduced in coreutils-6.0] ++ ++** New features ++ ++ join now verifies that the inputs are in sorted order. This check can ++ be turned off with the --nocheck-order option. ++ ++ sort accepts the new option --sort=WORD, where WORD can be one of ++ general-numeric, month, numeric or random. These are equivalent to the ++ options --general-numeric-sort/-g, --month-sort/-M, --numeric-sort/-n ++ and --random-sort/-R, resp. ++ ++** Improvements ++ ++ id and groups work around an AFS-related bug whereby those programs ++ would print an invalid group number, when given no user-name argument. ++ ++ ls --color no longer outputs unnecessary escape sequences ++ ++ seq gives better diagnostics for invalid formats. ++ ++** Portability ++ ++ rm now works properly even on systems like BeOS and Haiku, ++ which have negative errno values. ++ ++** Consistency ++ ++ install, mkdir, rmdir and split now write --verbose output to stdout, ++ not to stderr. ++ ++ ++* Noteworthy changes in release 6.10 (2008-01-22) [stable] ++ ++** Bug fixes ++ ++ Fix a non-portable use of sed in configure.ac. ++ [bug introduced in coreutils-6.9.92] ++ ++ ++* Noteworthy changes in release 6.9.92 (2008-01-12) [beta] ++ ++** Bug fixes ++ ++ cp --parents no longer uses uninitialized memory when restoring the ++ permissions of a just-created destination directory. ++ [bug introduced in coreutils-6.9.90] ++ ++ tr's case conversion would fail in a locale with differing numbers ++ of lower case and upper case characters. E.g., this would fail: ++ env LC_CTYPE=en_US.ISO-8859-1 tr '[:upper:]' '[:lower:]' ++ [bug introduced in coreutils-6.9.90] ++ ++** Improvements ++ ++ "touch -d now writable-but-owned-by-someone-else" now succeeds ++ whenever that same command would succeed without "-d now". ++ Before, it would work fine with no -d option, yet it would ++ fail with the ostensibly-equivalent "-d now". ++ ++ ++* Noteworthy changes in release 6.9.91 (2007-12-15) [beta] ++ ++** Bug fixes ++ ++ "ls -l" would not output "+" on SELinux hosts unless -Z was also given. ++ ++ "rm" would fail to unlink a non-directory when run in an environment ++ in which the user running rm is capable of unlinking a directory. ++ [bug introduced in coreutils-6.9] ++ ++ ++* Noteworthy changes in release 6.9.90 (2007-12-01) [beta] ++ ++** New programs ++ ++ arch: equivalent to uname -m, not installed by default ++ But don't install this program on Solaris systems. ++ ++ chcon: change the SELinux security context of a file ++ ++ mktemp: create a temporary file or directory (or names) ++ ++ runcon: run a program in a different SELinux security context ++ ++** Programs no longer installed by default ++ ++ hostname, su ++ ++** Changes in behavior ++ ++ cp, by default, refuses to copy through a dangling destination symlink ++ Set POSIXLY_CORRECT if you require the old, risk-prone behavior. ++ ++ pr -F no longer suppresses the footer or the first two blank lines in ++ the header. This is for compatibility with BSD and POSIX. ++ ++ tr now warns about an unescaped backslash at end of string. ++ The tr from coreutils-5.2.1 and earlier would fail for such usage, ++ and Solaris' tr ignores that final byte. ++ ++** New features ++ ++ Add SELinux support, based on the patch from Fedora: ++ * cp accepts new --preserve=context option. ++ * "cp -a" works with SELinux: ++ Now, cp -a attempts to preserve context, but failure to do so does ++ not change cp's exit status. However "cp --preserve=context" is ++ similar, but failure *does* cause cp to exit with nonzero status. ++ * install accepts new "-Z, --context=C" option. ++ * id accepts new "-Z" option. ++ * stat honors the new %C format directive: SELinux security context string ++ * ls accepts a slightly modified -Z option. ++ * ls: contrary to Fedora version, does not accept --lcontext and --scontext ++ ++ The following commands and options now support the standard size ++ suffixes kB, M, MB, G, GB, and so on for T, P, Y, Z, and Y: ++ head -c, head -n, od -j, od -N, od -S, split -b, split -C, ++ tail -c, tail -n. ++ ++ cp -p tries to preserve the GID of a file even if preserving the UID ++ is not possible. ++ ++ uniq accepts a new option: --zero-terminated (-z). As with the sort ++ option of the same name, this makes uniq consume and produce ++ NUL-terminated lines rather than newline-terminated lines. ++ ++ wc no longer warns about character decoding errors in multibyte locales. ++ This means for example that "wc /bin/sh" now produces normal output ++ (though the word count will have no real meaning) rather than many ++ error messages. ++ ++** New build options ++ ++ By default, "make install" no longer attempts to install (or even build) su. ++ To change that, use ./configure --enable-install-program=su. ++ If you also want to install the new "arch" program, do this: ++ ./configure --enable-install-program=arch,su. ++ ++ You can inhibit the compilation and installation of selected programs ++ at configure time. For example, to avoid installing "hostname" and ++ "uptime", use ./configure --enable-no-install-program=hostname,uptime ++ Note: currently, "make check" passes, even when arch and su are not ++ built (that's the new default). However, if you inhibit the building ++ and installation of other programs, don't be surprised if some parts ++ of "make check" fail. ++ ++** Remove deprecated options ++ ++ df no longer accepts the --kilobytes option. ++ du no longer accepts the --kilobytes or --megabytes options. ++ ls no longer accepts the --kilobytes option. ++ ptx longer accepts the --copyright option. ++ who no longer accepts -i or --idle. ++ ++** Improved robustness ++ ++ ln -f can no longer silently clobber a just-created hard link. ++ In some cases, ln could be seen as being responsible for data loss. ++ For example, given directories a, b, c, and files a/f and b/f, we ++ should be able to do this safely: ln -f a/f b/f c && rm -f a/f b/f ++ However, before this change, ln would succeed, and thus cause the ++ loss of the contents of a/f. ++ ++ stty no longer silently accepts certain invalid hex values ++ in its 35-colon command-line argument ++ ++** Bug fixes ++ ++ chmod no longer ignores a dangling symlink. Now, chmod fails ++ with a diagnostic saying that it cannot operate on such a file. ++ [bug introduced in coreutils-5.1.0] ++ ++ cp attempts to read a regular file, even if stat says it is empty. ++ Before, "cp /proc/cpuinfo c" would create an empty file when the kernel ++ reports stat.st_size == 0, while "cat /proc/cpuinfo > c" would "work", ++ and create a nonempty one. [bug introduced in coreutils-6.0] ++ ++ cp --parents no longer mishandles symlinks to directories in file ++ name components in the source, e.g., "cp --parents symlink/a/b d" ++ no longer fails. Also, 'cp' no longer considers a destination ++ symlink to be the same as the referenced file when copying links ++ or making backups. For example, if SYM is a symlink to FILE, ++ "cp -l FILE SYM" now reports an error instead of silently doing ++ nothing. The behavior of 'cp' is now better documented when the ++ destination is a symlink. ++ ++ "cp -i --update older newer" no longer prompts; same for mv ++ ++ "cp -i" now detects read errors on standard input, and no longer consumes ++ too much seekable input; same for ln, install, mv, and rm. ++ ++ cut now diagnoses a range starting with zero (e.g., -f 0-2) as invalid; ++ before, it would treat it as if it started with 1 (-f 1-2). ++ ++ "cut -f 2-0" now fails; before, it was equivalent to "cut -f 2-" ++ ++ cut now diagnoses the '-' in "cut -f -" as an invalid range, rather ++ than interpreting it as the unlimited range, "1-". ++ ++ date -d now accepts strings of the form e.g., 'YYYYMMDD +N days', ++ in addition to the usual 'YYYYMMDD N days'. ++ ++ du -s now includes the size of any stat'able-but-inaccessible directory ++ in the total size. ++ ++ du (without -s) prints whatever it knows of the size of an inaccessible ++ directory. Before, du would print nothing for such a directory. ++ ++ ls -x DIR would sometimes output the wrong string in place of the ++ first entry. [introduced in coreutils-6.8] ++ ++ ls --color would mistakenly color a dangling symlink as if it were ++ a regular symlink. This would happen only when the dangling symlink ++ was not a command-line argument and in a directory with d_type support. ++ [introduced in coreutils-6.0] ++ ++ ls --color, (with a custom LS_COLORS envvar value including the ++ ln=target attribute) would mistakenly output the string "target" ++ before the name of each symlink. [introduced in coreutils-6.0] ++ ++ od's --skip (-j) option now works even when the kernel says that a ++ nonempty regular file has stat.st_size = 0. This happens at least ++ with files in /proc and linux-2.6.22. ++ ++ "od -j L FILE" had a bug: when the number of bytes to skip, L, is exactly ++ the same as the length of FILE, od would skip *no* bytes. When the number ++ of bytes to skip is exactly the sum of the lengths of the first N files, ++ od would skip only the first N-1 files. [introduced in textutils-2.0.9] ++ ++ ./printf %.10000000f 1 could get an internal ENOMEM error and generate ++ no output, yet erroneously exit with status 0. Now it diagnoses the error ++ and exits with nonzero status. [present in initial implementation] ++ ++ seq no longer mishandles obvious cases like "seq 0 0.000001 0.000003", ++ so workarounds like "seq 0 0.000001 0.0000031" are no longer needed. ++ ++ seq would mistakenly reject some valid format strings containing %%, ++ and would mistakenly accept some invalid ones. e.g., %g%% and %%g, resp. ++ ++ "seq .1 .1" would mistakenly generate no output on some systems ++ ++ Obsolete sort usage with an invalid ordering-option character, e.g., ++ "env _POSIX2_VERSION=199209 sort +1x" no longer makes sort free an ++ invalid pointer [introduced in coreutils-6.5] ++ ++ sorting very long lines (relative to the amount of available memory) ++ no longer provokes unaligned memory access ++ ++ split --line-bytes=N (-C N) no longer creates an empty file ++ [this bug is present at least as far back as textutils-1.22 (Jan, 1997)] ++ ++ tr -c no longer aborts when translating with Set2 larger than the ++ complement of Set1. [present in the original version, in 1992] ++ ++ tr no longer rejects an unmatched [:lower:] or [:upper:] in SET1. ++ [present in the original version] ++ ++ ++* Noteworthy changes in release 6.9 (2007-03-22) [stable] ++ ++** Bug fixes ++ ++ cp -x (--one-file-system) would fail to set mount point permissions ++ ++ The default block size and output format for df -P are now unaffected by ++ the DF_BLOCK_SIZE, BLOCK_SIZE, and BLOCKSIZE environment variables. It ++ is still affected by POSIXLY_CORRECT, though. ++ ++ Using pr -m -s (i.e. merging files, with TAB as the output separator) ++ no longer inserts extraneous spaces between output columns. ++ ++* Noteworthy changes in release 6.8 (2007-02-24) [not-unstable] ++ ++** Bug fixes ++ ++ chgrp, chmod, and chown now honor the --preserve-root option. ++ Before, they would warn, yet continuing traversing and operating on /. ++ ++ chmod no longer fails in an environment (e.g., a chroot) with openat ++ support but with insufficient /proc support. ++ ++ "cp --parents F/G D" no longer creates a directory D/F when F is not ++ a directory (and F/G is therefore invalid). ++ ++ "cp --preserve=mode" would create directories that briefly had ++ too-generous permissions in some cases. For example, when copying a ++ directory with permissions 777 the destination directory might ++ temporarily be setgid on some file systems, which would allow other ++ users to create subfiles with the same group as the directory. Fix ++ similar problems with 'install' and 'mv'. ++ ++ cut no longer dumps core for usage like "cut -f2- f1 f2" with two or ++ more file arguments. This was due to a double-free bug, introduced ++ in coreutils-5.3.0. ++ ++ dd bs= operands now silently override any later ibs= and obs= ++ operands, as POSIX and tradition require. ++ ++ "ls -FRL" always follows symbolic links on Linux. Introduced in ++ coreutils-6.0. ++ ++ A cross-partition "mv /etc/passwd ~" (by non-root) now prints ++ a reasonable diagnostic. Before, it would print this: ++ "mv: cannot remove `/etc/passwd': Not a directory". ++ ++ pwd and "readlink -e ." no longer fail unnecessarily when a parent ++ directory is unreadable. ++ ++ rm (without -f) could prompt when it shouldn't, or fail to prompt ++ when it should, when operating on a full name longer than 511 bytes ++ and getting an ENOMEM error while trying to form the long name. ++ ++ rm could mistakenly traverse into the wrong directory under unusual ++ conditions: when a full name longer than 511 bytes specifies a search-only ++ directory, and when forming that name fails with ENOMEM, rm would attempt ++ to open a truncated-to-511-byte name with the first five bytes replaced ++ with "[...]". If such a directory were to actually exist, rm would attempt ++ to remove it. ++ ++ "rm -rf /etc/passwd" (run by non-root) now prints a diagnostic. ++ Before it would print nothing. ++ ++ "rm --interactive=never F" no longer prompts for an unwritable F ++ ++ "rm -rf D" would emit a misleading diagnostic when failing to ++ remove a symbolic link within the unwritable directory, D. ++ Introduced in coreutils-6.0. Similarly, when a cross-partition ++ "mv" fails because the source directory is unwritable, it now gives ++ a reasonable diagnostic. Before, this would print ++ $ mkdir /tmp/x; touch /tmp/x/y; chmod -w /tmp/x; ++ $ test $(stat -c %d /tmp/x) -ne $(stat -c %d .) && mv /tmp/x/y . ++ mv: cannot remove `/tmp/x/y': Not a directory ++ Now it prints this: ++ mv: cannot remove `/tmp/x/y': Permission denied. ++ ++** New features ++ ++ sort's new --compress-program=PROG option specifies a compression ++ program to use when writing and reading temporary files. ++ This can help save both time and disk space when sorting large inputs. ++ ++ sort accepts the new option -C, which acts like -c except no diagnostic ++ is printed. Its --check option now accepts an optional argument, and ++ --check=quiet and --check=silent are now aliases for -C, while ++ --check=diagnose-first is an alias for -c or plain --check. ++ ++ ++* Noteworthy changes in release 6.7 (2006-12-08) [stable] ++ ++** Bug fixes ++ ++ When cp -p copied a file with special mode bits set, the same bits ++ were set on the copy even when ownership could not be preserved. ++ This could result in files that were setuid to the wrong user. ++ To fix this, special mode bits are now set in the copy only if its ++ ownership is successfully preserved. Similar problems were fixed ++ with mv when copying across file system boundaries. This problem ++ affects all versions of coreutils through 6.6. ++ ++ cp --preserve=ownership would create output files that temporarily ++ had too-generous permissions in some cases. For example, when ++ copying a file with group A and mode 644 into a group-B sticky ++ directory, the output file was briefly readable by group B. ++ Fix similar problems with cp options like -p that imply ++ --preserve=ownership, with install -d when combined with either -o ++ or -g, and with mv when copying across file system boundaries. ++ This bug affects all versions of coreutils through 6.6. ++ ++ du --one-file-system (-x) would skip subdirectories of any directory ++ listed as second or subsequent command line argument. This bug affects ++ coreutils-6.4, 6.5 and 6.6. ++ ++ ++* Noteworthy changes in release 6.6 (2006-11-22) [stable] ++ ++** Bug fixes ++ ++ ls would segfault (dereference a NULL pointer) for a file with a ++ nameless group or owner. This bug was introduced in coreutils-6.5. ++ ++ A bug in the latest official m4/gettext.m4 (from gettext-0.15) ++ made configure fail to detect gettext support, due to the unusual ++ way in which coreutils uses AM_GNU_GETTEXT. ++ ++** Improved robustness ++ ++ Now, du (and the other fts clients: chmod, chgrp, chown) honor a ++ trailing slash in the name of a symlink-to-directory even on ++ Solaris 9, by working around its buggy fstatat implementation. ++ ++ ++* Major changes in release 6.5 (2006-11-19) [stable] ++ ++** Bug fixes ++ ++ du (and the other fts clients: chmod, chgrp, chown) would exit early ++ when encountering an inaccessible directory on a system with native ++ openat support (i.e., linux-2.6.16 or newer along with glibc-2.4 ++ or newer). This bug was introduced with the switch to gnulib's ++ openat-based variant of fts, for coreutils-6.0. ++ ++ "ln --backup f f" now produces a sensible diagnostic ++ ++** New features ++ ++ rm accepts a new option: --one-file-system ++ ++ ++* Major changes in release 6.4 (2006-10-22) [stable] ++ ++** Bug fixes ++ ++ chgrp and chown would malfunction when invoked with both -R and -H and ++ with one or more of the following: --preserve-root, --verbose, --changes, ++ --from=o:g (chown only). This bug was introduced with the switch to ++ gnulib's openat-based variant of fts, for coreutils-6.0. ++ ++ cp --backup dir1 dir2, would rename an existing dir2/dir1 to dir2/dir1~. ++ This bug was introduced in coreutils-6.0. ++ ++ With --force (-f), rm no longer fails for ENOTDIR. ++ For example, "rm -f existing-non-directory/anything" now exits ++ successfully, ignoring the error about a nonexistent file. ++ ++ ++* Major changes in release 6.3 (2006-09-30) [stable] ++ ++** Improved robustness ++ ++ pinky no longer segfaults on Darwin 7.9.0 (MacOS X 10.3.9) due to a ++ buggy native getaddrinfo function. ++ ++ rm works around a bug in Darwin 7.9.0 (MacOS X 10.3.9) that would ++ sometimes keep it from removing all entries in a directory on an HFS+ ++ or NFS-mounted partition. ++ ++ sort would fail to handle very large input (around 40GB) on systems with a ++ mkstemp function that returns a file descriptor limited to 32-bit offsets. ++ ++** Bug fixes ++ ++ chmod would fail unnecessarily in an unusual case: when an initially- ++ inaccessible argument is rendered accessible by chmod's action on a ++ preceding command line argument. This bug also affects chgrp, but ++ it is harder to demonstrate. It does not affect chown. The bug was ++ introduced with the switch from explicit recursion to the use of fts ++ in coreutils-5.1.0 (2003-10-15). ++ ++ cp -i and mv -i occasionally neglected to prompt when the copy or move ++ action was bound to fail. This bug dates back to before fileutils-4.0. ++ ++ With --verbose (-v), cp and mv would sometimes generate no output, ++ or neglect to report file removal. ++ ++ For the "groups" command: ++ ++ "groups" no longer prefixes the output with "user :" unless more ++ than one user is specified; this is for compatibility with BSD. ++ ++ "groups user" now exits nonzero when it gets a write error. ++ ++ "groups" now processes options like --help more compatibly. ++ ++ shuf would infloop, given 8KB or more of piped input ++ ++** Portability ++ ++ Versions of chmod, chown, chgrp, du, and rm (tools that use openat etc.) ++ compiled for Solaris 8 now also work when run on Solaris 10. ++ ++ ++* Major changes in release 6.2 (2006-09-18) [stable candidate] ++ ++** Changes in behavior ++ ++ mkdir -p and install -d (or -D) now use a method that forks a child ++ process if the working directory is unreadable and a later argument ++ uses a relative file name. This avoids some race conditions, but it ++ means you may need to kill two processes to stop these programs. ++ ++ rm now rejects attempts to remove the root directory, e.g., 'rm -fr /' ++ now fails without removing anything. Likewise for any file name with ++ a final './' or '../' component. ++ ++ tail now ignores the -f option if POSIXLY_CORRECT is set, no file ++ operand is given, and standard input is any FIFO; formerly it did ++ this only for pipes. ++ ++** Infrastructure changes ++ ++ Coreutils now uses gnulib via the gnulib-tool script. ++ If you check the source out from CVS, then follow the instructions ++ in README-cvs. Although this represents a large change to the ++ infrastructure, it should cause no change in how the tools work. ++ ++** Bug fixes ++ ++ cp --backup no longer fails when the last component of a source file ++ name is "." or "..". ++ ++ "ls --color" would highlight other-writable and sticky directories ++ no differently than regular directories on a file system with ++ dirent.d_type support. ++ ++ "mv -T --verbose --backup=t A B" now prints the " (backup: B.~1~)" ++ suffix when A and B are directories as well as when they are not. ++ ++ mv and "cp -r" no longer fail when invoked with two arguments ++ where the first one names a directory and the second name ends in ++ a slash and doesn't exist. E.g., "mv dir B/", for nonexistent B, ++ now succeeds, once more. This bug was introduced in coreutils-5.3.0. ++ ++ ++* Major changes in release 6.1 (2006-08-19) [unstable] ++ ++** Changes in behavior ++ ++ df now considers BSD "kernfs" file systems to be dummies ++ ++** New features ++ ++ printf now supports the 'I' flag on hosts whose underlying printf ++ implementations support 'I', e.g., "printf %Id 2". ++ ++** Bug fixes ++ ++ cp --sparse preserves sparseness at the end of a file, even when ++ the file's apparent size is not a multiple of its block size. ++ [introduced with the original design, in fileutils-4.0r, 2000-04-29] ++ ++ df (with a command line argument) once again prints its header ++ [introduced in coreutils-6.0] ++ ++ ls -CF would misalign columns in some cases involving non-stat'able files ++ [introduced in coreutils-6.0] ++ ++* Major changes in release 6.0 (2006-08-15) [unstable] ++ ++** Improved robustness ++ ++ df: if the file system claims to have more available than total blocks, ++ report the number of used blocks as being "total - available" ++ (a negative number) rather than as garbage. ++ ++ dircolors: a new autoconf run-test for AIX's buggy strndup function ++ prevents malfunction on that system; may also affect cut, expand, ++ and unexpand. ++ ++ fts no longer changes the current working directory, so its clients ++ (chmod, chown, chgrp, du) no longer malfunction under extreme conditions. ++ ++ pwd and other programs using lib/getcwd.c work even on file systems ++ where dirent.d_ino values are inconsistent with those from stat.st_ino. ++ ++ rm's core is now reentrant: rm --recursive (-r) now processes ++ hierarchies without changing the working directory at all. ++ ++** Changes in behavior ++ ++ basename and dirname now treat // as different from / on platforms ++ where the two are distinct. ++ ++ chmod, install, and mkdir now preserve a directory's set-user-ID and ++ set-group-ID bits unless you explicitly request otherwise. E.g., ++ 'chmod 755 DIR' and 'chmod u=rwx,go=rx DIR' now preserve DIR's ++ set-user-ID and set-group-ID bits instead of clearing them, and ++ similarly for 'mkdir -m 755 DIR' and 'mkdir -m u=rwx,go=rx DIR'. To ++ clear the bits, mention them explicitly in a symbolic mode, e.g., ++ 'mkdir -m u=rwx,go=rx,-s DIR'. To set them, mention them explicitly ++ in either a symbolic or a numeric mode, e.g., 'mkdir -m 2755 DIR', ++ 'mkdir -m u=rwx,go=rx,g+s' DIR. This change is for convenience on ++ systems where these bits inherit from parents. Unfortunately other ++ operating systems are not consistent here, and portable scripts ++ cannot assume the bits are set, cleared, or preserved, even when the ++ bits are explicitly mentioned. For example, OpenBSD 3.9 'mkdir -m ++ 777 D' preserves D's setgid bit but 'chmod 777 D' clears it. ++ Conversely, Solaris 10 'mkdir -m 777 D', 'mkdir -m g-s D', and ++ 'chmod 0777 D' all preserve D's setgid bit, and you must use ++ something like 'chmod g-s D' to clear it. ++ ++ 'cp --link --no-dereference' now works also on systems where the ++ link system call cannot create a hard link to a symbolic link. ++ This change has no effect on systems with a Linux-based kernel. ++ ++ csplit and nl now use POSIX syntax for regular expressions, not ++ Emacs syntax. As a result, character classes like [[:print:]] and ++ interval expressions like A\{1,9\} now have their usual meaning, ++ . no longer matches the null character, and \ must precede the + and ++ ? operators. ++ ++ date: a command like date -d '2006-04-23 21 days ago' would print ++ the wrong date in some time zones. (see the test for an example) ++ ++ df changes: ++ ++ df now considers "none" and "proc" file systems to be dummies and ++ therefore does not normally display them. Also, inaccessible file ++ systems (which can be caused by shadowed mount points or by ++ chrooted bind mounts) are now dummies, too. ++ ++ df now fails if it generates no output, so you can inspect the ++ exit status of a command like "df -t ext3 -t reiserfs DIR" to test ++ whether DIR is on a file system of type "ext3" or "reiserfs". ++ ++ expr no longer complains about leading ^ in a regular expression ++ (the anchor is ignored), or about regular expressions like A** (the ++ second "*" is ignored). expr now exits with status 2 (not 3) for ++ errors it detects in the expression's values; exit status 3 is now ++ used only for internal errors (such as integer overflow, which expr ++ now checks for). ++ ++ install and mkdir now implement the X permission symbol correctly, ++ e.g., 'mkdir -m a+X dir'; previously the X was ignored. ++ ++ install now creates parent directories with mode u=rwx,go=rx (755) ++ instead of using the mode specified by the -m option; and it does ++ not change the owner or group of parent directories. This is for ++ compatibility with BSD and closes some race conditions. ++ ++ ln now uses different (and we hope clearer) diagnostics when it fails. ++ ln -v now acts more like FreeBSD, so it generates output only when ++ successful and the output is easier to parse. ++ ++ ls now defaults to --time-style='locale', not --time-style='posix-long-iso'. ++ However, the 'locale' time style now behaves like 'posix-long-iso' ++ if your locale settings appear to be messed up. This change ++ attempts to have the default be the best of both worlds. ++ ++ mkfifo and mknod no longer set special mode bits (setuid, setgid, ++ and sticky) with the -m option. ++ ++ nohup's usual diagnostic now more precisely specifies the I/O ++ redirections, e.g., "ignoring input and appending output to ++ nohup.out". Also, nohup now redirects stderr to nohup.out (or ++ $HOME/nohup.out) if stdout is closed and stderr is a tty; this is in ++ response to Open Group XCU ERN 71. ++ ++ rm --interactive now takes an optional argument, although the ++ default of using no argument still acts like -i. ++ ++ rm no longer fails to remove an empty, unreadable directory ++ ++ seq changes: ++ ++ seq defaults to a minimal fixed point format that does not lose ++ information if seq's operands are all fixed point decimal numbers. ++ You no longer need the '-f%.f' in 'seq -f%.f 1048575 1024 1050623', ++ for example, since the default format now has the same effect. ++ ++ seq now lets you use %a, %A, %E, %F, and %G formats. ++ ++ seq now uses long double internally rather than double. ++ ++ sort now reports incompatible options (e.g., -i and -n) rather than ++ silently ignoring one of them. ++ ++ stat's --format=FMT option now works the way it did before 5.3.0: ++ FMT is automatically newline terminated. The first stable release ++ containing this change was 5.92. ++ ++ stat accepts the new option --printf=FMT, where FMT is *not* ++ automatically newline terminated. ++ ++ stat: backslash escapes are interpreted in a format string specified ++ via --printf=FMT, but not one specified via --format=FMT. That includes ++ octal (\ooo, at most three octal digits), hexadecimal (\xhh, one or ++ two hex digits), and the standard sequences (\a, \b, \f, \n, \r, \t, ++ \v, \", \\). ++ ++ With no operand, 'tail -f' now silently ignores the '-f' only if ++ standard input is a FIFO or pipe and POSIXLY_CORRECT is set. ++ Formerly, it ignored the '-f' when standard input was a FIFO, pipe, ++ or socket. ++ ++** Scheduled for removal ++ ++ ptx's --copyright (-C) option is scheduled for removal in 2007, and ++ now evokes a warning. Use --version instead. ++ ++ rm's --directory (-d) option is scheduled for removal in 2006. This ++ option has been silently ignored since coreutils 5.0. On systems ++ that support unlinking of directories, you can use the "unlink" ++ command to unlink a directory. ++ ++ Similarly, we are considering the removal of ln's --directory (-d, ++ -F) option in 2006. Please write to if this ++ would cause a problem for you. On systems that support hard links ++ to directories, you can use the "link" command to create one. ++ ++** New programs ++ ++ base64: base64 encoding and decoding (RFC 3548) functionality. ++ sha224sum: print or check a SHA224 (224-bit) checksum ++ sha256sum: print or check a SHA256 (256-bit) checksum ++ sha384sum: print or check a SHA384 (384-bit) checksum ++ sha512sum: print or check a SHA512 (512-bit) checksum ++ shuf: Shuffle lines of text. ++ ++** New features ++ ++ chgrp now supports --preserve-root, --no-preserve-root (default), ++ as it was documented to do, and just as chmod, chown, and rm do. ++ ++ New dd iflag= and oflag= flags: ++ ++ 'directory' causes dd to fail unless the file is a directory, on ++ hosts that support this (e.g., Linux kernels, version 2.1.126 and ++ later). This has limited utility but is present for completeness. ++ ++ 'noatime' causes dd to read a file without updating its access ++ time, on hosts that support this (e.g., Linux kernels, version ++ 2.6.8 and later). ++ ++ 'nolinks' causes dd to fail if the file has multiple hard links, ++ on hosts that support this (e.g., Solaris 10 and later). ++ ++ ls accepts the new option --group-directories-first, to make it ++ list directories before files. ++ ++ rm now accepts the -I (--interactive=once) option. This new option ++ prompts once if rm is invoked recursively or if more than three ++ files are being deleted, which is less intrusive than -i prompting ++ for every file, but provides almost the same level of protection ++ against mistakes. ++ ++ shred and sort now accept the --random-source option. ++ ++ sort now accepts the --random-sort (-R) option and 'R' ordering option. ++ ++ sort now supports obsolete usages like "sort +1 -2" unless ++ POSIXLY_CORRECT is set. However, when conforming to POSIX ++ 1003.1-2001 "sort +1" still sorts the file named "+1". ++ ++ wc accepts a new option --files0-from=FILE, where FILE contains a ++ list of NUL-terminated file names. ++ ++** Bug fixes ++ ++ cat with any of the options, -A -v -e -E -T, when applied to a ++ file in /proc or /sys (linux-specific), would truncate its output, ++ usually printing nothing. ++ ++ cp -p would fail in a /proc-less chroot, on some systems ++ ++ When 'cp -RL' encounters the same directory more than once in the ++ hierarchy beneath a single command-line argument, it no longer confuses ++ them with hard-linked directories. ++ ++ fts-using tools (chmod, chown, chgrp, du) no longer fail due to ++ a double-free bug -- it could be triggered by making a directory ++ inaccessible while e.g., du is traversing the hierarchy under it. ++ ++ fts-using tools (chmod, chown, chgrp, du) no longer misinterpret ++ a very long symlink chain as a dangling symlink. Before, such a ++ misinterpretation would cause these tools not to diagnose an ELOOP error. ++ ++ ls --indicator-style=file-type would sometimes stat a symlink ++ unnecessarily. ++ ++ ls --file-type worked like --indicator-style=slash (-p), ++ rather than like --indicator-style=file-type. ++ ++ mv: moving a symlink into the place of an existing non-directory is ++ now done atomically; before, mv would first unlink the destination. ++ ++ mv -T DIR EMPTY_DIR no longer fails unconditionally. Also, mv can ++ now remove an empty destination directory: mkdir -p a b/a; mv a b ++ ++ rm (on systems with openat) can no longer exit before processing ++ all command-line arguments. ++ ++ rm is no longer susceptible to a few low-probability memory leaks. ++ ++ rm -r no longer fails to remove an inaccessible and empty directory ++ ++ rm -r's cycle detection code can no longer be tricked into reporting ++ a false positive (introduced in fileutils-4.1.9). ++ ++ shred --remove FILE no longer segfaults on Gentoo systems ++ ++ sort would fail for large inputs (~50MB) on systems with a buggy ++ mkstemp function. sort and tac now use the replacement mkstemp ++ function, and hence are no longer subject to limitations (of 26 or 32, ++ on the maximum number of files from a given template) on HP-UX 10.20, ++ SunOS 4.1.4, Solaris 2.5.1 and OSF1/Tru64 V4.0F&V5.1. ++ ++ tail -f once again works on a file with the append-only ++ attribute (affects at least Linux ext2, ext3, xfs file systems) ++ ++* Major changes in release 5.97 (2006-06-24) [stable] ++* Major changes in release 5.96 (2006-05-22) [stable] ++* Major changes in release 5.95 (2006-05-12) [stable] ++* Major changes in release 5.94 (2006-02-13) [stable] ++ ++[see the b5_9x branch for details] ++ ++* Major changes in release 5.93 (2005-11-06) [stable] ++ ++** Bug fixes ++ ++ dircolors no longer segfaults upon an attempt to use the new ++ STICKY_OTHER_WRITABLE (OWT) attribute. ++ ++ du no longer overflows a counter when processing a file larger than ++ 2^31-1 on some 32-bit systems (at least some AIX 5.1 configurations). ++ ++ md5sum once again defaults to using the ' ' non-binary marker ++ (rather than the '*' binary marker) by default on Unix-like systems. ++ ++ mkdir -p and install -d no longer exit nonzero when asked to create ++ a directory like 'nonexistent/.' ++ ++ rm emits a better diagnostic when (without -r) it fails to remove ++ a directory on e.g., Solaris 9/10 systems. ++ ++ tac now works when stdin is a tty, even on non-Linux systems. ++ ++ "tail -c 2 FILE" and "touch 0101000000" now operate as POSIX ++ 1003.1-2001 requires, even when coreutils is conforming to older ++ POSIX standards, as the newly-required behavior is upward-compatible ++ with the old. ++ ++ The documentation no longer mentions rm's --directory (-d) option. ++ ++** Build-related bug fixes ++ ++ installing .mo files would fail ++ ++ ++* Major changes in release 5.92 (2005-10-22) [stable] ++ ++** Bug fixes ++ ++ chmod now diagnoses an invalid mode string starting with an octal digit ++ ++ dircolors now properly quotes single-quote characters ++ ++ ++* Major changes in release 5.91 (2005-10-17) [stable candidate] ++ ++** Bug fixes ++ ++ "mkdir -p /a/b/c" no longer fails merely because a leading prefix ++ directory (e.g., /a or /a/b) exists on a read-only file system. ++ ++** Removed options ++ ++ tail's --allow-missing option has been removed. Use --retry instead. ++ ++ stat's --link and -l options have been removed. ++ Use --dereference (-L) instead. ++ ++** Deprecated options ++ ++ Using ls, du, or df with the --kilobytes option now evokes a warning ++ that the long-named option is deprecated. Use '-k' instead. ++ ++ du's long-named --megabytes option now evokes a warning. ++ Use -m instead. ++ ++ ++* Major changes in release 5.90 (2005-09-29) [unstable] ++ ++** Bring back support for 'head -NUM', 'tail -NUM', etc. even when ++ conforming to POSIX 1003.1-2001. The following changes apply only ++ when conforming to POSIX 1003.1-2001; there is no effect when ++ conforming to older POSIX versions. ++ ++ The following usages now behave just as when conforming to older POSIX: ++ ++ date -I ++ expand -TAB1[,TAB2,...] ++ fold -WIDTH ++ head -NUM ++ join -j FIELD ++ join -j1 FIELD ++ join -j2 FIELD ++ join -o FIELD_NAME1 FIELD_NAME2... ++ nice -NUM ++ od -w ++ pr -S ++ split -NUM ++ tail -[NUM][bcl][f] [FILE] ++ ++ The following usages no longer work, due to the above changes: ++ ++ date -I TIMESPEC (use 'date -ITIMESPEC' instead) ++ od -w WIDTH (use 'od -wWIDTH' instead) ++ pr -S STRING (use 'pr -SSTRING' instead) ++ ++ A few usages still have behavior that depends on which POSIX standard is ++ being conformed to, and portable applications should beware these ++ problematic usages. These include: ++ ++ Problematic Standard-conforming replacement, depending on ++ usage whether you prefer the behavior of: ++ POSIX 1003.2-1992 POSIX 1003.1-2001 ++ sort +4 sort -k 5 sort ./+4 ++ tail +4 tail -n +4 tail ./+4 ++ tail - f tail f [see (*) below] ++ tail -c 4 tail -c 10 ./4 tail -c4 ++ touch 12312359 f touch -t 12312359 f touch ./12312359 f ++ uniq +4 uniq -s 4 uniq ./+4 ++ ++ (*) "tail - f" does not conform to POSIX 1003.1-2001; to read ++ standard input and then "f", use the command "tail -- - f". ++ ++ These changes are in response to decisions taken in the January 2005 ++ Austin Group standardization meeting. For more details, please see ++ "Utility Syntax Guidelines" in the Minutes of the January 2005 ++ Meeting . ++ ++** Binary input and output are now implemented more consistently. ++ These changes affect only platforms like MS-DOS that distinguish ++ between binary and text files. ++ ++ The following programs now always use text input/output: ++ ++ expand unexpand ++ ++ The following programs now always use binary input/output to copy data: ++ ++ cp install mv shred ++ ++ The following programs now always use binary input/output to copy ++ data, except for stdin and stdout when it is a terminal. ++ ++ head tac tail tee tr ++ (cat behaves similarly, unless one of the options -bensAE is used.) ++ ++ cat's --binary or -B option has been removed. It existed only on ++ MS-DOS-like platforms, and didn't work as documented there. ++ ++ md5sum and sha1sum now obey the -b or --binary option, even if ++ standard input is a terminal, and they no longer report files to be ++ binary if they actually read them in text mode. ++ ++** Changes for better conformance to POSIX ++ ++ cp, ln, mv, rm changes: ++ ++ Leading white space is now significant in responses to yes-or-no questions. ++ For example, if "rm" asks "remove regular file `foo'?" and you respond ++ with " y" (i.e., space before "y"), it counts as "no". ++ ++ dd changes: ++ ++ On a QUIT or PIPE signal, dd now exits without printing statistics. ++ ++ On hosts lacking the INFO signal, dd no longer treats the USR1 ++ signal as if it were INFO when POSIXLY_CORRECT is set. ++ ++ If the file F is non-seekable and contains fewer than N blocks, ++ then before copying "dd seek=N of=F" now extends F with zeroed ++ blocks until F contains N blocks. ++ ++ fold changes: ++ ++ When POSIXLY_CORRECT is set, "fold file -3" is now equivalent to ++ "fold file ./-3", not the obviously-erroneous "fold file ./-w3". ++ ++ ls changes: ++ ++ -p now marks only directories; it is equivalent to the new option ++ --indicator-style=slash. Use --file-type or ++ --indicator-style=file-type to get -p's old behavior. ++ ++ nice changes: ++ ++ Documentation and diagnostics now refer to "nicenesses" (commonly ++ in the range -20...19) rather than "nice values" (commonly 0...39). ++ ++ nohup changes: ++ ++ nohup now ignores the umask when creating nohup.out. ++ ++ nohup now closes stderr if it is a terminal and stdout is closed. ++ ++ nohup now exits with status 127 (not 1) when given an invalid option. ++ ++ pathchk changes: ++ ++ It now rejects the empty name in the normal case. That is, ++ "pathchk -p ''" now fails, and "pathchk ''" fails unless the ++ current host (contra POSIX) allows empty file names. ++ ++ The new -P option checks whether a file name component has leading "-", ++ as suggested in interpretation "Austin-039:XCU:pathchk:pathchk -p" ++ . ++ It also rejects the empty name even if the current host accepts it; see ++ . ++ ++ The --portability option is now equivalent to -p -P. ++ ++** Bug fixes ++ ++ chmod, mkdir, mkfifo, and mknod formerly mishandled rarely-used symbolic ++ permissions like =xX and =u, and did not properly diagnose some invalid ++ strings like g+gr, ug,+x, and +1. These bugs have been fixed. ++ ++ csplit could produce corrupt output, given input lines longer than 8KB ++ ++ dd now computes statistics using a realtime clock (if available) ++ rather than the time-of-day clock, to avoid glitches if the ++ time-of-day is changed while dd is running. Also, it avoids ++ using unsafe code in signal handlers; this fixes some core dumps. ++ ++ expr and test now correctly compare integers of unlimited magnitude. ++ ++ expr now detects integer overflow when converting strings to integers, ++ rather than silently wrapping around. ++ ++ ls now refuses to generate time stamps containing more than 1000 bytes, to ++ foil potential denial-of-service attacks on hosts with very large stacks. ++ ++ "mkdir -m =+x dir" no longer ignores the umask when evaluating "+x", ++ and similarly for mkfifo and mknod. ++ ++ "mkdir -p /tmp/a/b dir" no longer attempts to create the '.'-relative ++ directory, dir (in /tmp/a), when, after creating /tmp/a/b, it is unable ++ to return to its initial working directory. Similarly for "install -D ++ file /tmp/a/b/file". ++ ++ "pr -D FORMAT" now accepts the same formats that "date +FORMAT" does. ++ ++ stat now exits nonzero if a file operand does not exist ++ ++** Improved robustness ++ ++ Date no longer needs to allocate virtual memory to do its job, ++ so it can no longer fail due to an out-of-memory condition, ++ no matter how large the result. ++ ++** Improved portability ++ ++ hostid now prints exactly 8 hexadecimal digits, possibly with leading zeros, ++ and without any spurious leading "fff..." on 64-bit hosts. ++ ++ nice now works on Darwin 7.7.0 in spite of its invalid definition of NZERO. ++ ++ 'rm -r' can remove all entries in a directory even when it is on a ++ file system for which readdir is buggy and that was not checked by ++ coreutils' old configure-time run-test. ++ ++ sleep no longer fails when resumed after being suspended on linux-2.6.8.1, ++ in spite of that kernel's buggy nanosleep implementation. ++ ++** New features ++ ++ chmod -w now complains if its behavior differs from what chmod a-w ++ would do, and similarly for chmod -r, chmod -x, etc. ++ ++ cp and mv: the --reply=X option is deprecated ++ ++ date accepts the new option --rfc-3339=TIMESPEC. The old --iso-8601 (-I) ++ option is deprecated; it still works, but new applications should avoid it. ++ date, du, ls, and pr's time formats now support new %:z, %::z, %:::z ++ specifiers for numeric time zone offsets like -07:00, -07:00:00, and -07. ++ ++ dd has new iflag= and oflag= flags "binary" and "text", which have an ++ effect only on nonstandard platforms that distinguish text from binary I/O. ++ ++ dircolors now supports SETUID, SETGID, STICKY_OTHER_WRITABLE, ++ OTHER_WRITABLE, and STICKY, with ls providing default colors for these ++ categories if not specified by dircolors. ++ ++ du accepts new options: --time[=TYPE] and --time-style=STYLE ++ ++ join now supports a NUL field separator, e.g., "join -t '\0'". ++ join now detects and reports incompatible options, e.g., "join -t x -t y", ++ ++ ls no longer outputs an extra space between the mode and the link count ++ when none of the listed files has an ACL. ++ ++ md5sum --check now accepts multiple input files, and similarly for sha1sum. ++ ++ If stdin is a terminal, nohup now redirects it from /dev/null to ++ prevent the command from tying up an OpenSSH session after you logout. ++ ++ "rm -FOO" now suggests "rm ./-FOO" if the file "-FOO" exists and ++ "-FOO" is not a valid option. ++ ++ stat -f -c %S outputs the fundamental block size (used for block counts). ++ stat -f's default output format has been changed to output this size as well. ++ stat -f recognizes file systems of type XFS and JFS ++ ++ "touch -" now touches standard output, not a file named "-". ++ ++ uname -a no longer generates the -p and -i outputs if they are unknown. ++ ++* Major changes in release 5.3.0 (2005-01-08) [unstable] ++ ++** Bug fixes ++ ++ Several fixes to chgrp and chown for compatibility with POSIX and BSD: ++ ++ Do not affect symbolic links by default. ++ Now, operate on whatever a symbolic link points to, instead. ++ To get the old behavior, use --no-dereference (-h). ++ ++ --dereference now works, even when the specified owner ++ and/or group match those of an affected symlink. ++ ++ Check for incompatible options. When -R and --dereference are ++ both used, then either -H or -L must also be used. When -R and -h ++ are both used, then -P must be in effect. ++ ++ -H, -L, and -P have no effect unless -R is also specified. ++ If -P and -R are both specified, -h is assumed. ++ ++ Do not optimize away the chown() system call when the file's owner ++ and group already have the desired value. This optimization was ++ incorrect, as it failed to update the last-changed time and reset ++ special permission bits, as POSIX requires. ++ ++ "chown : file", "chown '' file", and "chgrp '' file" now succeed ++ without changing the uid or gid, instead of reporting an error. ++ ++ Do not report an error if the owner or group of a ++ recursively-encountered symbolic link cannot be updated because ++ the file system does not support it. ++ ++ chmod now accepts multiple mode-like options, e.g., "chmod -r -w f". ++ ++ chown is no longer subject to a race condition vulnerability, when ++ used with --from=O:G and without the (-h) --no-dereference option. ++ ++ cut's --output-delimiter=D option works with abutting byte ranges. ++ ++ dircolors's documentation now recommends that shell scripts eval ++ "`dircolors`" rather than `dircolors`, to avoid shell expansion pitfalls. ++ ++ du no longer segfaults when a subdirectory of an operand ++ directory is removed while du is traversing that subdirectory. ++ Since the bug was in the underlying fts.c module, it also affected ++ chown, chmod, and chgrp. ++ ++ du's --exclude-from=FILE and --exclude=P options now compare patterns ++ against the entire name of each file, rather than against just the ++ final component. ++ ++ echo now conforms to POSIX better. It supports the \0ooo syntax for ++ octal escapes, and \c now terminates printing immediately. If ++ POSIXLY_CORRECT is set and the first argument is not "-n", echo now ++ outputs all option-like arguments instead of treating them as options. ++ ++ expand and unexpand now conform to POSIX better. They check for ++ blanks (which can include characters other than space and tab in ++ non-POSIX locales) instead of spaces and tabs. Unexpand now ++ preserves some blanks instead of converting them to tabs or spaces. ++ ++ "ln x d/" now reports an error if d/x is a directory and x a file, ++ instead of incorrectly creating a link to d/x/x. ++ ++ ls no longer segfaults on systems for which SIZE_MAX != (size_t) -1. ++ ++ md5sum and sha1sum now report an error when given so many input ++ lines that their line counter overflows, instead of silently ++ reporting incorrect results. ++ ++ Fixes for "nice": ++ ++ If it fails to lower the niceness due to lack of permissions, ++ it goes ahead and runs the command anyway, as POSIX requires. ++ ++ It no longer incorrectly reports an error if the current niceness ++ happens to be -1. ++ ++ It no longer assumes that nicenesses range from -20 through 19. ++ ++ It now consistently adjusts out-of-range nicenesses to the ++ closest values in range; formerly it sometimes reported an error. ++ ++ pathchk no longer accepts trailing options, e.g., "pathchk -p foo -b" ++ now treats -b as a file name to check, not as an invalid option. ++ ++ 'pr --columns=N' was not equivalent to 'pr -N' when also using ++ either -s or -w. ++ ++ pr now supports page numbers up to 2**64 on most hosts, and it ++ detects page number overflow instead of silently wrapping around. ++ pr now accepts file names that begin with "+" so long as the rest of ++ the file name does not look like a page range. ++ ++ printf has several changes: ++ ++ It now uses 'intmax_t' (not 'long int') to format integers, so it ++ can now format 64-bit integers on most modern hosts. ++ ++ On modern hosts it now supports the C99-inspired %a, %A, %F conversion ++ specs, the "'" and "0" flags, and the ll, j, t, and z length modifiers ++ (this is compatible with recent Bash versions). ++ ++ The printf command now rejects invalid conversion specifications ++ like %#d, instead of relying on undefined behavior in the underlying ++ printf function. ++ ++ ptx now diagnoses invalid values for its --width=N (-w) ++ and --gap-size=N (-g) options. ++ ++ mv (when moving between partitions) no longer fails when ++ operating on too many command-line-specified nonempty directories. ++ ++ "readlink -f" is more compatible with prior implementations ++ ++ rm (without -f) no longer hangs when attempting to remove a symlink ++ to a file on an off-line NFS-mounted partition. ++ ++ rm no longer gets a failed assertion under some unusual conditions. ++ ++ rm no longer requires read access to the current directory. ++ ++ "rm -r" would mistakenly fail to remove files under a directory ++ for some types of errors (e.g., read-only file system, I/O error) ++ when first encountering the directory. ++ ++ "sort" fixes: ++ ++ "sort -o -" now writes to a file named "-" instead of to standard ++ output; POSIX requires this. ++ ++ An unlikely race condition has been fixed where "sort" could have ++ mistakenly removed a temporary file belonging to some other process. ++ ++ "sort" no longer has O(N**2) behavior when it creates many temporary files. ++ ++ tac can now handle regular, nonseekable files like Linux's ++ /proc/modules. Before, it would produce no output for such a file. ++ ++ tac would exit immediately upon I/O or temp-file creation failure. ++ Now it continues on, processing any remaining command line arguments. ++ ++ "tail -f" no longer mishandles pipes and fifos. With no operands, ++ tail now ignores -f if standard input is a pipe, as POSIX requires. ++ When conforming to POSIX 1003.2-1992, tail now supports the SUSv2 b ++ modifier (e.g., "tail -10b file") and it handles some obscure cases ++ more correctly, e.g., "tail +cl" now reads the file "+cl" rather ++ than reporting an error, "tail -c file" no longer reports an error, ++ and "tail - file" no longer reads standard input. ++ ++ tee now exits when it gets a SIGPIPE signal, as POSIX requires. ++ To get tee's old behavior, use the shell command "(trap '' PIPE; tee)". ++ Also, "tee -" now writes to standard output instead of to a file named "-". ++ ++ "touch -- MMDDhhmm[yy] file" is now equivalent to ++ "touch MMDDhhmm[yy] file" even when conforming to pre-2001 POSIX. ++ ++ tr no longer mishandles a second operand with leading "-". ++ ++ who now prints user names in full instead of truncating them after 8 bytes. ++ ++ The following commands now reject unknown options instead of ++ accepting them as operands, so that users are properly warned that ++ options may be added later. Formerly they accepted unknown options ++ as operands; e.g., "basename -a a" acted like "basename -- -a a". ++ ++ basename dirname factor hostname link nohup sync unlink yes ++ ++** New features ++ ++ For efficiency, 'sort -m' no longer copies input to a temporary file ++ merely because the input happens to come from a pipe. As a result, ++ some relatively-contrived examples like 'cat F | sort -m -o F - G' ++ are no longer safe, as 'sort' might start writing F before 'cat' is ++ done reading it. This problem cannot occur unless '-m' is used. ++ ++ When outside the default POSIX locale, the 'who' and 'pinky' ++ commands now output time stamps like "2004-06-21 13:09" instead of ++ the traditional "Jun 21 13:09". ++ ++ pwd now works even when run from a working directory whose name ++ is longer than PATH_MAX. ++ ++ cp, install, ln, and mv have a new --no-target-directory (-T) option, ++ and -t is now a short name for their --target-directory option. ++ ++ cp -pu and mv -u (when copying) now don't bother to update the ++ destination if the resulting time stamp would be no newer than the ++ preexisting time stamp. This saves work in the common case when ++ copying or moving multiple times to the same destination in a file ++ system with a coarse time stamp resolution. ++ ++ cut accepts a new option, --complement, to complement the set of ++ selected bytes, characters, or fields. ++ ++ dd now also prints the number of bytes transferred, the time, and the ++ transfer rate. The new "status=noxfer" operand suppresses this change. ++ ++ dd has new conversions for the conv= option: ++ ++ nocreat do not create the output file ++ excl fail if the output file already exists ++ fdatasync physically write output file data before finishing ++ fsync likewise, but also write metadata ++ ++ dd has new iflag= and oflag= options with the following flags: ++ ++ append append mode (makes sense for output file only) ++ direct use direct I/O for data ++ dsync use synchronized I/O for data ++ sync likewise, but also for metadata ++ nonblock use non-blocking I/O ++ nofollow do not follow symlinks ++ noctty do not assign controlling terminal from file ++ ++ stty now provides support (iutf8) for setting UTF-8 input mode. ++ ++ With stat, a specified format is no longer automatically newline terminated. ++ If you want a newline at the end of your output, append '\n' to the format ++ string. ++ ++ 'df', 'du', and 'ls' now take the default block size from the ++ BLOCKSIZE environment variable if the BLOCK_SIZE, DF_BLOCK_SIZE, ++ DU_BLOCK_SIZE, and LS_BLOCK_SIZE environment variables are not set. ++ Unlike the other variables, though, BLOCKSIZE does not affect ++ values like 'ls -l' sizes that are normally displayed as bytes. ++ This new behavior is for compatibility with BSD. ++ ++ du accepts a new option --files0-from=FILE, where FILE contains a ++ list of NUL-terminated file names. ++ ++ Date syntax as used by date -d, date -f, and touch -d has been ++ changed as follows: ++ ++ Dates like 'January 32' with out-of-range components are now rejected. ++ ++ Dates can have fractional time stamps like 2004-02-27 14:19:13.489392193. ++ ++ Dates can be entered via integer counts of seconds since 1970 when ++ prefixed by '@'. For example, '@321' represents 1970-01-01 00:05:21 UTC. ++ ++ Time zone corrections can now separate hours and minutes with a colon, ++ and can follow standard abbreviations like "UTC". For example, ++ "UTC +0530" and "+05:30" are supported, and are both equivalent to "+0530". ++ ++ Date values can now have leading TZ="..." assignments that override ++ the environment only while that date is being processed. For example, ++ the following shell command converts from Paris to New York time: ++ ++ TZ="America/New_York" date --date='TZ="Europe/Paris" 2004-10-31 06:30' ++ ++ 'date' has a new option --iso-8601=ns that outputs ++ nanosecond-resolution time stamps. ++ ++ echo -e '\xHH' now outputs a byte whose hexadecimal value is HH, ++ for compatibility with bash. ++ ++ ls now exits with status 1 on minor problems, 2 if serious trouble. ++ ++ ls has a new --hide=PATTERN option that behaves like ++ --ignore=PATTERN, except that it is overridden by -a or -A. ++ This can be useful for aliases, e.g., if lh is an alias for ++ "ls --hide='*~'", then "lh -A" lists the file "README~". ++ ++ In the following cases POSIX allows the default GNU behavior, ++ so when POSIXLY_CORRECT is set: ++ ++ false, printf, true, unlink, and yes all support --help and --option. ++ ls supports TABSIZE. ++ pr no longer depends on LC_TIME for the date format in non-POSIX locales. ++ printf supports \u, \U, \x. ++ tail supports two or more files when using the obsolete option syntax. ++ ++ The usual '--' operand is now supported by chroot, hostid, hostname, ++ pwd, sync, and yes. ++ ++ 'od' now conforms to POSIX better, and is more compatible with BSD: ++ ++ The older syntax "od [-abcdfilosx]... [FILE] [[+]OFFSET[.][b]]" now works ++ even without --traditional. This is a change in behavior if there ++ are one or two operands and the last one begins with +, or if ++ there are two operands and the latter one begins with a digit. ++ For example, "od foo 10" and "od +10" now treat the last operand as ++ an offset, not as a file name. ++ ++ -h is no longer documented, and may be withdrawn in future versions. ++ Use -x or -t x2 instead. ++ ++ -i is now equivalent to -t dI (not -t d2), and ++ -l is now equivalent to -t dL (not -t d4). ++ ++ -s is now equivalent to -t d2. The old "-s[NUM]" or "-s NUM" ++ option has been renamed to "-S NUM". ++ ++ The default output format is now -t oS, not -t o2, i.e., short int ++ rather than two-byte int. This makes a difference only on hosts like ++ Cray systems where the C short int type requires more than two bytes. ++ ++ readlink accepts new options: --canonicalize-existing (-e) ++ and --canonicalize-missing (-m). ++ ++ The stat option --filesystem has been renamed to --file-system, for ++ consistency with POSIX "file system" and with cp and du --one-file-system. ++ ++** Removed features ++ ++ md5sum and sha1sum's undocumented --string option has been removed. ++ ++ tail's undocumented --max-consecutive-size-changes option has been removed. ++ ++* Major changes in release 5.2.1 (2004-03-12) [stable] ++ ++** Bug fixes ++ ++ mv could mistakenly fail to preserve hard links when moving two ++ or more arguments between partitions. ++ ++ 'cp --sparse=always F /dev/hdx' no longer tries to use lseek to create ++ holes in the destination. ++ ++ nohup now sets the close-on-exec flag for its copy of the stderr file ++ descriptor. This avoids some nohup-induced hangs. For example, before ++ this change, if you ran 'ssh localhost', then 'nohup sleep 600 /dev/null takes about one hour ++ on a 1.6 GHz Athlon 2000 XP. Now it can output 2^53-1 numbers before ++ misbehaving. ++ ++* Major changes in release 5.1.2 (2004-01-25): ++ ++** Bug fixes ++ ++ rmdir -p exits with status 1 on error; formerly it sometimes exited ++ with status 0 when given more than one argument. ++ ++ nohup now always exits with status 127 when it finds an error, ++ as POSIX requires; formerly it sometimes exited with status 1. ++ ++ Several programs (including cut, date, dd, env, hostname, nl, pr, ++ stty, and tr) now always exit with status 1 when they find an error; ++ formerly they sometimes exited with status 2. ++ ++ factor no longer reports a usage error if stdin has the wrong format. ++ ++ paste no longer infloops on ppc systems (bug introduced in 5.1.1) ++ ++ ++* Major changes in release 5.1.1 (2004-01-17): ++ ++** Configuration option ++ ++ You can select the default level of POSIX conformance at configure-time, ++ e.g., by ./configure DEFAULT_POSIX2_VERSION=199209 ++ ++** Bug fixes ++ ++ fold -s works once again on systems with differing sizes for int ++ and size_t (bug introduced in 5.1.0) ++ ++** New features ++ ++ touch -r now specifies the origin for any relative times in the -d ++ operand, if both options are given. For example, "touch -r FOO -d ++ '-5 seconds' BAR" sets BAR's modification time to be five seconds ++ before FOO's. ++ ++ join: The obsolete options "-j1 FIELD", "-j2 FIELD", and ++ "-o LIST1 LIST2..." are no longer supported on POSIX 1003.1-2001 systems. ++ Portable scripts should use "-1 FIELD", "-2 FIELD", and ++ "-o LIST1,LIST2..." respectively. If join was compiled on a ++ POSIX 1003.1-2001 system, you may enable the old behavior ++ by setting _POSIX2_VERSION=199209 in your environment. ++ [This change was reverted in coreutils 5.3.1.] ++ ++ ++* Major changes in release 5.1.0 (2003-12-21): ++ ++** New features ++ ++ chgrp, chmod, and chown can now process (with -R) hierarchies of virtually ++ unlimited depth. Before, they would fail to operate on any file they ++ encountered with a relative name of length PATH_MAX (often 4096) or longer. ++ ++ chgrp, chmod, chown, and rm accept the new options: ++ --preserve-root, --no-preserve-root (default) ++ ++ chgrp and chown now accept POSIX-mandated -L, -H, and -P options ++ ++ du can now process hierarchies of virtually unlimited depth. ++ Before, du was limited by the user's stack size and it would get a ++ stack overflow error (often a segmentation fault) when applied to ++ a hierarchy of depth around 30,000 or larger. ++ ++ du works even when run from an inaccessible directory ++ ++ du -D now dereferences all symlinks specified on the command line, ++ not just the ones that reference directories ++ ++ du now accepts -P (--no-dereference), for compatibility with du ++ of NetBSD and for consistency with e.g., chown and chgrp ++ ++ du's -H option will soon have the meaning required by POSIX ++ (--dereference-args, aka -D) rather then the current meaning of --si. ++ Now, using -H elicits a warning to that effect. ++ ++ When given -l and similar options, ls now adjusts the output column ++ widths to fit the data, so that output lines are shorter and have ++ columns that line up better. This may adversely affect shell ++ scripts that expect fixed-width columns, but such shell scripts were ++ not portable anyway, even with old GNU ls where the columns became ++ ragged when a datum was too wide. ++ ++ du accepts a new option, -0/--null, to make it produce NUL-terminated ++ output lines ++ ++** Bug fixes ++ ++ printf, seq, tail, and sleep now parse floating-point operands ++ and options in the C locale. POSIX requires this for printf. ++ ++ od -c -w9999999 no longer segfaults ++ ++ csplit no longer reads from freed memory (dumping core on some systems) ++ ++ csplit would mistakenly exhaust virtual memory in some cases ++ ++ ls --width=N (for very large N) is no longer subject to an address ++ arithmetic bug that could result in bounds violations. ++ ++ ls --width=N (with -x or -C) no longer allocates more space ++ (potentially much more) than necessary for a given directory. ++ ++ dd 'unblock' and 'sync' may now be combined (e.g., dd conv=unblock,sync) ++ ++* Major changes in release 5.0.91 (2003-09-08): ++ ++** New features ++ ++ date accepts a new option --rfc-2822, an alias for --rfc-822. ++ ++ split accepts a new option -d or --numeric-suffixes. ++ ++ cp, install, mv, and touch now preserve microsecond resolution on ++ file timestamps, on platforms that have the 'utimes' system call. ++ Unfortunately there is no system call yet to preserve file ++ timestamps to their full nanosecond resolution; microsecond ++ resolution is the best we can do right now. ++ ++ sort now supports the zero byte (NUL) as a field separator; use -t '\0'. ++ The -t '' option, which formerly had no effect, is now an error. ++ ++ sort option order no longer matters for the options -S, -d, -i, -o, and -t. ++ Stronger options override weaker, and incompatible options are diagnosed. ++ ++ 'sha1sum --check' now accepts the BSD format for SHA1 message digests ++ in addition to the BSD format for MD5 ones. ++ ++ who -l now means 'who --login', not 'who --lookup', per POSIX. ++ who's -l option has been eliciting an unconditional warning about ++ this impending change since sh-utils-2.0.12 (April 2002). ++ ++** Bug fixes ++ ++ Mistakenly renaming a file onto itself, e.g., via 'mv B b' when 'B' is ++ the same directory entry as 'b' no longer destroys the directory entry ++ referenced by both 'b' and 'B'. Note that this would happen only on ++ file systems like VFAT where two different names may refer to the same ++ directory entry, usually due to lower->upper case mapping of file names. ++ Now, the above can happen only on file systems that perform name mapping and ++ that support hard links (stat.st_nlink > 1). This mitigates the problem ++ in two ways: few file systems appear to be affected (hpfs and ntfs are), ++ when the bug is triggered, mv no longer removes the last hard link to a file. ++ *** ATTENTION ***: if you know how to distinguish the following two cases ++ without writing to the file system in question, please let me know: ++ 1) B and b refer to the same directory entry on a file system like NTFS ++ (B may well have a link count larger than 1) ++ 2) B and b are hard links to the same file ++ ++ stat no longer overruns a buffer for format strings ending in '%' ++ ++ fold -s -wN would infloop for N < 8 with TABs in the input. ++ E.g., this would not terminate: printf 'a\t' | fold -w2 -s ++ ++ 'split -a0', although of questionable utility, is accepted once again. ++ ++ 'df DIR' used to hang under some conditions on OSF/1 5.1. Now it doesn't. ++ ++ seq's --width (-w) option now works properly even when the endpoint ++ requiring the larger width is negative and smaller than the other endpoint. ++ ++ seq's default step is 1, even if LAST < FIRST. ++ ++ paste no longer mistakenly outputs 0xFF bytes for a nonempty input file ++ without a trailing newline. ++ ++ 'tail -n0 -f FILE' and 'tail -c0 -f FILE' no longer perform what amounted ++ to a busy wait, rather than sleeping between iterations. ++ ++ tail's long-undocumented --allow-missing option now elicits a warning ++ ++ ++* Major changes in release 5.0.90 (2003-07-29): ++ ++** New features ++ ++ sort is now up to 30% more CPU-efficient in some cases ++ ++ 'test' is now more compatible with Bash and POSIX: ++ ++ 'test -t', 'test --help', and 'test --version' now silently exit ++ with status 0. To test whether standard output is a terminal, use ++ 'test -t 1'. To get help and version info for 'test', use ++ '[ --help' and '[ --version'. ++ ++ 'test' now exits with status 2 (not 1) if there is an error. ++ ++ wc count field widths now are heuristically adjusted depending on the input ++ size, if known. If only one count is printed, it is guaranteed to ++ be printed without leading spaces. ++ ++ Previously, wc did not align the count fields if POSIXLY_CORRECT was set, ++ but POSIX did not actually require this undesirable behavior, so it ++ has been removed. ++ ++** Bug fixes ++ ++ kill no longer tries to operate on argv[0] (introduced in 5.0.1) ++ Why wasn't this noticed? Although many tests use kill, none of ++ them made an effort to avoid using the shell's built-in kill. ++ ++ '[' invoked with no arguments no longer evokes a segfault ++ ++ rm without --recursive (aka -r or -R) no longer prompts regarding ++ unwritable directories, as required by POSIX. ++ ++ uniq -c now uses a SPACE, not a TAB between the count and the ++ corresponding line, as required by POSIX. ++ ++ expr now exits with status 2 if the expression is syntactically valid, ++ and with status 3 if an error occurred. POSIX requires this. ++ ++ expr now reports trouble if string comparison fails due to a collation error. ++ ++ split now generates suffixes properly on EBCDIC hosts. ++ ++ split -a0 now works, as POSIX requires. ++ ++ 'sort --version' and 'sort --help' fail, as they should ++ when their output is redirected to /dev/full. ++ ++ 'su --version > /dev/full' now fails, as it should. ++ ++** Fewer arbitrary limitations ++ ++ cut requires 97% less memory when very large field numbers or ++ byte offsets are specified. ++ ++ ++* Major changes in release 5.0.1 (2003-07-15): ++ ++** New programs ++- new program: '[' (much like 'test') ++ ++** New features ++- head now accepts --lines=-N (--bytes=-N) to print all but the ++ N lines (bytes) at the end of the file ++- md5sum --check now accepts the output of the BSD md5sum program, e.g., ++ MD5 (f) = d41d8cd98f00b204e9800998ecf8427e ++- date -d DATE can now parse a DATE string like May-23-2003 ++- chown: '.' is no longer recognized as a separator in the OWNER:GROUP ++ specifier on POSIX 1003.1-2001 systems. If chown *was not* compiled ++ on such a system, then it still accepts '.', by default. If chown ++ was compiled on a POSIX 1003.1-2001 system, then you may enable the ++ old behavior by setting _POSIX2_VERSION=199209 in your environment. ++- chown no longer tries to preserve set-user-ID and set-group-ID bits; ++ on some systems, the chown syscall resets those bits, and previous ++ versions of the chown command would call chmod to restore the original, ++ pre-chown(2) settings, but that behavior is problematic. ++ 1) There was a window whereby a malicious user, M, could subvert a ++ chown command run by some other user and operating on files in a ++ directory where M has write access. ++ 2) Before (and even now, on systems with chown(2) that doesn't reset ++ those bits), an unwary admin. could use chown unwittingly to create e.g., ++ a set-user-ID root copy of /bin/sh. ++ ++** Bug fixes ++- chown --dereference no longer leaks a file descriptor per symlink processed ++- 'du /' once again prints the '/' on the last line ++- split's --verbose option works once again [broken in 4.5.10 and 5.0] ++- tail -f is no longer subject to a race condition that could make it ++ delay displaying the last part of a file that had stopped growing. That ++ bug could also make tail -f give an unwarranted 'file truncated' warning. ++- du no longer runs out of file descriptors unnecessarily ++- df and 'readlink --canonicalize' no longer corrupt the heap on ++ non-glibc, non-solaris systems ++- 'env -u UNSET_VARIABLE' no longer dumps core on non-glibc systems ++- readlink's --canonicalize option now works on systems like Solaris that ++ lack the canonicalize_file_name function but do have resolvepath. ++- mv now removes 'a' in this example on all systems: touch a; ln a b; mv a b ++ This behavior is contrary to POSIX (which requires that the mv command do ++ nothing and exit successfully), but I suspect POSIX will change. ++- date's %r format directive now honors locale settings ++- date's '-' (no-pad) format flag now affects the space-padded-by-default ++ conversion specifiers, %e, %k, %l ++- fmt now diagnoses invalid obsolescent width specifications like '-72x' ++- fmt now exits nonzero when unable to open an input file ++- tsort now fails when given an odd number of input tokens, ++ as required by POSIX. Before, it would act as if the final token ++ appeared one additional time. ++ ++** Fewer arbitrary limitations ++- tail's byte and line counts are no longer limited to OFF_T_MAX. ++ Now the limit is UINTMAX_MAX (usually 2^64). ++- split can now handle --bytes=N and --lines=N with N=2^31 or more. ++ ++** Portability ++- 'kill -t' now prints signal descriptions (rather than '?') on systems ++ like Tru64 with __sys_siglist but no strsignal function. ++- stat.c now compiles on Ultrix systems ++- sleep now works on AIX systems that lack support for clock_gettime ++- rm now works around Darwin6.5's broken readdir function ++ Before 'rm -rf DIR' would fail to remove all files in DIR ++ if there were more than 338. ++ ++* Major changes in release 5.0 (2003-04-02): ++- false --help now exits nonzero ++ ++[4.5.12] ++* printf no longer treats \x specially when POSIXLY_CORRECT is set ++* printf avoids buffer overrun with format ending in a backslash and ++* printf avoids buffer overrun with incomplete conversion specifier ++* printf accepts multiple flags in a single conversion specifier ++ ++[4.5.11] ++* seq no longer requires that a field width be specified ++* seq no longer fails when given a field width of '0' ++* seq now accepts " " and "'" as valid format flag characters ++* df now shows a HOSTNAME: prefix for each remote-mounted file system on AIX 5.1 ++* portability tweaks for HP-UX, AIX 5.1, DJGPP ++ ++[4.5.10] ++* printf no longer segfaults for a negative field width or precision ++* shred now always enables --exact for non-regular files ++* du no longer lists hard-linked files more than once ++* du no longer dumps core on some systems due to "infinite" recursion ++ via nftw's use of the buggy replacement function in getcwd.c ++* portability patches for a few vendor compilers and 64-bit systems ++* du -S *really* now works like it did before the change in 4.5.5 ++ ++[4.5.9] ++* du no longer truncates file sizes or sums to fit in 32-bit size_t ++* work around Linux kernel bug in getcwd (fixed in 2.4.21-pre4), so that pwd ++ now fails if the name of the working directory is so long that getcwd ++ truncates it. Before it would print the truncated name and exit successfully. ++* 'df /some/mount-point' no longer hangs on a GNU libc system when another ++ hard-mounted NFS file system (preceding /some/mount-point in /proc/mounts) ++ is inaccessible. ++* rm -rf now gives an accurate diagnostic when failing to remove a file ++ under certain unusual conditions ++* mv and 'cp --preserve=links' now preserve multiple hard links even under ++ certain unusual conditions where they used to fail ++ ++[4.5.8] ++* du -S once again works like it did before the change in 4.5.5 ++* stat accepts a new file format, %B, for the size of each block reported by %b ++* du accepts new option: --apparent-size ++* du --bytes (-b) works the same way it did in fileutils-3.16 and before ++* du reports proper sizes for directories (not zero) (broken in 4.5.6 or 4.5.7) ++* df now always displays under 'Filesystem', the device file name ++ corresponding to the listed mount point. Before, for a block- or character- ++ special file command line argument, df would display that argument. E.g., ++ 'df /dev/hda' would list '/dev/hda' as the 'Filesystem', rather than say ++ /dev/hda3 (the device on which '/' is mounted), as it does now. ++* test now works properly when invoked from a set user ID or set group ID ++ context and when testing access to files subject to alternate protection ++ mechanisms. For example, without this change, a set-UID program that invoked ++ 'test -w F' (to see if F is writable) could mistakenly report that it *was* ++ writable, even though F was on a read-only file system, or F had an ACL ++ prohibiting write access, or F was marked as immutable. ++ ++[4.5.7] ++* du would fail with more than one DIR argument when any but the last did not ++ contain a slash (due to a bug in ftw.c) ++ ++[4.5.6] ++* du no longer segfaults on Solaris systems (fixed heap-corrupting bug in ftw.c) ++* du --exclude=FILE works once again (this was broken by the rewrite for 4.5.5) ++* du no longer gets a failed assertion for certain hierarchy lay-outs ++ involving hard-linked directories ++* 'who -r' no longer segfaults when using non-C-locale messages ++* df now displays a mount point (usually '/') for non-mounted ++ character-special and block files ++ ++[4.5.5] ++* ls --dired produces correct byte offset for file names containing ++ nonprintable characters in a multibyte locale ++* du has been rewritten to use a variant of GNU libc's ftw.c ++* du now counts the space associated with a directory's directory entry, ++ even if it cannot list or chdir into that subdirectory. ++* du -S now includes the st_size of each entry corresponding to a subdirectory ++* rm on FreeBSD can once again remove directories from NFS-mounted file systems ++* ls has a new option --dereference-command-line-symlink-to-dir, which ++ corresponds to the new default behavior when none of -d, -l -F, -H, -L ++ has been specified. ++* ls dangling-symlink now prints 'dangling-symlink'. ++ Before, it would fail with 'no such file or directory'. ++* ls -s symlink-to-non-dir and ls -i symlink-to-non-dir now print ++ attributes of 'symlink', rather than attributes of their referents. ++* Fix a bug introduced in 4.5.4 that made it so that ls --color would no ++ longer highlight the names of files with the execute bit set when not ++ specified on the command line. ++* shred's --zero (-z) option no longer gobbles up any following argument. ++ Before, 'shred --zero file' would produce 'shred: missing file argument', ++ and worse, 'shred --zero f1 f2 ...' would appear to work, but would leave ++ the first file untouched. ++* readlink: new program ++* cut: new feature: when used to select ranges of byte offsets (as opposed ++ to ranges of fields) and when --output-delimiter=STRING is specified, ++ output STRING between ranges of selected bytes. ++* rm -r can no longer be tricked into mistakenly reporting a cycle. ++* when rm detects a directory cycle, it no longer aborts the entire command, ++ but rather merely stops processing the affected command line argument. ++ ++[4.5.4] ++* cp no longer fails to parse options like this: --preserve=mode,ownership ++* 'ls --color -F symlink-to-dir' works properly ++* ls is much more efficient on directories with valid dirent.d_type. ++* stty supports all baud rates defined in linux-2.4.19. ++* 'du symlink-to-dir/' would improperly remove the trailing slash ++* 'du ""' would evoke a bounds violation. ++* In the unlikely event that running 'du /' resulted in 'stat ("/", ...)' ++ failing, du would give a diagnostic about '' (empty string) rather than '/'. ++* printf: a hexadecimal escape sequence has at most two hex. digits, not three. ++* The following features have been added to the --block-size option ++ and similar environment variables of df, du, and ls. ++ - A leading "'" generates numbers with thousands separators. ++ For example: ++ $ ls -l --block-size="'1" file ++ -rw-rw-r-- 1 eggert src 47,483,707 Sep 24 23:40 file ++ - A size suffix without a leading integer generates a suffix in the output. ++ For example: ++ $ ls -l --block-size="K" ++ -rw-rw-r-- 1 eggert src 46371K Sep 24 23:40 file ++* ls's --block-size option now affects file sizes in all cases, not ++ just for --block-size=human-readable and --block-size=si. Fractional ++ sizes are now always rounded up, for consistency with df and du. ++* df now displays the block size using powers of 1000 if the requested ++ block size seems to be a multiple of a power of 1000. ++* nl no longer gets a segfault when run like this 'yes|nl -s%n' ++ ++[4.5.3] ++* du --dereference-args (-D) no longer fails in certain cases ++* 'ln --target-dir=DIR' no longer fails when given a single argument ++ ++[4.5.2] ++* 'rm -i dir' (without --recursive (-r)) no longer recurses into dir ++* 'tail -c N FILE' now works with files of size >= 4GB ++* 'mkdir -p' can now create very deep (e.g. 40,000-component) directories ++* rmdir -p dir-with-trailing-slash/ no longer fails ++* printf now honors the '--' command line delimiter ++* od's 8-byte formats x8, o8, and u8 now work ++* tail now accepts fractional seconds for its --sleep-interval=S (-s) option ++ ++[4.5.1] ++* du and ls now report sizes of symbolic links (before they'd always report 0) ++* uniq now obeys the LC_COLLATE locale, as per POSIX 1003.1-2001 TC1. ++ ++======================================================================== ++Here are the NEWS entries made from fileutils-4.1 until the ++point at which the packages merged to form the coreutils: ++ ++[4.1.11] ++* 'rm symlink-to-unwritable' doesn't prompt [introduced in 4.1.10] ++[4.1.10] ++* rm once again gives a reasonable diagnostic when failing to remove a file ++ owned by someone else in a sticky directory [introduced in 4.1.9] ++* df now rounds all quantities up, as per POSIX. ++* New ls time style: long-iso, which generates YYYY-MM-DD HH:MM. ++* Any time style can be preceded by "posix-"; this causes "ls" to ++ use traditional timestamp format when in the POSIX locale. ++* The default time style is now posix-long-iso instead of posix-iso. ++ Set TIME_STYLE="posix-iso" to revert to the behavior of 4.1.1 through 4.1.9. ++* 'rm dangling-symlink' doesn't prompt [introduced in 4.1.9] ++* stat: remove support for --secure/-s option and related %S and %C format specs ++* stat: rename --link/-l to --dereference/-L. ++ The old options will continue to work for a while. ++[4.1.9] ++* rm can now remove very deep hierarchies, in spite of any limit on stack size ++* new programs: link, unlink, and stat ++* New ls option: --author (for the Hurd). ++* 'touch -c no-such-file' no longer fails, per POSIX ++[4.1.8] ++* mv no longer mistakenly creates links to preexisting destination files ++ that aren't moved ++[4.1.7] ++* rm: close a hole that would allow a running rm process to be subverted ++[4.1.6] ++* New cp option: --copy-contents. ++* cp -r is now equivalent to cp -R. Use cp -R -L --copy-contents to get the ++ traditional (and rarely desirable) cp -r behavior. ++* ls now accepts --time-style=+FORMAT, where +FORMAT works like date's format ++* The obsolete usage 'touch [-acm] MMDDhhmm[YY] FILE...' is no longer ++ supported on systems conforming to POSIX 1003.1-2001. Use touch -t instead. ++* cp and inter-partition mv no longer give a misleading diagnostic in some ++ unusual cases ++[4.1.5] ++* cp -r no longer preserves symlinks ++* The block size notation is now compatible with SI and with IEC 60027-2. ++ For example, --block-size=1MB now means --block-size=1000000, ++ whereas --block-size=1MiB now means --block-size=1048576. ++ A missing 'B' (e.g. '1M') has the same meaning as before. ++ A trailing 'B' now means decimal, not binary; this is a silent change. ++ The nonstandard 'D' suffix (e.g. '1MD') is now obsolescent. ++* -H or --si now outputs the trailing 'B', for consistency with the above. ++* Programs now output trailing 'K' (not 'k') to mean 1024, as per IEC 60027-2. ++* New df, du short option -B is short for --block-size. ++* You can omit an integer '1' before a block size suffix, ++ e.g. 'df -BG' is equivalent to 'df -B 1G' and to 'df --block-size=1G'. ++* The following options are now obsolescent, as their names are ++ incompatible with IEC 60027-2: ++ df, du: -m or --megabytes (use -BM or --block-size=1M) ++ df, du, ls: --kilobytes (use --block-size=1K) ++[4.1.4] ++* df --local no longer lists smbfs file systems whose name starts with // ++* dd now detects the Linux/tape/lseek bug at run time and warns about it. ++[4.1.3] ++* ls -R once again outputs a blank line between per-directory groups of files. ++ This was broken by the cycle-detection change in 4.1.1. ++* dd once again uses 'lseek' on character devices like /dev/mem and /dev/kmem. ++ On systems with the linux kernel (at least up to 2.4.16), dd must still ++ resort to emulating 'skip=N' behavior using reads on tape devices, because ++ lseek has no effect, yet appears to succeed. This may be a kernel bug. ++[4.1.2] ++* cp no longer fails when two or more source files are the same; ++ now it just gives a warning and doesn't copy the file the second time. ++ E.g., cp a a d/ produces this: ++ cp: warning: source file `a' specified more than once ++* chmod would set the wrong bit when given symbolic mode strings like ++ these: g=o, o=g, o=u. E.g., 'chmod a=,o=w,ug=o f' would give a mode ++ of --w-r---w- rather than --w--w--w-. ++[4.1.1] ++* mv (likewise for cp), now fails rather than silently clobbering one of ++ the source files in the following example: ++ rm -rf a b c; mkdir a b c; touch a/f b/f; mv a/f b/f c ++* ls -R detects directory cycles, per POSIX. It warns and doesn't infloop. ++* cp's -P option now means the same as --no-dereference, per POSIX. ++ Use --parents to get the old meaning. ++* When copying with the -H and -L options, cp can preserve logical ++ links between source files with --preserve=links ++* cp accepts new options: ++ --preserve[={mode,ownership,timestamps,links,all}] ++ --no-preserve={mode,ownership,timestamps,links,all} ++* cp's -p and --preserve options remain unchanged and are equivalent ++ to '--preserve=mode,ownership,timestamps' ++* mv and cp accept a new option: --reply={yes,no,query}; provides a consistent ++ mechanism to control whether one is prompted about certain existing ++ destination files. Note that cp's and mv's -f options don't have the ++ same meaning: cp's -f option no longer merely turns off '-i'. ++* remove portability limitations (e.g., PATH_MAX on the Hurd, fixes for ++ 64-bit systems) ++* mv now prompts before overwriting an existing, unwritable destination file ++ when stdin is a tty, unless --force (-f) is specified, as per POSIX. ++* mv: fix the bug whereby 'mv -uf source dest' would delete source, ++ even though it's older than dest. ++* chown's --from=CURRENT_OWNER:CURRENT_GROUP option now works ++* cp now ensures that the set-user-ID and set-group-ID bits are cleared for ++ the destination file when when copying and not preserving permissions. ++* 'ln -f --backup k k' gives a clearer diagnostic ++* ls no longer truncates user names or group names that are longer ++ than 8 characters. ++* ls's new --dereference-command-line option causes it to dereference ++ symbolic links on the command-line only. It is the default unless ++ one of the -d, -F, or -l options are given. ++* ls -H now means the same as ls --dereference-command-line, as per POSIX. ++* ls -g now acts like ls -l, except it does not display owner, as per POSIX. ++* ls -n now implies -l, as per POSIX. ++* ls can now display dates and times in one of four time styles: ++ ++ - The 'full-iso' time style gives full ISO-style time stamps like ++ '2001-05-14 23:45:56.477817180 -0700'. ++ - The 'iso' time style gives ISO-style time stamps like '2001-05-14 ' ++ and '05-14 23:45'. ++ - The 'locale' time style gives locale-dependent time stamps like ++ 'touko 14 2001' and 'touko 14 23:45' (in a Finnish locale). ++ - The 'posix-iso' time style gives traditional POSIX-locale ++ time stamps like 'May 14 2001' and 'May 14 23:45' unless the user ++ specifies a non-POSIX locale, in which case it uses ISO-style dates. ++ This is the default. ++ ++ You can specify a time style with an option like --time-style='iso' ++ or with an environment variable like TIME_STYLE='iso'. GNU Emacs 21 ++ and later can parse ISO dates, but older Emacs versions cannot, so ++ if you are using an older version of Emacs outside the default POSIX ++ locale, you may need to set TIME_STYLE="locale". ++ ++* --full-time is now an alias for "-l --time-style=full-iso". ++ ++ ++======================================================================== ++Here are the NEWS entries made from sh-utils-2.0 until the ++point at which the packages merged to form the coreutils: ++ ++ [2.0.15] ++* date no longer accepts e.g., September 31 in the MMDDhhmm syntax ++* fix a bug in this package's .m4 files and in configure.ac ++ [2.0.14] ++* nohup's behavior is changed as follows, to conform to POSIX 1003.1-2001: ++ - nohup no longer adjusts scheduling priority; use "nice" for that. ++ - nohup now redirects stderr to stdout, if stderr is not a terminal. ++ - nohup exit status is now 126 if command was found but not invoked, ++ 127 if nohup failed or if command was not found. ++ [2.0.13] ++* uname and uptime work better on *BSD systems ++* pathchk now exits nonzero for a path with a directory component ++ that specifies a non-directory ++ [2.0.12] ++* kill: new program ++* who accepts new options: --all (-a), --boot (-b), --dead (-d), --login, ++ --process (-p), --runlevel (-r), --short (-s), --time (-t), --users (-u). ++ The -u option now produces POSIX-specified results and is the same as ++ the long option '--users'. --idle is no longer the same as -u. ++* The following changes apply on systems conforming to POSIX 1003.1-2001: ++ - 'date -I' is no longer supported. Instead, use 'date --iso-8601'. ++ - 'nice -NUM' is no longer supported. Instead, use 'nice -n NUM'. ++ [This change was reverted in coreutils 5.3.1.] ++* New 'uname' options -i or --hardware-platform, and -o or --operating-system. ++ 'uname -a' now outputs -i and -o information at the end. ++ New uname option --kernel-version is an alias for -v. ++ Uname option --release has been renamed to --kernel-release, ++ and --sysname has been renamed to --kernel-name; ++ the old options will work for a while, but are no longer documented. ++* 'expr' now uses the LC_COLLATE locale for string comparison, as per POSIX. ++* 'expr' now requires '+' rather than 'quote' to quote tokens; ++ this removes an incompatibility with POSIX. ++* date -d 'last friday' would print a date/time that was one hour off ++ (e.g., 23:00 on *thursday* rather than 00:00 of the preceding friday) ++ when run such that the current time and the target date/time fall on ++ opposite sides of a daylight savings time transition. ++ This problem arose only with relative date strings like 'last monday'. ++ It was not a problem with strings that include absolute dates. ++* factor is twice as fast, for large numbers ++ [2.0.11] ++* setting the date now works properly, even when using -u ++* 'date -f - < /dev/null' no longer dumps core ++* some DOS/Windows portability changes ++ [2.0j] ++* 'date -d DATE' now parses certain relative DATEs correctly ++ [2.0i] ++* fixed a bug introduced in 2.0h that made many programs fail with a ++ 'write error' when invoked with the --version option ++ [2.0h] ++* all programs fail when printing --help or --version output to a full device ++* printf exits nonzero upon write failure ++* yes now detects and terminates upon write failure ++* date --rfc-822 now always emits day and month names from the 'C' locale ++* portability tweaks for Solaris8, Ultrix, and DOS ++ [2.0g] ++* date now handles two-digit years with leading zeros correctly. ++* printf interprets unicode, \uNNNN \UNNNNNNNN, on systems with the ++ required support; from Bruno Haible. ++* stty's rprnt attribute now works on HPUX 10.20 ++* seq's --equal-width option works more portably ++ [2.0f] ++* fix build problems with ut_name vs. ut_user ++ [2.0e] ++* stty: fix long-standing bug that caused test failures on at least HPUX ++ systems when COLUMNS was set to zero ++* still more portability fixes ++* unified lib/: now that directory and most of the configuration framework ++ is common between fileutils, textutils, and sh-utils ++ [2.0d] ++* fix portability problem with sleep vs lib/strtod.c's requirement for -lm ++ [2.0c] ++* fix portability problems with nanosleep.c and with the new code in sleep.c ++ [2.0b] ++* Regenerate lib/Makefile.in so that nanosleep.c is distributed. ++ [2.0a] ++* sleep accepts floating point arguments on command line ++* sleep's clock continues counting down when sleep is suspended ++* when a suspended sleep process is resumed, it continues sleeping if ++ there is any time remaining ++* who once again prints whatever host information it has, even without --lookup ++ ++======================================================================== ++For older NEWS entries for the fileutils, textutils, and sh-utils ++packages, see ./old/*/NEWS. ++ ++ This package began as the union of the following: ++ textutils-2.1, fileutils-4.1.11, sh-utils-2.0.15. ++ ++======================================================================== ++ ++Copyright (C) 2001-2014 Free Software Foundation, Inc. ++ ++Permission is granted to copy, distribute and/or modify this document ++under the terms of the GNU Free Documentation License, Version 1.3 or ++any later version published by the Free Software Foundation; with no ++Invariant Sections, with no Front-Cover Texts, and with no Back-Cover ++Texts. A copy of the license is included in the "GNU Free ++Documentation License" file as part of this distribution. +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/df.c coreutils-8.23/src/df.c +--- coreutils-8.23~/src/df.c 2014-10-29 21:22:40.000000000 -0400 ++++ coreutils-8.23/src/df.c 2014-10-29 21:34:10.173423739 -0400 +@@ -640,13 +640,27 @@ + + if (devlist) + { +- /* ...let the shorter mountdir win. */ +- if ((strchr (me->me_devname, '/') +- && ! strchr (devlist->me->me_devname, '/')) +- || (strlen (devlist->me->me_mountdir) +- > strlen (me->me_mountdir)) +- /* or one overmounted on a different device. */ +- || ! STREQ (devlist->me->me_devname, me->me_devname)) ++ if (me->me_remote && devlist->me->me_remote ++ && ! STREQ (devlist->me->me_devname, me->me_devname)) ++ { ++ /* Don't discard remote entries with different locations, ++ as there may be differing ACLs etc. per remote path, and ++ also these are more likely to be explicitly mounted. */ ++ } ++ else if ((strchr (me->me_devname, '/') ++ /* let "real" devices with '/' in the name win. */ ++ && ! strchr (devlist->me->me_devname, '/')) ++ /* let a shorter mountdir win. */ ++ || (strlen (devlist->me->me_mountdir) ++ > strlen (me->me_mountdir)) ++ /* let an entry overmounted on a new device win... */ ++ || (! STREQ (devlist->me->me_devname, me->me_devname) ++ /* ... but only when matching an existing mnt point, ++ to avoid problematic replacement when given ++ inaccurate mount lists, seen with some chroot ++ environments for example. */ ++ && STREQ (me->me_mountdir, ++ devlist->me->me_mountdir))) + { + /* Discard mount entry for existing device. */ + discard_me = devlist->me; +@@ -698,17 +712,17 @@ + } + + /* Search a mount entry list for device id DEV. +- Return the corresponding device name if found or NULL if not. */ ++ Return the corresponding mount entry if found or NULL if not. */ + +-static char const * _GL_ATTRIBUTE_PURE +-devname_for_dev (dev_t dev) ++static struct mount_entry const * _GL_ATTRIBUTE_PURE ++me_for_dev (dev_t dev) + { + struct devlist *dl = device_list; + + while (dl) + { + if (dl->dev_num == dev) +- return dl->me->me_devname; ++ return dl->me; + dl = dl->next; + } + +@@ -923,12 +937,15 @@ + else if (process_all && show_all_fs) + { + /* Ensure we don't output incorrect stats for over-mounted directories. +- Discard stats when the device name doesn't match. */ ++ Discard stats when the device name doesn't match. Though don't ++ discard when used and current mount entries are both remote due ++ to the possibility of aliased host names or exports. */ + struct stat sb; + if (stat (stat_file, &sb) == 0) + { +- char const * devname = devname_for_dev (sb.st_dev); +- if (devname && ! STREQ (devname, disk)) ++ struct mount_entry const * dev_me = me_for_dev (sb.st_dev); ++ if (dev_me && ! STREQ (dev_me->me_devname, disk) ++ && (! dev_me->me_remote || ! me_remote)) + { + fstype = "-"; + fsu.fsu_blocksize = fsu.fsu_blocks = fsu.fsu_bfree = +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/df.c.orig coreutils-8.23/src/df.c.orig +--- coreutils-8.23~/src/df.c.orig 1969-12-31 19:00:00.000000000 -0500 ++++ coreutils-8.23/src/df.c.orig 2014-10-29 21:22:40.000000000 -0400 +@@ -0,0 +1,1713 @@ ++/* df - summarize free disk space ++ Copyright (C) 1991-2014 Free Software Foundation, Inc. ++ ++ This program is free software: you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation, either version 3 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program. If not, see . */ ++ ++/* Written by David MacKenzie . ++ --human-readable and --megabyte options added by lm@sgi.com. ++ --si and large file support added by eggert@twinsun.com. */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "system.h" ++#include "canonicalize.h" ++#include "error.h" ++#include "fsusage.h" ++#include "human.h" ++#include "mbsalign.h" ++#include "mbswidth.h" ++#include "mountlist.h" ++#include "quote.h" ++#include "find-mount-point.h" ++ ++/* The official name of this program (e.g., no 'g' prefix). */ ++#define PROGRAM_NAME "df" ++ ++#define AUTHORS \ ++ proper_name_utf8 ("Torbjorn Granlund", "Torbj\303\266rn Granlund"), \ ++ proper_name ("David MacKenzie"), \ ++ proper_name ("Paul Eggert") ++ ++/* Filled with device numbers of examined file systems to avoid ++ duplicates in output. */ ++static struct devlist ++{ ++ dev_t dev_num; ++ struct mount_entry *me; ++ struct devlist *next; ++} *device_list; ++ ++/* If true, show even file systems with zero size or ++ uninteresting types. */ ++static bool show_all_fs; ++ ++/* If true, show only local file systems. */ ++static bool show_local_fs; ++ ++/* If true, output data for each file system corresponding to a ++ command line argument -- even if it's a dummy (automounter) entry. */ ++static bool show_listed_fs; ++ ++/* Human-readable options for output. */ ++static int human_output_opts; ++ ++/* The units to use when printing sizes. */ ++static uintmax_t output_block_size; ++ ++/* True if a file system has been processed for output. */ ++static bool file_systems_processed; ++ ++/* If true, invoke the 'sync' system call before getting any usage data. ++ Using this option can make df very slow, especially with many or very ++ busy disks. Note that this may make a difference on some systems -- ++ SunOS 4.1.3, for one. It is *not* necessary on GNU/Linux. */ ++static bool require_sync; ++ ++/* Desired exit status. */ ++static int exit_status; ++ ++/* A file system type to display. */ ++ ++struct fs_type_list ++{ ++ char *fs_name; ++ struct fs_type_list *fs_next; ++}; ++ ++/* Linked list of file system types to display. ++ If 'fs_select_list' is NULL, list all types. ++ This table is generated dynamically from command-line options, ++ rather than hardcoding into the program what it thinks are the ++ valid file system types; let the user specify any file system type ++ they want to, and if there are any file systems of that type, they ++ will be shown. ++ ++ Some file system types: ++ 4.2 4.3 ufs nfs swap ignore io vm efs dbg */ ++ ++static struct fs_type_list *fs_select_list; ++ ++/* Linked list of file system types to omit. ++ If the list is empty, don't exclude any types. */ ++ ++static struct fs_type_list *fs_exclude_list; ++ ++/* Linked list of mounted file systems. */ ++static struct mount_entry *mount_list; ++ ++/* If true, print file system type as well. */ ++static bool print_type; ++ ++/* If true, print a grand total at the end. */ ++static bool print_grand_total; ++ ++/* Grand total data. */ ++static struct fs_usage grand_fsu; ++ ++/* Display modes. */ ++enum ++{ ++ DEFAULT_MODE, ++ INODES_MODE, ++ HUMAN_MODE, ++ POSIX_MODE, ++ OUTPUT_MODE ++}; ++static int header_mode = DEFAULT_MODE; ++ ++/* Displayable fields. */ ++typedef enum ++{ ++ SOURCE_FIELD, /* file system */ ++ FSTYPE_FIELD, /* FS type */ ++ SIZE_FIELD, /* FS size */ ++ USED_FIELD, /* FS size used */ ++ AVAIL_FIELD, /* FS size available */ ++ PCENT_FIELD, /* percent used */ ++ ITOTAL_FIELD, /* inode total */ ++ IUSED_FIELD, /* inodes used */ ++ IAVAIL_FIELD, /* inodes available */ ++ IPCENT_FIELD, /* inodes used in percent */ ++ TARGET_FIELD, /* mount point */ ++ FILE_FIELD, /* specified file name */ ++ INVALID_FIELD /* validation marker */ ++} display_field_t; ++ ++/* Flag if a field contains a block, an inode or another value. */ ++typedef enum ++{ ++ BLOCK_FLD, /* Block values field */ ++ INODE_FLD, /* Inode values field */ ++ OTHER_FLD /* Neutral field, e.g. target */ ++} field_type_t; ++ ++/* Attributes of a display field. */ ++struct field_data_t ++{ ++ display_field_t field; ++ char const *arg; ++ field_type_t field_type; ++ const char *caption;/* NULL means to use the default header of this field. */ ++ size_t width; /* Auto adjusted (up) widths used to align columns. */ ++ mbs_align_t align; /* Alignment for this field. */ ++ bool used; ++}; ++ ++/* Header strings, minimum width and alignment for the above fields. */ ++static struct field_data_t field_data[] = { ++ [SOURCE_FIELD] = { SOURCE_FIELD, ++ "source", OTHER_FLD, N_("Filesystem"), 14, MBS_ALIGN_LEFT, false }, ++ ++ [FSTYPE_FIELD] = { FSTYPE_FIELD, ++ "fstype", OTHER_FLD, N_("Type"), 4, MBS_ALIGN_LEFT, false }, ++ ++ [SIZE_FIELD] = { SIZE_FIELD, ++ "size", BLOCK_FLD, N_("blocks"), 5, MBS_ALIGN_RIGHT, false }, ++ ++ [USED_FIELD] = { USED_FIELD, ++ "used", BLOCK_FLD, N_("Used"), 5, MBS_ALIGN_RIGHT, false }, ++ ++ [AVAIL_FIELD] = { AVAIL_FIELD, ++ "avail", BLOCK_FLD, N_("Available"), 5, MBS_ALIGN_RIGHT, false }, ++ ++ [PCENT_FIELD] = { PCENT_FIELD, ++ "pcent", BLOCK_FLD, N_("Use%"), 4, MBS_ALIGN_RIGHT, false }, ++ ++ [ITOTAL_FIELD] = { ITOTAL_FIELD, ++ "itotal", INODE_FLD, N_("Inodes"), 5, MBS_ALIGN_RIGHT, false }, ++ ++ [IUSED_FIELD] = { IUSED_FIELD, ++ "iused", INODE_FLD, N_("IUsed"), 5, MBS_ALIGN_RIGHT, false }, ++ ++ [IAVAIL_FIELD] = { IAVAIL_FIELD, ++ "iavail", INODE_FLD, N_("IFree"), 5, MBS_ALIGN_RIGHT, false }, ++ ++ [IPCENT_FIELD] = { IPCENT_FIELD, ++ "ipcent", INODE_FLD, N_("IUse%"), 4, MBS_ALIGN_RIGHT, false }, ++ ++ [TARGET_FIELD] = { TARGET_FIELD, ++ "target", OTHER_FLD, N_("Mounted on"), 0, MBS_ALIGN_LEFT, false }, ++ ++ [FILE_FIELD] = { FILE_FIELD, ++ "file", OTHER_FLD, N_("File"), 0, MBS_ALIGN_LEFT, false } ++}; ++ ++static char const *all_args_string = ++ "source,fstype,itotal,iused,iavail,ipcent,size," ++ "used,avail,pcent,file,target"; ++ ++/* Storage for the definition of output columns. */ ++static struct field_data_t **columns; ++ ++/* The current number of output columns. */ ++static size_t ncolumns; ++ ++/* Field values. */ ++struct field_values_t ++{ ++ uintmax_t input_units; ++ uintmax_t output_units; ++ uintmax_t total; ++ uintmax_t available; ++ bool negate_available; ++ uintmax_t available_to_root; ++ uintmax_t used; ++ bool negate_used; ++}; ++ ++/* Storage for pointers for each string (cell of table). */ ++static char ***table; ++ ++/* The current number of processed rows (including header). */ ++static size_t nrows; ++ ++/* For long options that have no equivalent short option, use a ++ non-character as a pseudo short option, starting with CHAR_MAX + 1. */ ++enum ++{ ++ NO_SYNC_OPTION = CHAR_MAX + 1, ++ SYNC_OPTION, ++ TOTAL_OPTION, ++ OUTPUT_OPTION ++}; ++ ++static struct option const long_options[] = ++{ ++ {"all", no_argument, NULL, 'a'}, ++ {"block-size", required_argument, NULL, 'B'}, ++ {"inodes", no_argument, NULL, 'i'}, ++ {"human-readable", no_argument, NULL, 'h'}, ++ {"si", no_argument, NULL, 'H'}, ++ {"local", no_argument, NULL, 'l'}, ++ {"output", optional_argument, NULL, OUTPUT_OPTION}, ++ {"portability", no_argument, NULL, 'P'}, ++ {"print-type", no_argument, NULL, 'T'}, ++ {"sync", no_argument, NULL, SYNC_OPTION}, ++ {"no-sync", no_argument, NULL, NO_SYNC_OPTION}, ++ {"total", no_argument, NULL, TOTAL_OPTION}, ++ {"type", required_argument, NULL, 't'}, ++ {"exclude-type", required_argument, NULL, 'x'}, ++ {GETOPT_HELP_OPTION_DECL}, ++ {GETOPT_VERSION_OPTION_DECL}, ++ {NULL, 0, NULL, 0} ++}; ++ ++/* Replace problematic chars with '?'. ++ Since only control characters are currently considered, ++ this should work in all encodings. */ ++ ++static char* ++hide_problematic_chars (char *cell) ++{ ++ char *p = cell; ++ while (*p) ++ { ++ if (iscntrl (to_uchar (*p))) ++ *p = '?'; ++ p++; ++ } ++ return cell; ++} ++ ++/* Dynamically allocate a row of pointers in TABLE, which ++ can then be accessed with standard 2D array notation. */ ++ ++static void ++alloc_table_row (void) ++{ ++ nrows++; ++ table = xnrealloc (table, nrows, sizeof (char **)); ++ table[nrows - 1] = xnmalloc (ncolumns, sizeof (char *)); ++} ++ ++/* Output each cell in the table, accounting for the ++ alignment and max width of each column. */ ++ ++static void ++print_table (void) ++{ ++ size_t row; ++ ++ for (row = 0; row < nrows; row++) ++ { ++ size_t col; ++ for (col = 0; col < ncolumns; col++) ++ { ++ char *cell = table[row][col]; ++ ++ /* Note the SOURCE_FIELD used to be displayed on it's own line ++ if (!posix_format && mbswidth (cell) > 20), but that ++ functionality was probably more problematic than helpful, ++ hence changed in commit v8.10-40-g99679ff. */ ++ if (col != 0) ++ putchar (' '); ++ ++ int flags = 0; ++ if (col == ncolumns - 1) /* The last one. */ ++ flags = MBA_NO_RIGHT_PAD; ++ ++ size_t width = columns[col]->width; ++ cell = ambsalign (cell, &width, columns[col]->align, flags); ++ /* When ambsalign fails, output unaligned data. */ ++ fputs (cell ? cell : table[row][col], stdout); ++ free (cell); ++ ++ IF_LINT (free (table[row][col])); ++ } ++ putchar ('\n'); ++ IF_LINT (free (table[row])); ++ } ++ ++ IF_LINT (free (table)); ++} ++ ++/* Dynamically allocate a struct field_t in COLUMNS, which ++ can then be accessed with standard array notation. */ ++ ++static void ++alloc_field (int f, const char *c) ++{ ++ ncolumns++; ++ columns = xnrealloc (columns, ncolumns, sizeof (struct field_data_t *)); ++ columns[ncolumns - 1] = &field_data[f]; ++ if (c != NULL) ++ columns[ncolumns - 1]->caption = c; ++ ++ if (field_data[f].used) ++ assert (!"field used"); ++ ++ /* Mark field as used. */ ++ field_data[f].used = true; ++} ++ ++ ++/* Given a string, ARG, containing a comma-separated list of arguments ++ to the --output option, add the appropriate fields to columns. */ ++static void ++decode_output_arg (char const *arg) ++{ ++ char *arg_writable = xstrdup (arg); ++ char *s = arg_writable; ++ do ++ { ++ /* find next comma */ ++ char *comma = strchr (s, ','); ++ ++ /* If we found a comma, put a NUL in its place and advance. */ ++ if (comma) ++ *comma++ = 0; ++ ++ /* process S. */ ++ display_field_t field = INVALID_FIELD; ++ for (unsigned int i = 0; i < ARRAY_CARDINALITY (field_data); i++) ++ { ++ if (STREQ (field_data[i].arg, s)) ++ { ++ field = i; ++ break; ++ } ++ } ++ if (field == INVALID_FIELD) ++ { ++ error (0, 0, _("option --output: field %s unknown"), quote (s)); ++ usage (EXIT_FAILURE); ++ } ++ ++ if (field_data[field].used) ++ { ++ /* Prevent the fields from being used more than once. */ ++ error (0, 0, _("option --output: field %s used more than once"), ++ quote (field_data[field].arg)); ++ usage (EXIT_FAILURE); ++ } ++ ++ switch (field) ++ { ++ case SOURCE_FIELD: ++ case FSTYPE_FIELD: ++ case USED_FIELD: ++ case PCENT_FIELD: ++ case ITOTAL_FIELD: ++ case IUSED_FIELD: ++ case IAVAIL_FIELD: ++ case IPCENT_FIELD: ++ case TARGET_FIELD: ++ case FILE_FIELD: ++ alloc_field (field, NULL); ++ break; ++ ++ case SIZE_FIELD: ++ alloc_field (field, N_("Size")); ++ break; ++ ++ case AVAIL_FIELD: ++ alloc_field (field, N_("Avail")); ++ break; ++ ++ default: ++ assert (!"invalid field"); ++ } ++ s = comma; ++ } ++ while (s); ++ ++ free (arg_writable); ++} ++ ++/* Get the appropriate columns for the mode. */ ++static void ++get_field_list (void) ++{ ++ switch (header_mode) ++ { ++ case DEFAULT_MODE: ++ alloc_field (SOURCE_FIELD, NULL); ++ if (print_type) ++ alloc_field (FSTYPE_FIELD, NULL); ++ alloc_field (SIZE_FIELD, NULL); ++ alloc_field (USED_FIELD, NULL); ++ alloc_field (AVAIL_FIELD, NULL); ++ alloc_field (PCENT_FIELD, NULL); ++ alloc_field (TARGET_FIELD, NULL); ++ break; ++ ++ case HUMAN_MODE: ++ alloc_field (SOURCE_FIELD, NULL); ++ if (print_type) ++ alloc_field (FSTYPE_FIELD, NULL); ++ ++ alloc_field (SIZE_FIELD, N_("Size")); ++ alloc_field (USED_FIELD, NULL); ++ alloc_field (AVAIL_FIELD, N_("Avail")); ++ alloc_field (PCENT_FIELD, NULL); ++ alloc_field (TARGET_FIELD, NULL); ++ break; ++ ++ case INODES_MODE: ++ alloc_field (SOURCE_FIELD, NULL); ++ if (print_type) ++ alloc_field (FSTYPE_FIELD, NULL); ++ alloc_field (ITOTAL_FIELD, NULL); ++ alloc_field (IUSED_FIELD, NULL); ++ alloc_field (IAVAIL_FIELD, NULL); ++ alloc_field (IPCENT_FIELD, NULL); ++ alloc_field (TARGET_FIELD, NULL); ++ break; ++ ++ case POSIX_MODE: ++ alloc_field (SOURCE_FIELD, NULL); ++ if (print_type) ++ alloc_field (FSTYPE_FIELD, NULL); ++ alloc_field (SIZE_FIELD, NULL); ++ alloc_field (USED_FIELD, NULL); ++ alloc_field (AVAIL_FIELD, NULL); ++ alloc_field (PCENT_FIELD, N_("Capacity")); ++ alloc_field (TARGET_FIELD, NULL); ++ break; ++ ++ case OUTPUT_MODE: ++ if (!ncolumns) ++ { ++ /* Add all fields if --output was given without a field list. */ ++ decode_output_arg (all_args_string); ++ } ++ break; ++ ++ default: ++ assert (!"invalid header_mode"); ++ } ++} ++ ++/* Obtain the appropriate header entries. */ ++ ++static void ++get_header (void) ++{ ++ size_t col; ++ ++ alloc_table_row (); ++ ++ for (col = 0; col < ncolumns; col++) ++ { ++ char *cell = NULL; ++ char const *header = _(columns[col]->caption); ++ ++ if (columns[col]->field == SIZE_FIELD ++ && (header_mode == DEFAULT_MODE ++ || (header_mode == OUTPUT_MODE ++ && !(human_output_opts & human_autoscale)))) ++ { ++ char buf[LONGEST_HUMAN_READABLE + 1]; ++ ++ int opts = (human_suppress_point_zero ++ | human_autoscale | human_SI ++ | (human_output_opts ++ & (human_group_digits | human_base_1024 | human_B))); ++ ++ /* Prefer the base that makes the human-readable value more exact, ++ if there is a difference. */ ++ ++ uintmax_t q1000 = output_block_size; ++ uintmax_t q1024 = output_block_size; ++ bool divisible_by_1000; ++ bool divisible_by_1024; ++ ++ do ++ { ++ divisible_by_1000 = q1000 % 1000 == 0; q1000 /= 1000; ++ divisible_by_1024 = q1024 % 1024 == 0; q1024 /= 1024; ++ } ++ while (divisible_by_1000 & divisible_by_1024); ++ ++ if (divisible_by_1000 < divisible_by_1024) ++ opts |= human_base_1024; ++ if (divisible_by_1024 < divisible_by_1000) ++ opts &= ~human_base_1024; ++ if (! (opts & human_base_1024)) ++ opts |= human_B; ++ ++ char *num = human_readable (output_block_size, buf, opts, 1, 1); ++ ++ /* Reset the header back to the default in OUTPUT_MODE. */ ++ header = _("blocks"); ++ ++ /* TRANSLATORS: this is the "1K-blocks" header in "df" output. */ ++ if (asprintf (&cell, _("%s-%s"), num, header) == -1) ++ cell = NULL; ++ } ++ else if (header_mode == POSIX_MODE && columns[col]->field == SIZE_FIELD) ++ { ++ char buf[INT_BUFSIZE_BOUND (uintmax_t)]; ++ char *num = umaxtostr (output_block_size, buf); ++ ++ /* TRANSLATORS: this is the "1024-blocks" header in "df -P". */ ++ if (asprintf (&cell, _("%s-%s"), num, header) == -1) ++ cell = NULL; ++ } ++ else ++ cell = strdup (header); ++ ++ if (!cell) ++ xalloc_die (); ++ ++ hide_problematic_chars (cell); ++ ++ table[nrows - 1][col] = cell; ++ ++ columns[col]->width = MAX (columns[col]->width, mbswidth (cell, 0)); ++ } ++} ++ ++/* Is FSTYPE a type of file system that should be listed? */ ++ ++static bool _GL_ATTRIBUTE_PURE ++selected_fstype (const char *fstype) ++{ ++ const struct fs_type_list *fsp; ++ ++ if (fs_select_list == NULL || fstype == NULL) ++ return true; ++ for (fsp = fs_select_list; fsp; fsp = fsp->fs_next) ++ if (STREQ (fstype, fsp->fs_name)) ++ return true; ++ return false; ++} ++ ++/* Is FSTYPE a type of file system that should be omitted? */ ++ ++static bool _GL_ATTRIBUTE_PURE ++excluded_fstype (const char *fstype) ++{ ++ const struct fs_type_list *fsp; ++ ++ if (fs_exclude_list == NULL || fstype == NULL) ++ return false; ++ for (fsp = fs_exclude_list; fsp; fsp = fsp->fs_next) ++ if (STREQ (fstype, fsp->fs_name)) ++ return true; ++ return false; ++} ++ ++/* Filter mount list by skipping duplicate entries. ++ In the case of duplicates - based on the device number - the mount entry ++ with a '/' in its me_devname (i.e. not pseudo name like tmpfs) wins. ++ If both have a real devname (e.g. bind mounts), then that with the shorter ++ me_mountdir wins. With DEVICES_ONLY == true (set with df -a), only update ++ the global device_list, rather than filtering the global mount_list. */ ++ ++static void ++filter_mount_list (bool devices_only) ++{ ++ struct mount_entry *me; ++ ++ /* Sort all 'wanted' entries into the list device_list. */ ++ for (me = mount_list; me;) ++ { ++ struct stat buf; ++ struct devlist *devlist; ++ struct mount_entry *discard_me = NULL; ++ ++ /* TODO: On Linux we might avoid this stat() and another in get_dev() ++ by using the device IDs available from /proc/self/mountinfo. ++ read_file_system_list() could populate me_dev from those ++ for efficiency and accuracy. */ ++ if (-1 == stat (me->me_mountdir, &buf)) ++ { ++ /* Stat failed - add ME to be able to complain about it later. */ ++ buf.st_dev = me->me_dev; ++ } ++ else ++ { ++ /* If we've already seen this device... */ ++ for (devlist = device_list; devlist; devlist = devlist->next) ++ if (devlist->dev_num == buf.st_dev) ++ break; ++ ++ if (devlist) ++ { ++ /* ...let the shorter mountdir win. */ ++ if ((strchr (me->me_devname, '/') ++ && ! strchr (devlist->me->me_devname, '/')) ++ || (strlen (devlist->me->me_mountdir) ++ > strlen (me->me_mountdir)) ++ /* or one overmounted on a different device. */ ++ || ! STREQ (devlist->me->me_devname, me->me_devname)) ++ { ++ /* Discard mount entry for existing device. */ ++ discard_me = devlist->me; ++ devlist->me = me; ++ } ++ else ++ { ++ /* Discard mount entry currently being processed. */ ++ discard_me = me; ++ } ++ ++ } ++ } ++ ++ if (discard_me) ++ { ++ me = me->me_next; ++ if (! devices_only) ++ free_mount_entry (discard_me); ++ } ++ else ++ { ++ /* Add the device number to the global list devlist. */ ++ devlist = xmalloc (sizeof *devlist); ++ devlist->me = me; ++ devlist->dev_num = buf.st_dev; ++ devlist->next = device_list; ++ device_list = devlist; ++ ++ me = me->me_next; ++ } ++ } ++ ++ /* Finally rebuild the mount_list from the devlist. */ ++ if (! devices_only) { ++ mount_list = NULL; ++ while (device_list) ++ { ++ /* Add the mount entry. */ ++ me = device_list->me; ++ me->me_next = mount_list; ++ mount_list = me; ++ /* Free devlist entry and advance. */ ++ struct devlist *devlist = device_list->next; ++ free (device_list); ++ device_list = devlist; ++ } ++ } ++} ++ ++/* Search a mount entry list for device id DEV. ++ Return the corresponding device name if found or NULL if not. */ ++ ++static char const * _GL_ATTRIBUTE_PURE ++devname_for_dev (dev_t dev) ++{ ++ struct devlist *dl = device_list; ++ ++ while (dl) ++ { ++ if (dl->dev_num == dev) ++ return dl->me->me_devname; ++ dl = dl->next; ++ } ++ ++ return NULL; ++} ++ ++/* Return true if N is a known integer value. On many file systems, ++ UINTMAX_MAX represents an unknown value; on AIX, UINTMAX_MAX - 1 ++ represents unknown. Use a rule that works on AIX file systems, and ++ that almost-always works on other types. */ ++static bool ++known_value (uintmax_t n) ++{ ++ return n < UINTMAX_MAX - 1; ++} ++ ++/* Like human_readable (N, BUF, human_output_opts, INPUT_UNITS, OUTPUT_UNITS), ++ except: ++ ++ - If NEGATIVE, then N represents a negative number, ++ expressed in two's complement. ++ - Otherwise, return "-" if N is unknown. */ ++ ++static char const * ++df_readable (bool negative, uintmax_t n, char *buf, ++ uintmax_t input_units, uintmax_t output_units) ++{ ++ if (! known_value (n) && !negative) ++ return "-"; ++ else ++ { ++ char *p = human_readable (negative ? -n : n, buf + negative, ++ human_output_opts, input_units, output_units); ++ if (negative) ++ *--p = '-'; ++ return p; ++ } ++} ++ ++/* Logical equivalence */ ++#define LOG_EQ(a, b) (!(a) == !(b)) ++ ++/* Add integral value while using uintmax_t for value part and separate ++ negation flag. It adds value of SRC and SRC_NEG to DEST and DEST_NEG. ++ The result will be in DEST and DEST_NEG. See df_readable to understand ++ how the negation flag is used. */ ++static void ++add_uint_with_neg_flag (uintmax_t *dest, bool *dest_neg, ++ uintmax_t src, bool src_neg) ++{ ++ if (LOG_EQ (*dest_neg, src_neg)) ++ { ++ *dest += src; ++ return; ++ } ++ ++ if (*dest_neg) ++ *dest = -*dest; ++ ++ if (src_neg) ++ src = -src; ++ ++ if (src < *dest) ++ *dest -= src; ++ else ++ { ++ *dest = src - *dest; ++ *dest_neg = src_neg; ++ } ++ ++ if (*dest_neg) ++ *dest = -*dest; ++} ++ ++/* Return true if S ends in a string that may be a 36-byte UUID, ++ i.e., of the form HHHHHHHH-HHHH-HHHH-HHHH-HHHHHHHHHHHH, where ++ each H is an upper or lower case hexadecimal digit. */ ++static bool _GL_ATTRIBUTE_PURE ++has_uuid_suffix (char const *s) ++{ ++ size_t len = strlen (s); ++ return (36 < len ++ && strspn (s + len - 36, "-0123456789abcdefABCDEF") == 36); ++} ++ ++/* Obtain the block values BV and inode values IV ++ from the file system usage FSU. */ ++static void ++get_field_values (struct field_values_t *bv, ++ struct field_values_t *iv, ++ const struct fs_usage *fsu) ++{ ++ /* Inode values. */ ++ iv->input_units = iv->output_units = 1; ++ iv->total = fsu->fsu_files; ++ iv->available = iv->available_to_root = fsu->fsu_ffree; ++ iv->negate_available = false; ++ ++ iv->used = UINTMAX_MAX; ++ iv->negate_used = false; ++ if (known_value (iv->total) && known_value (iv->available_to_root)) ++ { ++ iv->used = iv->total - iv->available_to_root; ++ iv->negate_used = (iv->total < iv->available_to_root); ++ } ++ ++ /* Block values. */ ++ bv->input_units = fsu->fsu_blocksize; ++ bv->output_units = output_block_size; ++ bv->total = fsu->fsu_blocks; ++ bv->available = fsu->fsu_bavail; ++ bv->available_to_root = fsu->fsu_bfree; ++ bv->negate_available = (fsu->fsu_bavail_top_bit_set ++ && known_value (fsu->fsu_bavail)); ++ ++ bv->used = UINTMAX_MAX; ++ bv->negate_used = false; ++ if (known_value (bv->total) && known_value (bv->available_to_root)) ++ { ++ bv->used = bv->total - bv->available_to_root; ++ bv->negate_used = (bv->total < bv->available_to_root); ++ } ++} ++ ++/* Add block and inode values to grand total. */ ++static void ++add_to_grand_total (struct field_values_t *bv, struct field_values_t *iv) ++{ ++ if (known_value (iv->total)) ++ grand_fsu.fsu_files += iv->total; ++ if (known_value (iv->available)) ++ grand_fsu.fsu_ffree += iv->available; ++ ++ if (known_value (bv->total)) ++ grand_fsu.fsu_blocks += bv->input_units * bv->total; ++ if (known_value (bv->available_to_root)) ++ grand_fsu.fsu_bfree += bv->input_units * bv->available_to_root; ++ if (known_value (bv->available)) ++ add_uint_with_neg_flag (&grand_fsu.fsu_bavail, ++ &grand_fsu.fsu_bavail_top_bit_set, ++ bv->input_units * bv->available, ++ bv->negate_available); ++} ++ ++/* Obtain a space listing for the disk device with absolute file name DISK. ++ If MOUNT_POINT is non-NULL, it is the name of the root of the ++ file system on DISK. ++ If STAT_FILE is non-null, it is the name of a file within the file ++ system that the user originally asked for; this provides better ++ diagnostics, and sometimes it provides better results on networked ++ file systems that give different free-space results depending on ++ where in the file system you probe. ++ If FSTYPE is non-NULL, it is the type of the file system on DISK. ++ If MOUNT_POINT is non-NULL, then DISK may be NULL -- certain systems may ++ not be able to produce statistics in this case. ++ ME_DUMMY and ME_REMOTE are the mount entry flags. ++ Caller must set PROCESS_ALL to true when iterating over all entries, as ++ when df is invoked with no non-option argument. See below for details. */ ++ ++static void ++get_dev (char const *disk, char const *mount_point, char const* file, ++ char const *stat_file, char const *fstype, ++ bool me_dummy, bool me_remote, ++ const struct fs_usage *force_fsu, ++ bool process_all) ++{ ++ if (me_remote && show_local_fs) ++ return; ++ ++ if (me_dummy && !show_all_fs && !show_listed_fs) ++ return; ++ ++ if (!selected_fstype (fstype) || excluded_fstype (fstype)) ++ return; ++ ++ /* Ignore relative MOUNT_POINTs, which are present for example ++ in /proc/mounts on Linux with network namespaces. */ ++ if (!force_fsu && mount_point && ! IS_ABSOLUTE_FILE_NAME (mount_point)) ++ return; ++ ++ /* If MOUNT_POINT is NULL, then the file system is not mounted, and this ++ program reports on the file system that the special file is on. ++ It would be better to report on the unmounted file system, ++ but statfs doesn't do that on most systems. */ ++ if (!stat_file) ++ stat_file = mount_point ? mount_point : disk; ++ ++ struct fs_usage fsu; ++ if (force_fsu) ++ fsu = *force_fsu; ++ else if (get_fs_usage (stat_file, disk, &fsu)) ++ { ++ /* If we can't access a system provided entry due ++ to it not being present (now), or due to permissions, ++ just output placeholder values rather than failing. */ ++ if (process_all && (errno == EACCES || errno == ENOENT)) ++ { ++ if (! show_all_fs) ++ return; ++ ++ fstype = "-"; ++ fsu.fsu_blocksize = fsu.fsu_blocks = fsu.fsu_bfree = ++ fsu.fsu_bavail = fsu.fsu_files = fsu.fsu_ffree = UINTMAX_MAX; ++ } ++ else ++ { ++ error (0, errno, "%s", quote (stat_file)); ++ exit_status = EXIT_FAILURE; ++ return; ++ } ++ } ++ else if (process_all && show_all_fs) ++ { ++ /* Ensure we don't output incorrect stats for over-mounted directories. ++ Discard stats when the device name doesn't match. */ ++ struct stat sb; ++ if (stat (stat_file, &sb) == 0) ++ { ++ char const * devname = devname_for_dev (sb.st_dev); ++ if (devname && ! STREQ (devname, disk)) ++ { ++ fstype = "-"; ++ fsu.fsu_blocksize = fsu.fsu_blocks = fsu.fsu_bfree = ++ fsu.fsu_bavail = fsu.fsu_files = fsu.fsu_ffree = UINTMAX_MAX; ++ } ++ } ++ } ++ ++ if (fsu.fsu_blocks == 0 && !show_all_fs && !show_listed_fs) ++ return; ++ ++ if (! force_fsu) ++ file_systems_processed = true; ++ ++ alloc_table_row (); ++ ++ if (! disk) ++ disk = "-"; /* unknown */ ++ ++ if (! file) ++ file = "-"; /* unspecified */ ++ ++ char *dev_name = xstrdup (disk); ++ char *resolved_dev; ++ ++ /* On some systems, dev_name is a long-named symlink like ++ /dev/disk/by-uuid/828fc648-9f30-43d8-a0b1-f7196a2edb66 pointing to a ++ much shorter and more useful name like /dev/sda1. It may also look ++ like /dev/mapper/luks-828fc648-9f30-43d8-a0b1-f7196a2edb66 and point to ++ /dev/dm-0. When process_all is true and dev_name is a symlink whose ++ name ends with a UUID use the resolved name instead. */ ++ if (process_all ++ && has_uuid_suffix (dev_name) ++ && (resolved_dev = canonicalize_filename_mode (dev_name, CAN_EXISTING))) ++ { ++ free (dev_name); ++ dev_name = resolved_dev; ++ } ++ ++ if (! fstype) ++ fstype = "-"; /* unknown */ ++ ++ struct field_values_t block_values; ++ struct field_values_t inode_values; ++ get_field_values (&block_values, &inode_values, &fsu); ++ ++ /* Add to grand total unless processing grand total line. */ ++ if (print_grand_total && ! force_fsu) ++ add_to_grand_total (&block_values, &inode_values); ++ ++ size_t col; ++ for (col = 0; col < ncolumns; col++) ++ { ++ char buf[LONGEST_HUMAN_READABLE + 2]; ++ char *cell; ++ ++ struct field_values_t *v; ++ switch (columns[col]->field_type) ++ { ++ case BLOCK_FLD: ++ v = &block_values; ++ break; ++ case INODE_FLD: ++ v = &inode_values; ++ break; ++ case OTHER_FLD: ++ v = NULL; ++ break; ++ default: ++ v = NULL; /* Avoid warnings where assert() is not __noreturn__. */ ++ assert (!"bad field_type"); ++ } ++ ++ switch (columns[col]->field) ++ { ++ case SOURCE_FIELD: ++ cell = xstrdup (dev_name); ++ break; ++ ++ case FSTYPE_FIELD: ++ cell = xstrdup (fstype); ++ break; ++ ++ case SIZE_FIELD: ++ case ITOTAL_FIELD: ++ cell = xstrdup (df_readable (false, v->total, buf, ++ v->input_units, v->output_units)); ++ break; ++ ++ case USED_FIELD: ++ case IUSED_FIELD: ++ cell = xstrdup (df_readable (v->negate_used, v->used, buf, ++ v->input_units, v->output_units)); ++ break; ++ ++ case AVAIL_FIELD: ++ case IAVAIL_FIELD: ++ cell = xstrdup (df_readable (v->negate_available, v->available, buf, ++ v->input_units, v->output_units)); ++ break; ++ ++ case PCENT_FIELD: ++ case IPCENT_FIELD: ++ { ++ double pct = -1; ++ if (! known_value (v->used) || ! known_value (v->available)) ++ ; ++ else if (!v->negate_used ++ && v->used <= TYPE_MAXIMUM (uintmax_t) / 100 ++ && v->used + v->available != 0 ++ && (v->used + v->available < v->used) ++ == v->negate_available) ++ { ++ uintmax_t u100 = v->used * 100; ++ uintmax_t nonroot_total = v->used + v->available; ++ pct = u100 / nonroot_total + (u100 % nonroot_total != 0); ++ } ++ else ++ { ++ /* The calculation cannot be done easily with integer ++ arithmetic. Fall back on floating point. This can suffer ++ from minor rounding errors, but doing it exactly requires ++ multiple precision arithmetic, and it's not worth the ++ aggravation. */ ++ double u = v->negate_used ? - (double) - v->used : v->used; ++ double a = v->negate_available ++ ? - (double) - v->available : v->available; ++ double nonroot_total = u + a; ++ if (nonroot_total) ++ { ++ long int lipct = pct = u * 100 / nonroot_total; ++ double ipct = lipct; ++ ++ /* Like 'pct = ceil (dpct);', but avoid ceil so that ++ the math library needn't be linked. */ ++ if (ipct - 1 < pct && pct <= ipct + 1) ++ pct = ipct + (ipct < pct); ++ } ++ } ++ ++ if (0 <= pct) ++ { ++ if (asprintf (&cell, "%.0f%%", pct) == -1) ++ cell = NULL; ++ } ++ else ++ cell = strdup ("-"); ++ ++ if (!cell) ++ xalloc_die (); ++ ++ break; ++ } ++ ++ case FILE_FIELD: ++ cell = xstrdup (file); ++ break; ++ ++ case TARGET_FIELD: ++#ifdef HIDE_AUTOMOUNT_PREFIX ++ /* Don't print the first directory name in MOUNT_POINT if it's an ++ artifact of an automounter. This is a bit too aggressive to be ++ the default. */ ++ if (STRNCMP_LIT (mount_point, "/auto/") == 0) ++ mount_point += 5; ++ else if (STRNCMP_LIT (mount_point, "/tmp_mnt/") == 0) ++ mount_point += 8; ++#endif ++ cell = xstrdup (mount_point); ++ break; ++ ++ default: ++ assert (!"unhandled field"); ++ } ++ ++ if (!cell) ++ assert (!"empty cell"); ++ ++ hide_problematic_chars (cell); ++ columns[col]->width = MAX (columns[col]->width, mbswidth (cell, 0)); ++ table[nrows - 1][col] = cell; ++ } ++ free (dev_name); ++} ++ ++/* Scan the mount list returning the _last_ device found for MOUNT. ++ NULL is returned if MOUNT not found. The result is malloced. */ ++static char * ++last_device_for_mount (char const* mount) ++{ ++ struct mount_entry const *me; ++ struct mount_entry const *le = NULL; ++ ++ for (me = mount_list; me; me = me->me_next) ++ { ++ if (STREQ (me->me_mountdir, mount)) ++ le = me; ++ } ++ ++ if (le) ++ { ++ char *devname = le->me_devname; ++ char *canon_dev = canonicalize_file_name (devname); ++ if (canon_dev && IS_ABSOLUTE_FILE_NAME (canon_dev)) ++ return canon_dev; ++ free (canon_dev); ++ return xstrdup (le->me_devname); ++ } ++ else ++ return NULL; ++} ++ ++/* If DISK corresponds to a mount point, show its usage ++ and return true. Otherwise, return false. */ ++static bool ++get_disk (char const *disk) ++{ ++ struct mount_entry const *me; ++ struct mount_entry const *best_match = NULL; ++ bool best_match_accessible = false; ++ bool eclipsed_device = false; ++ char const *file = disk; ++ ++ char *resolved = canonicalize_file_name (disk); ++ if (resolved && IS_ABSOLUTE_FILE_NAME (resolved)) ++ disk = resolved; ++ ++ size_t best_match_len = SIZE_MAX; ++ for (me = mount_list; me; me = me->me_next) ++ { ++ /* TODO: Should cache canon_dev in the mount_entry struct. */ ++ char *devname = me->me_devname; ++ char *canon_dev = canonicalize_file_name (me->me_devname); ++ if (canon_dev && IS_ABSOLUTE_FILE_NAME (canon_dev)) ++ devname = canon_dev; ++ ++ if (STREQ (disk, devname)) ++ { ++ char *last_device = last_device_for_mount (me->me_mountdir); ++ eclipsed_device = last_device && ! STREQ (last_device, devname); ++ size_t len = strlen (me->me_mountdir); ++ ++ if (! eclipsed_device ++ && (! best_match_accessible || len < best_match_len)) ++ { ++ struct stat disk_stats; ++ bool this_match_accessible = false; ++ ++ if (stat (me->me_mountdir, &disk_stats) == 0) ++ best_match_accessible = this_match_accessible = true; ++ ++ if (this_match_accessible ++ || (! best_match_accessible && len < best_match_len)) ++ { ++ best_match = me; ++ if (len == 1) /* Traditional root. */ ++ { ++ free (last_device); ++ free (canon_dev); ++ break; ++ } ++ else ++ best_match_len = len; ++ } ++ } ++ ++ free (last_device); ++ } ++ ++ free (canon_dev); ++ } ++ ++ free (resolved); ++ ++ if (best_match) ++ { ++ get_dev (best_match->me_devname, best_match->me_mountdir, file, NULL, ++ best_match->me_type, best_match->me_dummy, ++ best_match->me_remote, NULL, false); ++ return true; ++ } ++ else if (eclipsed_device) ++ { ++ error (0, 0, _("cannot access %s: over-mounted by another device"), ++ quote (file)); ++ exit_status = EXIT_FAILURE; ++ return true; ++ } ++ ++ return false; ++} ++ ++/* Figure out which device file or directory POINT is mounted on ++ and show its disk usage. ++ STATP must be the result of 'stat (POINT, STATP)'. */ ++static void ++get_point (const char *point, const struct stat *statp) ++{ ++ struct stat disk_stats; ++ struct mount_entry *me; ++ struct mount_entry const *best_match = NULL; ++ ++ /* Calculate the real absolute file name for POINT, and use that to find ++ the mount point. This avoids statting unavailable mount points, ++ which can hang df. */ ++ char *resolved = canonicalize_file_name (point); ++ if (resolved && resolved[0] == '/') ++ { ++ size_t resolved_len = strlen (resolved); ++ size_t best_match_len = 0; ++ ++ for (me = mount_list; me; me = me->me_next) ++ { ++ if (!STREQ (me->me_type, "lofs") ++ && (!best_match || best_match->me_dummy || !me->me_dummy)) ++ { ++ size_t len = strlen (me->me_mountdir); ++ if (best_match_len <= len && len <= resolved_len ++ && (len == 1 /* root file system */ ++ || ((len == resolved_len || resolved[len] == '/') ++ && STREQ_LEN (me->me_mountdir, resolved, len)))) ++ { ++ best_match = me; ++ best_match_len = len; ++ } ++ } ++ } ++ } ++ free (resolved); ++ if (best_match ++ && (stat (best_match->me_mountdir, &disk_stats) != 0 ++ || disk_stats.st_dev != statp->st_dev)) ++ best_match = NULL; ++ ++ if (! best_match) ++ for (me = mount_list; me; me = me->me_next) ++ { ++ if (me->me_dev == (dev_t) -1) ++ { ++ if (stat (me->me_mountdir, &disk_stats) == 0) ++ me->me_dev = disk_stats.st_dev; ++ else ++ { ++ /* Report only I/O errors. Other errors might be ++ caused by shadowed mount points, which means POINT ++ can't possibly be on this file system. */ ++ if (errno == EIO) ++ { ++ error (0, errno, "%s", quote (me->me_mountdir)); ++ exit_status = EXIT_FAILURE; ++ } ++ ++ /* So we won't try and fail repeatedly. */ ++ me->me_dev = (dev_t) -2; ++ } ++ } ++ ++ if (statp->st_dev == me->me_dev ++ && !STREQ (me->me_type, "lofs") ++ && (!best_match || best_match->me_dummy || !me->me_dummy)) ++ { ++ /* Skip bogus mtab entries. */ ++ if (stat (me->me_mountdir, &disk_stats) != 0 ++ || disk_stats.st_dev != me->me_dev) ++ me->me_dev = (dev_t) -2; ++ else ++ best_match = me; ++ } ++ } ++ ++ if (best_match) ++ get_dev (best_match->me_devname, best_match->me_mountdir, point, point, ++ best_match->me_type, best_match->me_dummy, best_match->me_remote, ++ NULL, false); ++ else ++ { ++ /* We couldn't find the mount entry corresponding to POINT. Go ahead and ++ print as much info as we can; methods that require the device to be ++ present will fail at a later point. */ ++ ++ /* Find the actual mount point. */ ++ char *mp = find_mount_point (point, statp); ++ if (mp) ++ { ++ get_dev (NULL, mp, point, NULL, NULL, false, false, NULL, false); ++ free (mp); ++ } ++ } ++} ++ ++/* Determine what kind of node NAME is and show the disk usage ++ for it. STATP is the results of 'stat' on NAME. */ ++ ++static void ++get_entry (char const *name, struct stat const *statp) ++{ ++ if ((S_ISBLK (statp->st_mode) || S_ISCHR (statp->st_mode)) ++ && get_disk (name)) ++ return; ++ ++ get_point (name, statp); ++} ++ ++/* Show all mounted file systems, except perhaps those that are of ++ an unselected type or are empty. */ ++ ++static void ++get_all_entries (void) ++{ ++ struct mount_entry *me; ++ ++ filter_mount_list (show_all_fs); ++ ++ for (me = mount_list; me; me = me->me_next) ++ get_dev (me->me_devname, me->me_mountdir, NULL, NULL, me->me_type, ++ me->me_dummy, me->me_remote, NULL, true); ++} ++ ++/* Add FSTYPE to the list of file system types to display. */ ++ ++static void ++add_fs_type (const char *fstype) ++{ ++ struct fs_type_list *fsp; ++ ++ fsp = xmalloc (sizeof *fsp); ++ fsp->fs_name = (char *) fstype; ++ fsp->fs_next = fs_select_list; ++ fs_select_list = fsp; ++} ++ ++/* Add FSTYPE to the list of file system types to be omitted. */ ++ ++static void ++add_excluded_fs_type (const char *fstype) ++{ ++ struct fs_type_list *fsp; ++ ++ fsp = xmalloc (sizeof *fsp); ++ fsp->fs_name = (char *) fstype; ++ fsp->fs_next = fs_exclude_list; ++ fs_exclude_list = fsp; ++} ++ ++void ++usage (int status) ++{ ++ if (status != EXIT_SUCCESS) ++ emit_try_help (); ++ else ++ { ++ printf (_("Usage: %s [OPTION]... [FILE]...\n"), program_name); ++ fputs (_("\ ++Show information about the file system on which each FILE resides,\n\ ++or all file systems by default.\n\ ++"), stdout); ++ ++ emit_mandatory_arg_note (); ++ ++ /* TRANSLATORS: The thousands and decimal separators are best ++ adjusted to an appropriate default for your locale. */ ++ fputs (_("\ ++ -a, --all include dummy file systems\n\ ++ -B, --block-size=SIZE scale sizes by SIZE before printing them; e.g.,\n\ ++ '-BM' prints sizes in units of 1,048,576 bytes;\n\ ++ see SIZE format below\n\ ++ --total produce a grand total\n\ ++ -h, --human-readable print sizes in powers of 1024 (e.g., 1023M)\n\ ++ -H, --si print sizes in powers of 1000 (e.g., 1.1G)\n\ ++"), stdout); ++ fputs (_("\ ++ -i, --inodes list inode information instead of block usage\n\ ++ -k like --block-size=1K\n\ ++ -l, --local limit listing to local file systems\n\ ++ --no-sync do not invoke sync before getting usage info (default)\ ++\n\ ++"), stdout); ++ fputs (_("\ ++ --output[=FIELD_LIST] use the output format defined by FIELD_LIST,\n\ ++ or print all fields if FIELD_LIST is omitted.\n\ ++ -P, --portability use the POSIX output format\n\ ++ --sync invoke sync before getting usage info\n\ ++ -t, --type=TYPE limit listing to file systems of type TYPE\n\ ++ -T, --print-type print file system type\n\ ++ -x, --exclude-type=TYPE limit listing to file systems not of type TYPE\n\ ++ -v (ignored)\n\ ++"), stdout); ++ fputs (HELP_OPTION_DESCRIPTION, stdout); ++ fputs (VERSION_OPTION_DESCRIPTION, stdout); ++ emit_blocksize_note ("DF"); ++ emit_size_note (); ++ fputs (_("\n\ ++FIELD_LIST is a comma-separated list of columns to be included. Valid\n\ ++field names are: 'source', 'fstype', 'itotal', 'iused', 'iavail', 'ipcent',\n\ ++'size', 'used', 'avail', 'pcent', 'file' and 'target' (see info page).\n\ ++"), stdout); ++ emit_ancillary_info (); ++ } ++ exit (status); ++} ++ ++int ++main (int argc, char **argv) ++{ ++ struct stat *stats IF_LINT ( = 0); ++ ++ initialize_main (&argc, &argv); ++ set_program_name (argv[0]); ++ setlocale (LC_ALL, ""); ++ bindtextdomain (PACKAGE, LOCALEDIR); ++ textdomain (PACKAGE); ++ ++ atexit (close_stdout); ++ ++ fs_select_list = NULL; ++ fs_exclude_list = NULL; ++ show_all_fs = false; ++ show_listed_fs = false; ++ human_output_opts = -1; ++ print_type = false; ++ file_systems_processed = false; ++ exit_status = EXIT_SUCCESS; ++ print_grand_total = false; ++ grand_fsu.fsu_blocksize = 1; ++ ++ /* If true, use the POSIX output format. */ ++ bool posix_format = false; ++ ++ const char *msg_mut_excl = _("options %s and %s are mutually exclusive"); ++ ++ while (true) ++ { ++ int oi = -1; ++ int c = getopt_long (argc, argv, "aB:iF:hHklmPTt:vx:", long_options, ++ &oi); ++ if (c == -1) ++ break; ++ ++ switch (c) ++ { ++ case 'a': ++ show_all_fs = true; ++ break; ++ case 'B': ++ { ++ enum strtol_error e = human_options (optarg, &human_output_opts, ++ &output_block_size); ++ if (e != LONGINT_OK) ++ xstrtol_fatal (e, oi, c, long_options, optarg); ++ } ++ break; ++ case 'i': ++ if (header_mode == OUTPUT_MODE) ++ { ++ error (0, 0, msg_mut_excl, "-i", "--output"); ++ usage (EXIT_FAILURE); ++ } ++ header_mode = INODES_MODE; ++ break; ++ case 'h': ++ human_output_opts = human_autoscale | human_SI | human_base_1024; ++ output_block_size = 1; ++ break; ++ case 'H': ++ human_output_opts = human_autoscale | human_SI; ++ output_block_size = 1; ++ break; ++ case 'k': ++ human_output_opts = 0; ++ output_block_size = 1024; ++ break; ++ case 'l': ++ show_local_fs = true; ++ break; ++ case 'm': /* obsolescent, exists for BSD compatibility */ ++ human_output_opts = 0; ++ output_block_size = 1024 * 1024; ++ break; ++ case 'T': ++ if (header_mode == OUTPUT_MODE) ++ { ++ error (0, 0, msg_mut_excl, "-T", "--output"); ++ usage (EXIT_FAILURE); ++ } ++ print_type = true; ++ break; ++ case 'P': ++ if (header_mode == OUTPUT_MODE) ++ { ++ error (0, 0, msg_mut_excl, "-P", "--output"); ++ usage (EXIT_FAILURE); ++ } ++ posix_format = true; ++ break; ++ case SYNC_OPTION: ++ require_sync = true; ++ break; ++ case NO_SYNC_OPTION: ++ require_sync = false; ++ break; ++ ++ case 'F': ++ /* Accept -F as a synonym for -t for compatibility with Solaris. */ ++ case 't': ++ add_fs_type (optarg); ++ break; ++ ++ case 'v': /* For SysV compatibility. */ ++ /* ignore */ ++ break; ++ case 'x': ++ add_excluded_fs_type (optarg); ++ break; ++ ++ case OUTPUT_OPTION: ++ if (header_mode == INODES_MODE) ++ { ++ error (0, 0, msg_mut_excl, "-i", "--output"); ++ usage (EXIT_FAILURE); ++ } ++ if (posix_format && header_mode == DEFAULT_MODE) ++ { ++ error (0, 0, msg_mut_excl, "-P", "--output"); ++ usage (EXIT_FAILURE); ++ } ++ if (print_type) ++ { ++ error (0, 0, msg_mut_excl, "-T", "--output"); ++ usage (EXIT_FAILURE); ++ } ++ header_mode = OUTPUT_MODE; ++ if (optarg) ++ decode_output_arg (optarg); ++ break; ++ ++ case TOTAL_OPTION: ++ print_grand_total = true; ++ break; ++ ++ case_GETOPT_HELP_CHAR; ++ case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS); ++ ++ default: ++ usage (EXIT_FAILURE); ++ } ++ } ++ ++ if (human_output_opts == -1) ++ { ++ if (posix_format) ++ { ++ human_output_opts = 0; ++ output_block_size = (getenv ("POSIXLY_CORRECT") ? 512 : 1024); ++ } ++ else ++ human_options (getenv ("DF_BLOCK_SIZE"), ++ &human_output_opts, &output_block_size); ++ } ++ ++ if (header_mode == INODES_MODE || header_mode == OUTPUT_MODE) ++ ; ++ else if (human_output_opts & human_autoscale) ++ header_mode = HUMAN_MODE; ++ else if (posix_format) ++ header_mode = POSIX_MODE; ++ ++ /* Fail if the same file system type was both selected and excluded. */ ++ { ++ bool match = false; ++ struct fs_type_list *fs_incl; ++ for (fs_incl = fs_select_list; fs_incl; fs_incl = fs_incl->fs_next) ++ { ++ struct fs_type_list *fs_excl; ++ for (fs_excl = fs_exclude_list; fs_excl; fs_excl = fs_excl->fs_next) ++ { ++ if (STREQ (fs_incl->fs_name, fs_excl->fs_name)) ++ { ++ error (0, 0, ++ _("file system type %s both selected and excluded"), ++ quote (fs_incl->fs_name)); ++ match = true; ++ break; ++ } ++ } ++ } ++ if (match) ++ exit (EXIT_FAILURE); ++ } ++ ++ if (optind < argc) ++ { ++ int i; ++ ++ /* Open each of the given entries to make sure any corresponding ++ partition is automounted. This must be done before reading the ++ file system table. */ ++ stats = xnmalloc (argc - optind, sizeof *stats); ++ for (i = optind; i < argc; ++i) ++ { ++ /* Prefer to open with O_NOCTTY and use fstat, but fall back ++ on using "stat", in case the file is unreadable. */ ++ int fd = open (argv[i], O_RDONLY | O_NOCTTY); ++ if ((fd < 0 || fstat (fd, &stats[i - optind])) ++ && stat (argv[i], &stats[i - optind])) ++ { ++ error (0, errno, "%s", quote (argv[i])); ++ exit_status = EXIT_FAILURE; ++ argv[i] = NULL; ++ } ++ if (0 <= fd) ++ close (fd); ++ } ++ } ++ ++ mount_list = ++ read_file_system_list ((fs_select_list != NULL ++ || fs_exclude_list != NULL ++ || print_type ++ || field_data[FSTYPE_FIELD].used ++ || show_local_fs)); ++ ++ if (mount_list == NULL) ++ { ++ /* Couldn't read the table of mounted file systems. ++ Fail if df was invoked with no file name arguments, ++ or when either of -a, -l, -t or -x is used with file name ++ arguments. Otherwise, merely give a warning and proceed. */ ++ int status = 0; ++ if ( ! (optind < argc) ++ || (show_all_fs ++ || show_local_fs ++ || fs_select_list != NULL ++ || fs_exclude_list != NULL)) ++ { ++ status = EXIT_FAILURE; ++ } ++ const char *warning = (status == 0 ? _("Warning: ") : ""); ++ error (status, errno, "%s%s", warning, ++ _("cannot read table of mounted file systems")); ++ } ++ ++ if (require_sync) ++ sync (); ++ ++ get_field_list (); ++ get_header (); ++ ++ if (optind < argc) ++ { ++ int i; ++ ++ /* Display explicitly requested empty file systems. */ ++ show_listed_fs = true; ++ ++ for (i = optind; i < argc; ++i) ++ if (argv[i]) ++ get_entry (argv[i], &stats[i - optind]); ++ } ++ else ++ get_all_entries (); ++ ++ if (file_systems_processed) ++ { ++ if (print_grand_total) ++ get_dev ("total", ++ (field_data[SOURCE_FIELD].used ? "-" : "total"), ++ NULL, NULL, NULL, false, false, &grand_fsu, false); ++ ++ print_table (); ++ } ++ else ++ { ++ /* Print the "no FS processed" diagnostic only if there was no preceding ++ diagnostic, e.g., if all have been excluded. */ ++ if (exit_status == EXIT_SUCCESS) ++ error (EXIT_FAILURE, 0, _("no file systems processed")); ++ } ++ ++ IF_LINT (free (columns)); ++ ++ exit (exit_status); ++} --- coreutils-8.23.orig/debian/patches/32_infofix.dpatch +++ coreutils-8.23/debian/patches/32_infofix.dpatch @@ -0,0 +1,1278 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## infofix.dpatch by Pádraig Brady +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: make info doc references less ambiguous + +@DPATCH@ +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/man/help2man coreutils-8.23/man/help2man +--- coreutils-8.23~/man/help2man 2013-12-04 09:48:30.000000000 -0500 ++++ coreutils-8.23/man/help2man 2014-10-29 22:37:08.698622898 -0400 +@@ -405,16 +405,19 @@ + # "(?:[\\w-]+ +)?" in the bug reporting pattern is used to indicate an + # optional word, so that either "Report bugs" or "Report _program_ bugs" will + # be matched. +-my $PAT_BUGS = _('Report +(?:[\w-]+ +)?bugs|Email +bug +reports +to'); ++my $PAT_BUGS = _('Report +(?:[\w-]+ +)?bugs|' . ++ 'Email +bug +reports +to|' . ++ '.* +online +help:'); + my $PAT_AUTHOR = _('Written +by'); + my $PAT_OPTIONS = _('Options'); + my $PAT_ENVIRONMENT = _('Environment'); + my $PAT_FILES = _('Files'); + my $PAT_EXAMPLES = _('Examples'); + my $PAT_FREE_SOFTWARE = _('This +is +free +software'); ++my $PAT_SEE_ALSO = _('Full +documentation'); + + # Start a new paragraph (if required) for these. +-s/([^\n])\n($PAT_BUGS|$PAT_AUTHOR) /$1\n\n$2 /og; ++s/([^\n])\n($PAT_BUGS|$PAT_AUTHOR|$PAT_SEE_ALSO) /$1\n\n$2 /og; + + # Convert iso-8859-1 copyright symbol or (c) to nroff + # character. +@@ -462,6 +465,12 @@ + $sect = _('AUTHOR'); + } + ++ elsif (/^($PAT_SEE_ALSO)/o) ++ { ++ $sect = _('SEE ALSO'); ++ $opt_no_info = 1; ++ } ++ + # Examples, indicated by an indented leading $, % or > are + # rendered in a constant width font. + if (/^( +)([\$\%>] )\S/) +@@ -588,6 +597,17 @@ + # ... + s/\n([[:upper:]])/\n.br\n$1/g; + } ++ elsif ($sect eq _('SEE ALSO')) ++ { ++ # Handle external references of the form: ++ # ++ # GNU online resources: ++ # Full documentation at: ++ # or available locally via: info ... ++ # ++ s/\'/\\(aq/g; # shell quotes for info command ++ s/\n(.)/\n.br\n$1/g; # separate lines for each item ++ } + } + + # Check if matched paragraph contains /pat/. +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/base64.c coreutils-8.23/src/base64.c +--- coreutils-8.23~/src/base64.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/base64.c 2014-10-29 22:36:22.000000000 -0400 +@@ -83,7 +83,7 @@ + the formal base64 alphabet. Use --ignore-garbage to attempt to recover\n\ + from any other non-alphabet bytes in the encoded stream.\n"), + stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + + exit (status); +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/basename.c coreutils-8.23/src/basename.c +--- coreutils-8.23~/src/basename.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/basename.c 2014-10-29 22:36:22.000000000 -0400 +@@ -73,7 +73,7 @@ + %s -a any/str1 any/str2 -> \"str1\" followed by \"str2\"\n\ + "), + program_name, program_name, program_name, program_name); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/cat.c coreutils-8.23/src/cat.c +--- coreutils-8.23~/src/cat.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/cat.c 2014-10-29 22:36:22.000000000 -0400 +@@ -118,7 +118,7 @@ + %s Copy standard input to standard output.\n\ + "), + program_name, program_name); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/chcon.c coreutils-8.23/src/chcon.c +--- coreutils-8.23~/src/chcon.c 2014-07-13 18:09:52.000000000 -0400 ++++ coreutils-8.23/src/chcon.c 2014-10-29 22:36:22.000000000 -0400 +@@ -401,7 +401,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/chgrp.c coreutils-8.23/src/chgrp.c +--- coreutils-8.23~/src/chgrp.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/chgrp.c 2014-10-29 22:36:22.000000000 -0400 +@@ -162,7 +162,7 @@ + %s -hR staff /u Change the group of /u and subfiles to \"staff\".\n\ + "), + program_name, program_name); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/chmod.c coreutils-8.23/src/chmod.c +--- coreutils-8.23~/src/chmod.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/chmod.c 2014-10-29 22:36:22.000000000 -0400 +@@ -403,7 +403,7 @@ + \n\ + Each MODE is of the form '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+'.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/chown.c coreutils-8.23/src/chown.c +--- coreutils-8.23~/src/chown.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/chown.c 2014-10-29 22:36:22.000000000 -0400 +@@ -147,7 +147,7 @@ + %s -hR root /u Change the owner of /u and subfiles to \"root\".\n\ + "), + program_name, program_name, program_name); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/chroot.c coreutils-8.23/src/chroot.c +--- coreutils-8.23~/src/chroot.c 2014-07-13 19:59:20.000000000 -0400 ++++ coreutils-8.23/src/chroot.c 2014-10-29 22:36:22.000000000 -0400 +@@ -204,7 +204,7 @@ + \n\ + If no command is given, run '${SHELL} -i' (default: '/bin/sh -i').\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/cksum.c coreutils-8.23/src/cksum.c +--- coreutils-8.23~/src/cksum.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/cksum.c 2014-10-29 22:36:22.000000000 -0400 +@@ -271,7 +271,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/comm.c coreutils-8.23/src/comm.c +--- coreutils-8.23~/src/comm.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/comm.c 2014-10-29 22:36:22.000000000 -0400 +@@ -141,7 +141,7 @@ + %s -3 file1 file2 Print lines in file1 not in file2, and vice versa.\n\ + "), + program_name, program_name); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/coreutils.c coreutils-8.23/src/coreutils.c +--- coreutils-8.23~/src/coreutils.c 2014-07-18 12:53:33.000000000 -0400 ++++ coreutils-8.23/src/coreutils.c 2014-10-29 22:36:22.000000000 -0400 +@@ -87,7 +87,7 @@ + \n\ + Use: '%s --coreutils-prog=PROGRAM_NAME --help' for individual program help.\n"), + program_name); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/cp.c coreutils-8.23/src/cp.c +--- coreutils-8.23~/src/cp.c 2014-07-13 18:09:52.000000000 -0400 ++++ coreutils-8.23/src/cp.c 2014-10-29 22:36:22.000000000 -0400 +@@ -268,7 +268,7 @@ + options are given and SOURCE and DEST are the same name for an existing,\n\ + regular file.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/csplit.c coreutils-8.23/src/csplit.c +--- coreutils-8.23~/src/csplit.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/csplit.c 2014-10-29 22:36:22.000000000 -0400 +@@ -1516,7 +1516,7 @@ + \n\ + A line OFFSET is a required '+' or '-' followed by a positive integer.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/cut.c coreutils-8.23/src/cut.c +--- coreutils-8.23~/src/cut.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/cut.c 2014-10-29 22:36:22.000000000 -0400 +@@ -217,7 +217,7 @@ + \n\ + With no FILE, or when FILE is -, read standard input.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/date.c coreutils-8.23/src/date.c +--- coreutils-8.23~/src/date.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/date.c 2014-10-29 22:36:22.000000000 -0400 +@@ -255,7 +255,7 @@ + Show the local time for 9AM next Friday on the west coast of the US\n\ + $ date --date='TZ=\"America/Los_Angeles\" 09:00 next Fri'\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/dd.c coreutils-8.23/src/dd.c +--- coreutils-8.23~/src/dd.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/dd.c 2014-10-29 22:36:22.000000000 -0400 +@@ -647,7 +647,7 @@ + + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/df.c coreutils-8.23/src/df.c +--- coreutils-8.23~/src/df.c 2014-10-29 22:36:22.000000000 -0400 ++++ coreutils-8.23/src/df.c 2014-10-29 22:36:22.000000000 -0400 +@@ -1442,7 +1442,7 @@ + field names are: 'source', 'fstype', 'itotal', 'iused', 'iavail', 'ipcent',\n\ + 'size', 'used', 'avail', 'pcent', 'file' and 'target' (see info page).\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/dircolors.c coreutils-8.23/src/dircolors.c +--- coreutils-8.23~/src/dircolors.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/dircolors.c 2014-10-29 22:36:22.000000000 -0400 +@@ -111,7 +111,7 @@ + file types and extensions. Otherwise, a precompiled database is used.\n\ + For details on the format of these files, run 'dircolors --print-database'.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + + exit (status); +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/dirname.c coreutils-8.23/src/dirname.c +--- coreutils-8.23~/src/dirname.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/dirname.c 2014-10-29 22:36:22.000000000 -0400 +@@ -69,7 +69,7 @@ + %s stdio.h -> \".\"\n\ + "), + program_name, program_name, program_name); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/du.c coreutils-8.23/src/du.c +--- coreutils-8.23~/src/du.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/du.c 2014-10-29 22:36:22.000000000 -0400 +@@ -351,7 +351,7 @@ + fputs (VERSION_OPTION_DESCRIPTION, stdout); + emit_blocksize_note ("DU"); + emit_size_note (); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/echo.c coreutils-8.23/src/echo.c +--- coreutils-8.23~/src/echo.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/echo.c 2014-10-29 22:36:22.000000000 -0400 +@@ -79,7 +79,7 @@ + \\xHH byte with hexadecimal value HH (1 to 2 digits)\n\ + "), stdout); + printf (USAGE_BUILTIN_WARNING, PROGRAM_NAME); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/env.c coreutils-8.23/src/env.c +--- coreutils-8.23~/src/env.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/env.c 2014-10-29 22:36:22.000000000 -0400 +@@ -69,7 +69,7 @@ + \n\ + A mere - implies -i. If no COMMAND, print the resulting environment.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/expand.c coreutils-8.23/src/expand.c +--- coreutils-8.23~/src/expand.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/expand.c 2014-10-29 22:36:22.000000000 -0400 +@@ -120,7 +120,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/expr.c coreutils-8.23/src/expr.c +--- coreutils-8.23~/src/expr.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/expr.c 2014-10-29 22:36:22.000000000 -0400 +@@ -265,7 +265,7 @@ + Exit status is 0 if EXPRESSION is neither null nor 0, 1 if EXPRESSION is null\n\ + or 0, 2 if EXPRESSION is syntactically invalid, and 3 if an error occurred.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/factor.c coreutils-8.23/src/factor.c +--- coreutils-8.23~/src/factor.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/factor.c 2014-10-29 22:36:22.000000000 -0400 +@@ -2447,7 +2447,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/fmt.c coreutils-8.23/src/fmt.c +--- coreutils-8.23~/src/fmt.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/fmt.c 2014-10-29 22:36:22.000000000 -0400 +@@ -296,7 +296,7 @@ + \n\ + With no FILE, or when FILE is -, read standard input.\n"), + stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/fold.c coreutils-8.23/src/fold.c +--- coreutils-8.23~/src/fold.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/fold.c 2014-10-29 22:36:22.000000000 -0400 +@@ -81,7 +81,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/getlimits.c coreutils-8.23/src/getlimits.c +--- coreutils-8.23~/src/getlimits.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/getlimits.c 2014-10-29 22:36:22.000000000 -0400 +@@ -73,7 +73,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/groups.c coreutils-8.23/src/groups.c +--- coreutils-8.23~/src/groups.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/groups.c 2014-10-29 22:36:22.000000000 -0400 +@@ -58,7 +58,7 @@ + stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/head.c coreutils-8.23/src/head.c +--- coreutils-8.23~/src/head.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/head.c 2014-10-29 22:36:22.000000000 -0400 +@@ -134,7 +134,7 @@ + b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,\n\ + GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/hostid.c coreutils-8.23/src/hostid.c +--- coreutils-8.23~/src/hostid.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/hostid.c 2014-10-29 22:36:22.000000000 -0400 +@@ -46,7 +46,7 @@ + "), program_name); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/hostname.c coreutils-8.23/src/hostname.c +--- coreutils-8.23~/src/hostname.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/hostname.c 2014-10-29 22:36:22.000000000 -0400 +@@ -62,7 +62,7 @@ + program_name, program_name); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/id.c coreutils-8.23/src/id.c +--- coreutils-8.23~/src/id.c 2014-07-13 18:09:52.000000000 -0400 ++++ coreutils-8.23/src/id.c 2014-10-29 22:36:22.000000000 -0400 +@@ -104,7 +104,7 @@ + \n\ + Without any OPTION, print some useful set of identified information.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/install.c coreutils-8.23/src/install.c +--- coreutils-8.23~/src/install.c 2014-07-13 18:09:52.000000000 -0400 ++++ coreutils-8.23/src/install.c 2014-10-29 22:36:22.000000000 -0400 +@@ -668,7 +668,7 @@ + existing, nil numbered if numbered backups exist, simple otherwise\n\ + simple, never always make simple backups\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/join.c coreutils-8.23/src/join.c +--- coreutils-8.23~/src/join.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/join.c 2014-10-29 22:36:22.000000000 -0400 +@@ -239,7 +239,7 @@ + If the input is not sorted and some lines cannot be joined, a\n\ + warning message will be given.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/kill.c coreutils-8.23/src/kill.c +--- coreutils-8.23~/src/kill.c 2014-07-13 18:09:52.000000000 -0400 ++++ coreutils-8.23/src/kill.c 2014-10-29 22:36:22.000000000 -0400 +@@ -99,7 +99,7 @@ + PID is an integer; if negative it identifies a process group.\n\ + "), stdout); + printf (USAGE_BUILTIN_WARNING, PROGRAM_NAME); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/link.c coreutils-8.23/src/link.c +--- coreutils-8.23~/src/link.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/link.c 2014-10-29 22:36:22.000000000 -0400 +@@ -50,7 +50,7 @@ + stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/ln.c coreutils-8.23/src/ln.c +--- coreutils-8.23~/src/ln.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/ln.c 2014-10-29 22:36:22.000000000 -0400 +@@ -452,7 +452,7 @@ + Using -s ignores -L and -P. Otherwise, the last option specified controls\n\ + behavior when a TARGET is a symbolic link, defaulting to %s.\n\ + "), LINK_FOLLOWS_SYMLINKS ? "-L" : "-P"); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/logname.c coreutils-8.23/src/logname.c +--- coreutils-8.23~/src/logname.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/logname.c 2014-10-29 22:36:22.000000000 -0400 +@@ -43,7 +43,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/ls.c coreutils-8.23/src/ls.c +--- coreutils-8.23~/src/ls.c 2014-07-13 18:09:52.000000000 -0400 ++++ coreutils-8.23/src/ls.c 2014-10-29 22:36:22.000000000 -0400 +@@ -4940,7 +4940,7 @@ + 1 if minor problems (e.g., cannot access subdirectory),\n\ + 2 if serious trouble (e.g., cannot access command-line argument).\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/md5sum.c coreutils-8.23/src/md5sum.c +--- coreutils-8.23~/src/md5sum.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/md5sum.c 2014-10-29 22:36:22.000000000 -0400 +@@ -210,7 +210,7 @@ + a line with checksum, a character indicating input mode ('*' for binary,\n\ + space for text), and name for each FILE.\n"), + DIGEST_REFERENCE); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + + exit (status); +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/mkdir.c coreutils-8.23/src/mkdir.c +--- coreutils-8.23~/src/mkdir.c 2014-07-13 18:09:52.000000000 -0400 ++++ coreutils-8.23/src/mkdir.c 2014-10-29 22:36:22.000000000 -0400 +@@ -75,7 +75,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/mkfifo.c coreutils-8.23/src/mkfifo.c +--- coreutils-8.23~/src/mkfifo.c 2014-07-13 18:09:52.000000000 -0400 ++++ coreutils-8.23/src/mkfifo.c 2014-10-29 22:36:22.000000000 -0400 +@@ -67,7 +67,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/mknod.c coreutils-8.23/src/mknod.c +--- coreutils-8.23~/src/mknod.c 2014-07-13 18:09:52.000000000 -0400 ++++ coreutils-8.23/src/mknod.c 2014-10-29 22:36:22.000000000 -0400 +@@ -83,7 +83,7 @@ + p create a FIFO\n\ + "), stdout); + printf (USAGE_BUILTIN_WARNING, PROGRAM_NAME); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/mktemp.c coreutils-8.23/src/mktemp.c +--- coreutils-8.23~/src/mktemp.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/mktemp.c 2014-10-29 22:36:22.000000000 -0400 +@@ -96,7 +96,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + + exit (status); +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/mv.c coreutils-8.23/src/mv.c +--- coreutils-8.23~/src/mv.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/mv.c 2014-10-29 22:36:22.000000000 -0400 +@@ -336,7 +336,7 @@ + existing, nil numbered if numbered backups exist, simple otherwise\n\ + simple, never always make simple backups\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/nice.c coreutils-8.23/src/nice.c +--- coreutils-8.23~/src/nice.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/nice.c 2014-10-29 22:36:22.000000000 -0400 +@@ -85,7 +85,7 @@ + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); + printf (USAGE_BUILTIN_WARNING, PROGRAM_NAME); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/nl.c coreutils-8.23/src/nl.c +--- coreutils-8.23~/src/nl.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/nl.c 2014-10-29 22:36:22.000000000 -0400 +@@ -223,7 +223,7 @@ + rz right justified, leading zeros\n\ + \n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/nohup.c coreutils-8.23/src/nohup.c +--- coreutils-8.23~/src/nohup.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/nohup.c 2014-10-29 22:36:22.000000000 -0400 +@@ -70,7 +70,7 @@ + To save output to FILE, use '%s COMMAND > FILE'.\n"), + program_name); + printf (USAGE_BUILTIN_WARNING, PROGRAM_NAME); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/nproc.c coreutils-8.23/src/nproc.c +--- coreutils-8.23~/src/nproc.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/nproc.c 2014-10-29 22:36:22.000000000 -0400 +@@ -67,7 +67,7 @@ + + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/numfmt.c coreutils-8.23/src/numfmt.c +--- coreutils-8.23~/src/numfmt.c 2014-07-17 21:40:57.000000000 -0400 ++++ coreutils-8.23/src/numfmt.c 2014-10-29 22:36:22.000000000 -0400 +@@ -938,7 +938,7 @@ + program_name, program_name, program_name, + program_name, program_name, program_name, + program_name, program_name, program_name); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/od.c coreutils-8.23/src/od.c +--- coreutils-8.23~/src/od.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/od.c 2014-10-29 22:36:22.000000000 -0400 +@@ -414,7 +414,7 @@ + M 1024*1024\n\ + and so on for G, T, P, E, Z, Y.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/paste.c coreutils-8.23/src/paste.c +--- coreutils-8.23~/src/paste.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/paste.c 2014-10-29 22:36:22.000000000 -0400 +@@ -451,7 +451,7 @@ + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); + /* FIXME: add a couple of examples. */ +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/pathchk.c coreutils-8.23/src/pathchk.c +--- coreutils-8.23~/src/pathchk.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/pathchk.c 2014-10-29 22:36:22.000000000 -0400 +@@ -96,7 +96,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/pinky.c coreutils-8.23/src/pinky.c +--- coreutils-8.23~/src/pinky.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/pinky.c 2014-10-29 22:36:22.000000000 -0400 +@@ -515,7 +515,7 @@ + A lightweight 'finger' program; print user information.\n\ + The utmp file will be %s.\n\ + "), UTMP_FILE); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/pr.c coreutils-8.23/src/pr.c +--- coreutils-8.23~/src/pr.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/pr.c 2014-10-29 22:36:22.000000000 -0400 +@@ -2855,7 +2855,7 @@ + -t is implied if PAGE_LENGTH <= 10. With no FILE, or when FILE is -, read\n\ + standard input.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/printenv.c coreutils-8.23/src/printenv.c +--- coreutils-8.23~/src/printenv.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/printenv.c 2014-10-29 22:36:22.000000000 -0400 +@@ -72,7 +72,7 @@ + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); + printf (USAGE_BUILTIN_WARNING, PROGRAM_NAME); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/printf.c coreutils-8.23/src/printf.c +--- coreutils-8.23~/src/printf.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/printf.c 2014-10-29 22:36:22.000000000 -0400 +@@ -129,7 +129,7 @@ + ARGUMENTs converted to proper type first. Variable widths are handled.\n\ + "), stdout); + printf (USAGE_BUILTIN_WARNING, PROGRAM_NAME); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/ptx.c coreutils-8.23/src/ptx.c +--- coreutils-8.23~/src/ptx.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/ptx.c 2014-10-29 22:36:22.000000000 -0400 +@@ -1858,7 +1858,7 @@ + \n\ + With no FILE, or when FILE is -, read standard input. Default is '-F /'.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/pwd.c coreutils-8.23/src/pwd.c +--- coreutils-8.23~/src/pwd.c 2014-07-13 18:09:52.000000000 -0400 ++++ coreutils-8.23/src/pwd.c 2014-10-29 22:36:22.000000000 -0400 +@@ -68,7 +68,7 @@ + If no option is specified, -P is assumed.\n\ + "), stdout); + printf (USAGE_BUILTIN_WARNING, PROGRAM_NAME); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/readlink.c coreutils-8.23/src/readlink.c +--- coreutils-8.23~/src/readlink.c 2014-07-13 18:09:52.000000000 -0400 ++++ coreutils-8.23/src/readlink.c 2014-10-29 22:36:22.000000000 -0400 +@@ -85,7 +85,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/realpath.c coreutils-8.23/src/realpath.c +--- coreutils-8.23~/src/realpath.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/realpath.c 2014-10-29 22:36:22.000000000 -0400 +@@ -88,7 +88,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/rm.c coreutils-8.23/src/rm.c +--- coreutils-8.23~/src/rm.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/rm.c 2014-10-29 22:36:22.000000000 -0400 +@@ -180,7 +180,7 @@ + some of its contents, given sufficient expertise and/or time. For greater\n\ + assurance that the contents are truly unrecoverable, consider using shred.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/rmdir.c coreutils-8.23/src/rmdir.c +--- coreutils-8.23~/src/rmdir.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/rmdir.c 2014-10-29 22:36:22.000000000 -0400 +@@ -177,7 +177,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/runcon.c coreutils-8.23/src/runcon.c +--- coreutils-8.23~/src/runcon.c 2014-07-13 18:09:52.000000000 -0400 ++++ coreutils-8.23/src/runcon.c 2014-10-29 22:36:22.000000000 -0400 +@@ -102,7 +102,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/seq.c coreutils-8.23/src/seq.c +--- coreutils-8.23~/src/seq.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/seq.c 2014-10-29 22:36:22.000000000 -0400 +@@ -98,7 +98,7 @@ + it defaults to %.PRECf if FIRST, INCREMENT, and LAST are all fixed point\n\ + decimal numbers with maximum precision PREC, and to %g otherwise.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/shred.c coreutils-8.23/src/shred.c +--- coreutils-8.23~/src/shred.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/shred.c 2014-10-29 22:36:22.000000000 -0400 +@@ -243,7 +243,7 @@ + of the file that cannot be removed, and that will allow a shredded file\n\ + to be recovered later.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/shuf.c coreutils-8.23/src/shuf.c +--- coreutils-8.23~/src/shuf.c 2014-07-13 18:09:52.000000000 -0400 ++++ coreutils-8.23/src/shuf.c 2014-10-29 22:36:22.000000000 -0400 +@@ -87,7 +87,7 @@ + \n\ + With no FILE, or when FILE is -, read standard input.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + + exit (status); +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/sleep.c coreutils-8.23/src/sleep.c +--- coreutils-8.23~/src/sleep.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/sleep.c 2014-10-29 22:36:22.000000000 -0400 +@@ -54,7 +54,7 @@ + program_name, program_name); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/sort.c coreutils-8.23/src/sort.c +--- coreutils-8.23~/src/sort.c 2014-07-13 18:09:52.000000000 -0400 ++++ coreutils-8.23/src/sort.c 2014-10-29 22:36:22.000000000 -0400 +@@ -531,7 +531,7 @@ + Set LC_ALL=C to get the traditional sort order that uses\n\ + native byte values.\n\ + "), stdout ); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + + exit (status); +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/split.c coreutils-8.23/src/split.c +--- coreutils-8.23~/src/split.c 2014-07-13 19:10:38.000000000 -0400 ++++ coreutils-8.23/src/split.c 2014-10-29 22:36:22.000000000 -0400 +@@ -241,7 +241,7 @@ + r/N like 'l' but use round robin distribution\n\ + r/K/N likewise but only output Kth of N to stdout\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/stat.c coreutils-8.23/src/stat.c +--- coreutils-8.23~/src/stat.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/stat.c 2014-10-29 22:36:22.000000000 -0400 +@@ -1491,7 +1491,7 @@ + %T file system type in human readable form\n\ + "), stdout); + printf (USAGE_BUILTIN_WARNING, PROGRAM_NAME); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/stdbuf.c coreutils-8.23/src/stdbuf.c +--- coreutils-8.23~/src/stdbuf.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/stdbuf.c 2014-10-29 22:36:22.000000000 -0400 +@@ -119,7 +119,7 @@ + Also some filters (like 'dd' and 'cat' etc.) don't use streams for I/O,\n\ + and are thus unaffected by 'stdbuf' settings.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/stty.c coreutils-8.23/src/stty.c +--- coreutils-8.23~/src/stty.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/stty.c 2014-10-29 22:36:22.000000000 -0400 +@@ -732,7 +732,7 @@ + settings, CHAR is taken literally, or coded as in ^c, 0x37, 0177 or\n\ + 127; special values ^- or undef used to disable special characters.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/sum.c coreutils-8.23/src/sum.c +--- coreutils-8.23~/src/sum.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/sum.c 2014-10-29 22:36:22.000000000 -0400 +@@ -71,7 +71,7 @@ + \n\ + With no FILE, or when FILE is -, read standard input.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/sync.c coreutils-8.23/src/sync.c +--- coreutils-8.23~/src/sync.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/sync.c 2014-10-29 22:36:22.000000000 -0400 +@@ -44,7 +44,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/system.h coreutils-8.23/src/system.h +--- coreutils-8.23~/src/system.h 2014-07-13 18:09:52.000000000 -0400 ++++ coreutils-8.23/src/system.h 2014-10-29 22:36:22.000000000 -0400 +@@ -565,9 +565,29 @@ + } + + static inline void +-emit_ancillary_info (void) ++emit_ancillary_info (char const *program) + { ++ struct infomap { char const *program; char const *node; } const infomap[] = { ++ { "[", "test invocation" }, ++ { "coreutils", "Multi-call invocation" }, ++ { "sha224sum", "sha2 utilities" }, ++ { "sha256sum", "sha2 utilities" }, ++ { "sha384sum", "sha2 utilities" }, ++ { "sha512sum", "sha2 utilities" }, ++ { NULL, NULL } ++ }; ++ ++ char const *node = program; ++ struct infomap const *map_prog = infomap; ++ ++ while (map_prog->program && ! STREQ (program, map_prog->program)) ++ map_prog++; ++ ++ if (map_prog->node) ++ node = map_prog->node; ++ + printf (_("\n%s online help: <%s>\n"), PACKAGE_NAME, PACKAGE_URL); ++ + /* Don't output this redundant message for English locales. + Note we still output for 'C' so that it gets included in the man page. */ + const char *lc_messages = setlocale (LC_MESSAGES, NULL); +@@ -578,11 +598,12 @@ + the URLs at http://translationproject.org/team/. Otherwise, replace + the entire URL with your translation team's email address. */ + printf (_("Report %s translation bugs to " +- "\n"), +- last_component (program_name)); ++ "\n"), program); + } +- printf (_("For complete documentation, run: " +- "info coreutils '%s invocation'\n"), last_component (program_name)); ++ printf (_("Full documentation at: <%s%s>\n"), ++ PACKAGE_URL, program); ++ printf (_("or available locally via: info '(coreutils) %s%s'\n"), ++ node, node == program ? " invocation" : ""); + } + + static inline void +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/tac.c coreutils-8.23/src/tac.c +--- coreutils-8.23~/src/tac.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/tac.c 2014-10-29 22:36:22.000000000 -0400 +@@ -148,7 +148,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/tail.c coreutils-8.23/src/tail.c +--- coreutils-8.23~/src/tail.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/tail.c 2014-10-29 22:36:22.000000000 -0400 +@@ -321,7 +321,7 @@ + rotation). Use --follow=name in that case. That causes tail to track the\n\ + named file in a way that accommodates renaming, removal and creation.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/tee.c coreutils-8.23/src/tee.c +--- coreutils-8.23~/src/tee.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/tee.c 2014-10-29 22:36:22.000000000 -0400 +@@ -72,7 +72,7 @@ + \n\ + If a FILE is -, copy again to standard output.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/test.c coreutils-8.23/src/test.c +--- coreutils-8.23~/src/test.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/test.c 2014-10-29 22:36:22.000000000 -0400 +@@ -789,7 +789,7 @@ + test treats each of those as it treats any other nonempty STRING.\n\ + "), stdout); + printf (USAGE_BUILTIN_WARNING, _("test and/or [")); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/timeout.c coreutils-8.23/src/timeout.c +--- coreutils-8.23~/src/timeout.c 2014-07-13 18:09:52.000000000 -0400 ++++ coreutils-8.23/src/timeout.c 2014-10-29 22:36:22.000000000 -0400 +@@ -266,7 +266,7 @@ + any process that does not block or catch that signal. It may be necessary\n\ + to use the KILL (9) signal, since this signal cannot be caught, in which\n\ + case the exit status is 128+9 rather than 124.\n"), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/touch.c coreutils-8.23/src/touch.c +--- coreutils-8.23~/src/touch.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/touch.c 2014-10-29 22:36:22.000000000 -0400 +@@ -247,7 +247,7 @@ + \n\ + Note that the -d and -t options accept different time-date formats.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/tr.c coreutils-8.23/src/tr.c +--- coreutils-8.23~/src/tr.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/tr.c 2014-10-29 22:36:22.000000000 -0400 +@@ -346,7 +346,7 @@ + translating nor deleting; else squeezing uses SET2 and occurs after\n\ + translation or deletion.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/true.c coreutils-8.23/src/true.c +--- coreutils-8.23~/src/true.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/true.c 2014-10-29 22:36:22.000000000 -0400 +@@ -47,7 +47,7 @@ + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); + printf (USAGE_BUILTIN_WARNING, PROGRAM_NAME); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + exit (status); + } + +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/truncate.c coreutils-8.23/src/truncate.c +--- coreutils-8.23~/src/truncate.c 2014-07-13 18:09:52.000000000 -0400 ++++ coreutils-8.23/src/truncate.c 2014-10-29 22:36:22.000000000 -0400 +@@ -122,7 +122,7 @@ + SIZE may also be prefixed by one of the following modifying characters:\n\ + '+' extend by, '-' reduce by, '<' at most, '>' at least,\n\ + '/' round down to multiple of, '%' round up to multiple of.\n"), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/tsort.c coreutils-8.23/src/tsort.c +--- coreutils-8.23~/src/tsort.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/tsort.c 2014-10-29 22:36:22.000000000 -0400 +@@ -87,7 +87,7 @@ + "), program_name); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + + exit (status); +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/tty.c coreutils-8.23/src/tty.c +--- coreutils-8.23~/src/tty.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/tty.c 2014-10-29 22:36:22.000000000 -0400 +@@ -69,7 +69,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/uname.c coreutils-8.23/src/uname.c +--- coreutils-8.23~/src/uname.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/uname.c 2014-10-29 22:36:22.000000000 -0400 +@@ -148,7 +148,7 @@ + + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/unexpand.c coreutils-8.23/src/unexpand.c +--- coreutils-8.23~/src/unexpand.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/unexpand.c 2014-10-29 22:36:22.000000000 -0400 +@@ -129,7 +129,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/uniq.c coreutils-8.23/src/uniq.c +--- coreutils-8.23~/src/uniq.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/uniq.c 2014-10-29 22:36:22.000000000 -0400 +@@ -220,7 +220,7 @@ + You may want to sort the input first, or use 'sort -u' without 'uniq'.\n\ + Also, comparisons honor the rules specified by 'LC_COLLATE'.\n\ + "), stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/unlink.c coreutils-8.23/src/unlink.c +--- coreutils-8.23~/src/unlink.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/unlink.c 2014-10-29 22:36:22.000000000 -0400 +@@ -49,7 +49,7 @@ + stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/uptime.c coreutils-8.23/src/uptime.c +--- coreutils-8.23~/src/uptime.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/uptime.c 2014-10-29 22:36:22.000000000 -0400 +@@ -217,7 +217,7 @@ + UTMP_FILE, WTMP_FILE); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/users.c coreutils-8.23/src/users.c +--- coreutils-8.23~/src/users.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/users.c 2014-10-29 22:36:22.000000000 -0400 +@@ -111,7 +111,7 @@ + UTMP_FILE, WTMP_FILE); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/wc.c coreutils-8.23/src/wc.c +--- coreutils-8.23~/src/wc.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/wc.c 2014-10-29 22:36:22.000000000 -0400 +@@ -134,7 +134,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/who.c coreutils-8.23/src/who.c +--- coreutils-8.23~/src/who.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/who.c 2014-10-29 22:36:22.000000000 -0400 +@@ -675,7 +675,7 @@ + If FILE is not specified, use %s. %s as FILE is common.\n\ + If ARG1 ARG2 given, -m presumed: 'am i' or 'mom likes' are usual.\n\ + "), UTMP_FILE, WTMP_FILE); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/whoami.c coreutils-8.23/src/whoami.c +--- coreutils-8.23~/src/whoami.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/whoami.c 2014-10-29 22:36:22.000000000 -0400 +@@ -49,7 +49,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/yes.c coreutils-8.23/src/yes.c +--- coreutils-8.23~/src/yes.c 2014-07-11 07:00:07.000000000 -0400 ++++ coreutils-8.23/src/yes.c 2014-10-29 22:36:22.000000000 -0400 +@@ -50,7 +50,7 @@ + "), stdout); + fputs (HELP_OPTION_DESCRIPTION, stdout); + fputs (VERSION_OPTION_DESCRIPTION, stdout); +- emit_ancillary_info (); ++ emit_ancillary_info (PROGRAM_NAME); + } + exit (status); + } --- coreutils-8.23.orig/debian/patches/61_whoips.dpatch +++ coreutils-8.23/debian/patches/61_whoips.dpatch @@ -0,0 +1,130 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run + +@DPATCH@ +diff -urNad coreutils-8.0~/src/who.c coreutils-8.0/src/who.c +--- coreutils-8.0~/src/who.c 2009-09-23 04:25:44.000000000 -0400 ++++ coreutils-8.0/src/who.c 2009-11-14 17:16:07.581713057 -0500 +@@ -28,6 +28,8 @@ + #include + + #include ++#include ++#include + #include "system.h" + + #include "c-ctype.h" +@@ -101,6 +103,9 @@ + /* If true, attempt to canonicalize hostnames via a DNS lookup. */ + static bool do_lookup; + ++/* If true, display ips instead of hostnames */ ++static bool do_ips; ++ + /* If true, display only a list of usernames and count of + the users logged on. + Ignored for `who am i'. */ +@@ -156,7 +161,8 @@ + /* for long options with no corresponding short option, use enum */ + enum + { +- LOOKUP_OPTION = CHAR_MAX + 1 ++ LOOKUP_OPTION = CHAR_MAX + 1, ++ IPS_OPTION = CHAR_MAX + 2 + }; + + static struct option const longopts[] = +@@ -166,6 +172,7 @@ + {"count", no_argument, NULL, 'q'}, + {"dead", no_argument, NULL, 'd'}, + {"heading", no_argument, NULL, 'H'}, ++ {"ips", no_argument, NULL, IPS_OPTION}, + {"login", no_argument, NULL, 'l'}, + {"lookup", no_argument, NULL, LOOKUP_OPTION}, + {"message", no_argument, NULL, 'T'}, +@@ -418,6 +425,63 @@ + } + #endif + ++ /* Needs configure check for ut_addr_v6, etc */ ++ if (do_ips && ++ memcmp(utmp_ent->ut_addr_v6, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16)) ++ { ++ /* Following code is from sysvinit-2.87dsf ++ (GPL Copyright 1991-2004 Miquel van Smoorenburg) */ ++ struct sockaddr_in sin; ++ struct sockaddr_in6 sin6; ++ struct sockaddr *sa; ++ int salen, flags; ++ unsigned int azero=0; ++ unsigned int glblunicast=0, linklocal=0, localunicast=0; ++ int mapped = 0; ++ int *a = utmp_ent->ut_addr_v6; ++ ++ hoststr = xrealloc(hoststr, 256); ++ ++ flags = do_lookup ? 0 : NI_NUMERICHOST; ++ ++ /* ++ * IPv4 or IPv6 ? We use 2 heuristics: ++ * 1. Current IPv6 range uses 2000-3fff or fc00-fdff or fec0-feff. ++ * Outside of that is illegal and must be IPv4. ++ * 2. If last 3 bytes are 0, must be IPv4 ++ * 3. If IPv6 in IPv4, handle as IPv4 ++ * ++ * Ugly. ++ */ ++ if (a[0] == 0 && a[1] == 0 && a[2] == htonl (0xffff)) ++ mapped = 1; ++ ++ azero = ntohl((unsigned int)a[0]) >> 16; ++ glblunicast = (azero >= 0x2000 && azero <= 0x3fff) ? 1 : 0; ++ localunicast = (azero >= 0xfc00 && azero <= 0xfdff) ? 1 : 0; ++ linklocal = (azero >= 0xfec0 && azero <= 0xfeff) ? 1 : 0; ++ ++ if (!(glblunicast || linklocal || localunicast) || mapped || ++ (a[1] == 0 && a[2] == 0 && a[3] == 0)) { ++ /* IPv4 */ ++ sin.sin_family = AF_INET; ++ sin.sin_port = 0; ++ sin.sin_addr.s_addr = mapped ? a[3] : a[0]; ++ sa = (struct sockaddr *)&sin; ++ salen = sizeof(sin); ++ } else { ++ /* IPv6 */ ++ memset(&sin6, 0, sizeof(sin6)); ++ sin6.sin6_family = AF_INET6; ++ sin6.sin6_port = 0; ++ memcpy(sin6.sin6_addr.s6_addr, a, 16); ++ sa = (struct sockaddr *)&sin6; ++ salen = sizeof(sin6); ++ } ++ ++ getnameinfo(sa, salen, hoststr, 256, NULL, 0, flags); ++ } ++ + print_line (sizeof UT_USER (utmp_ent), UT_USER (utmp_ent), mesg, + sizeof utmp_ent->ut_line, utmp_ent->ut_line, + time_string (utmp_ent), idlestr, pidstr, +@@ -640,6 +704,11 @@ + -H, --heading print line of column headings\n\ + "), stdout); + fputs (_("\ ++ --ips print ips instead of hostnames. with --lookup,\n\ ++ canonicalizes based on stored IP, if available,\n\ ++ rather than stored hostname\n\ ++"), stdout); ++ fputs (_("\ + -l, --login print system login processes\n\ + "), stdout); + fputs (_("\ +@@ -857,6 +857,10 @@ + do_lookup = true; + break; + ++ case IPS_OPTION: ++ do_ips = true; ++ break; ++ + case_GETOPT_HELP_CHAR; + + case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS); --- coreutils-8.23.orig/debian/patches/63_dd-appenderrors.dpatch +++ coreutils-8.23/debian/patches/63_dd-appenderrors.dpatch @@ -0,0 +1,15 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run + +@DPATCH@ +--- coreutils-5.97/src/dd.c.orig 2006-06-26 10:17:02.143014002 -0400 ++++ coreutils-6.10/src/dd.c 2006-06-26 10:20:17.456920048 -0400 +@@ -1243,6 +1243,9 @@ + if (multiple_bits_set (input_flags & (O_DIRECT | O_NOCACHE)) + || multiple_bits_set (output_flags & (O_DIRECT | O_NOCACHE))) + error (EXIT_FAILURE, 0, _("cannot combine direct and nocache")); ++ if ((output_flags & O_APPEND) && ++ ((conversions_mask & C_NOTRUNC) != C_NOTRUNC)) ++ error (0, 0, _("you probably want conv=notrunc with oflag=append")); + + if (input_flags & O_NOCACHE) + { --- coreutils-8.23.orig/debian/patches/72_id_checkngroups.dpatch +++ coreutils-8.23/debian/patches/72_id_checkngroups.dpatch @@ -0,0 +1,16 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run + +@DPATCH@ +--- coreutils-6.10/src/id.c.orig 2008-01-28 20:14:06.147283549 -0500 ++++ coreutils-6.10/src/id.c 2008-01-28 20:27:39.523284910 -0500 +@@ -370,6 +370,10 @@ + ok = false; + return; + } ++ else if (sysconf(_SC_NGROUPS_MAX) > 0 && n_groups > sysconf(_SC_NGROUPS_MAX)) ++ { ++ fprintf (stderr, _("Warning: user %s is in more groups than system's configured maximum.\n"), (username != NULL)?username:""); ++ } + + if (n_groups > 0) + fputs (_(" groups="), stdout); --- coreutils-8.23.orig/debian/patches/80_fedora_sysinfo.dpatch +++ coreutils-8.23/debian/patches/80_fedora_sysinfo.dpatch @@ -0,0 +1,75 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run + +@DPATCH@ +--- a/src/uname.c ++++ b/src/uname.c +@@ -258,7 +258,7 @@ + int + main (int argc, char **argv) + { +- static char const unknown[] = "unknown"; ++ static char unknown[] = "unknown"; + + /* Mask indicating which elements to print. */ + unsigned int toprint = 0; +@@ -299,13 +299,35 @@ + + if (toprint & PRINT_PROCESSOR) + { +- char const *element = unknown; ++ char *element = unknown; + #if HAVE_SYSINFO && defined SI_ARCHITECTURE + { + static char processor[257]; + if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor)) + element = processor; + } ++#else ++ { ++ struct utsname u; ++ uname(&u); ++ element = u.machine; ++#ifdef linux ++ if(!strcmp(element, "i686")) { /* Check for Athlon */ ++ char cinfo[1024]; ++ FILE *f=fopen("/proc/cpuinfo", "r"); ++ if(f) { ++ while(fgets(cinfo, 1024, f)) { ++ if(!strncmp(cinfo, "vendor_id", 9)) { ++ if(strstr(cinfo, "AuthenticAMD")) ++ element="athlon"; ++ break; ++ } ++ } ++ fclose(f); ++ } ++ } ++#endif ++ } + #endif + #ifdef UNAME_PROCESSOR + if (element == unknown) +@@ -343,7 +365,7 @@ + + if (toprint & PRINT_HARDWARE_PLATFORM) + { +- char const *element = unknown; ++ char *element = unknown; + #if HAVE_SYSINFO && defined SI_PLATFORM + { + static char hardware_platform[257]; +@@ -351,6 +373,14 @@ + hardware_platform, sizeof hardware_platform)) + element = hardware_platform; + } ++#else ++ { ++ struct utsname u; ++ uname(&u); ++ element = u.machine; ++ if(strlen(element)==4 && element[0]=='i' && element[2]=='8' && element[3]=='6') ++ element[1]='3'; ++ } + #endif + #ifdef UNAME_HARDWARE_PLATFORM + if (element == unknown) --- coreutils-8.23.orig/debian/patches/85_timer_settime.dpatch +++ coreutils-8.23/debian/patches/85_timer_settime.dpatch @@ -0,0 +1,32 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 85_timer_settime.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: timeout ignores fractional part of sleep times when timeout is more +## DP: than 100000s (approximately 1 day) on kfbsd. prevents failure modes +## DP: in libc implementation when timeout approaches max(time_t) + +@DPATCH@ +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.13~/src/timeout.c coreutils-8.13/src/timeout.c +--- coreutils-8.13~/src/timeout.c 2011-09-01 13:16:21.000000000 -0400 ++++ coreutils-8.13/src/timeout.c 2011-09-19 10:23:22.685116620 -0400 +@@ -113,6 +113,11 @@ + resolution provided by alarm(). */ + + #if HAVE_TIMER_SETTIME ++#ifdef __FreeBSD_kernel__ ++if (duration < 100000) { ++#else ++if (true) { ++#endif + struct timespec ts = dtotimespec (duration); + struct itimerspec its = { {0, 0}, ts }; + timer_t timerid; +@@ -128,6 +133,7 @@ + } + else if (errno != ENOSYS) + error (0, errno, _("warning: timer_create")); ++} + #endif + + unsigned int timeint; --- coreutils-8.23.orig/debian/patches/99_float_endian_detection.dpatch +++ coreutils-8.23/debian/patches/99_float_endian_detection.dpatch @@ -0,0 +1,67 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 99_float_endian_detection.dpatch by Colin Watson +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Fix detection of floating point endianness +## DP: See https://lists.gnu.org/archive/html/bug-gnulib/2013-12/msg00104.html +## DP: Based on a suggestion by Alan Modra. + +@DPATCH@ +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils~/gnulib-tests/test-isnanl.h coreutils/gnulib-tests/test-isnanl.h +--- coreutils~/gnulib-tests/test-isnanl.h 2013-10-30 15:35:33.000000000 +0000 ++++ coreutils/gnulib-tests/test-isnanl.h 2013-12-18 13:27:45.944005833 +0000 +@@ -24,6 +24,12 @@ + #include "nan.h" + #include "macros.h" + ++#ifdef __FLOAT_WORD_ORDER__ ++# define FLOAT_BIG_ENDIAN (__FLOAT_WORD_ORDER__ != __ORDER_LITTLE_ENDIAN__) ++#else ++# define FLOAT_BIG_ENDIAN (LDBL_EXPBIT0_WORD < NWORDS / 2) ++#endif ++ + int + main () + { +@@ -56,10 +62,10 @@ + # if LDBL_EXPBIT0_BIT > 0 + m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1); + # else +- m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] ++ m.word[LDBL_EXPBIT0_WORD + (FLOAT_BIG_ENDIAN ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); + # endif +- m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] ++ m.word[LDBL_EXPBIT0_WORD + (FLOAT_BIG_ENDIAN ? 1 : - 1)] + |= (unsigned int) 1 << LDBL_EXPBIT0_BIT; + ASSERT (isnanl (m.value)); + } +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils~/gnulib-tests/test-signbit.c coreutils/gnulib-tests/test-signbit.c +--- coreutils~/gnulib-tests/test-signbit.c 2013-10-30 15:35:33.000000000 +0000 ++++ coreutils/gnulib-tests/test-signbit.c 2013-12-18 13:27:45.944005833 +0000 +@@ -36,6 +36,12 @@ + double zerod = 0.0; + long double zerol = 0.0L; + ++#ifdef __FLOAT_WORD_ORDER__ ++# define FLOAT_BIG_ENDIAN (__FLOAT_WORD_ORDER__ != __ORDER_LITTLE_ENDIAN__) ++#else ++# define FLOAT_BIG_ENDIAN (LDBL_EXPBIT0_WORD < NWORDS / 2) ++#endif ++ + static void + test_signbitf () + { +@@ -156,10 +162,10 @@ + # if LDBL_EXPBIT0_BIT > 0 + m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1); + # else +- m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] ++ m.word[LDBL_EXPBIT0_WORD + (FLOAT_BIG_ENDIAN ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); + # endif +- m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] ++ m.word[LDBL_EXPBIT0_WORD + (FLOAT_BIG_ENDIAN ? 1 : - 1)] + |= (unsigned int) 1 << LDBL_EXPBIT0_BIT; + (void) signbit (m.value); + #undef NWORDS --- coreutils-8.23.orig/debian/patches/99_hppa_longlong.dpatch +++ coreutils-8.23/debian/patches/99_hppa_longlong.dpatch @@ -0,0 +1,29 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 99_hppa_longlong by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: disable test of zero-len format string + +@DPATCH@ +diff --git a/src/longlong.h b/src/longlong.h +index 8d71611..6ee157c 100644 +--- a/src/longlong.h ++++ b/src/longlong.h +@@ -679,7 +679,13 @@ extern UWtype __MPN(udiv_qrnnd) (UWtype *, UWtype, UWtype, UWtype); + /* These macros are for ABI=2.0w. In ABI=2.0n they can't be used, since GCC + (3.2) puts longlong into two adjacent 32-bit registers. Presumably this + is just a case of no direct support for 2.0n but treating it like 1.0. */ +-#if defined (__hppa) && W_TYPE_SIZE == 64 && ! defined (_LONG_LONG_LIMB) ++#if defined (__hppa) && W_TYPE_SIZE == 64 && ! defined (_LONG_LONG_LIMB) \ ++ && defined (_PA_RISC2_0) && defined (_LP64) ++/* Note the _PA_RISC2_0 above is to exclude this code from GCC with ++ default -march options which doesn't support these instructions. ++ Also the width check for 'long' is to avoid ilp32 runtimes where ++ GNU/Linux and narrow HP-UX kernels are known to have issues with ++ clobbering of context between the add and add,dc instructions. */ + #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("add%I5 %5,%r4,%1\n\tadd,dc %r2,%r3,%0" \ + : "=r" (sh), "=&r" (sl) \ +-- +1.7.2.5 + --- coreutils-8.23.orig/debian/patches/99_kfbsd_fstat_patch.dpatch +++ coreutils-8.23/debian/patches/99_kfbsd_fstat_patch.dpatch @@ -0,0 +1,26 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 99_kfbsd_fstat_patch.dpatch by Michael Stone +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: No description. + +@DPATCH@ +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.5~/lib/fstatat.c coreutils-8.5/lib/fstatat.c +--- coreutils-8.5~/lib/fstatat.c 2010-04-23 09:44:00.000000000 -0400 ++++ coreutils-8.5/lib/fstatat.c 2010-04-27 20:30:37.200596044 -0400 +@@ -107,4 +107,15 @@ + # undef AT_FUNC_POST_FILE_PARAM_DECLS + # undef AT_FUNC_POST_FILE_ARGS + ++#ifdef __FreeBSD_kernel__ ++ ++int __fxstatat(int version, int fd, const char *file, struct stat *st, int flag) ++{ ++ typedef int (*tp)(int, const char *, struct stat *, int); ++ volatile tp f = fstatat; ++ return f(fd, file, st, flag); ++} ++ ++#endif ++ + #endif /* !HAVE_FSTATAT */ --- coreutils-8.23.orig/debian/patches/99_mountinfo.dpatch +++ coreutils-8.23/debian/patches/99_mountinfo.dpatch @@ -0,0 +1,518 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 99_mountinfo.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Make df prioritize fileystem root mounts over bind mounts +## DP: Pulled in enablement for /proc/self/mountinfo in order to succeed in above +## DP: Please see pad.lv/1432871 for more info +## +## Bug-Ubuntu: http://pad.lv/1432871 +## Auther: Dave Chiluk +## Origin: upstream, gnulib - http://git.savannah.gnu.org/gitweb/?p=gnulib.git +## commit: http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=commit;h=3ea43e02541ece750ffc6cd1dfe34195421b4ef3 +## commit: http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=commit;h=2768ceb7994506e2cfba88be3b6bd13ef5440a90 +## commit: http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=commit;h=de1cbdd48244c66c51a3e2bc1594ac3ad32ce038 +## commit: http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=commit;h=3fb6e360363744462ce15c381f0b116c6fc4ce82 +## commit: http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=commit;h=c6148bca89e9465fd6ba3a10d273ec4cb58c2dbe +## Origin: upstream, coreutils - http://git.savannah.gnu.org/gitweb/?p=coreutils.git +## commit: http://git.savannah.gnu.org/gitweb/?p=coreutils.git;a=commit;h=1b1c40e1d6f8cf30b6c7c9d31bbddbc3d5cc72e6 +## commit: http://git.savannah.gnu.org/gitweb/?p=coreutils.git;a=commit;h=3babaf83875ceac896c8dd3a64248e955dfecef9 + +@DPATCH@ +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/ChangeLog coreutils-8.23/ChangeLog +--- coreutils-8.23~/ChangeLog 2015-10-01 17:08:13.000000000 -0500 ++++ coreutils-8.23/ChangeLog 2015-10-01 17:10:23.778341177 -0500 +@@ -1,3 +1,59 @@ ++2015-09-08 Dave Chiluk ++ ++ mountlist: add me_mntroot field on Linux machines ++ * lib/mountlist.c (read_file_system_list): Populate me_mntroot in ++ mount_entry so Linux machines based on /proc/self/mountinfo can ++ distinguish between bind mounts and original mounts. In reality bind ++ mounts aren't treated differently than mountroot=/ mounts by the ++ kernel, but the user often wants these bind mounts distinguished. ++ * lib/mountlist.h (struct mount_entry): Add me_mntroot element. ++ More details at https://pad.lv/1432871 ++ ++2015-04-02 Pádraig Brady ++ ++ mountlist: remove dependency on libmount ++ * lib/mountlist.c (read_file_system_list): Parse /proc/self/mountinfo ++ directly, rather than depending on libmount, which has many ++ dependencies due to its dependence on libselinux, as detailed at: ++ http://lists.gnu.org/archive/html/bug-gnulib/2015-01/msg00063.html ++ Note we restrict this to __linux__ as that's probably where this ++ interface will remain. If ever porting, it would be best ++ to first pull the makedev() wrapper from coreutils to a gnulib module. ++ Note also we don't add a getline dependency to the mountlist module, ++ as all Linux versions are sufficient. ++ ++2015-02-11 Pádraig Brady ++ ++ mountlist: only use libmount when specified ++ There are currently many shared libs dependencies introduced by ++ libmount with associated runtime and virt mem overhead. ++ Therefore don't enable by default. ++ * m4/ls-mntd-fs.m4: Use --with-libmount to enable at build time. ++ ++2014-10-30 Pádraig Brady ++ ++ mountlist: don't use libmount to decide on dummy/remote ++ * lib/mountlist.c (read_file_system_list): Don't use the libmount ++ routines to determine whether a file system is dummy or remote, ++ as they're not currently compatible. For example the remoteness ++ is determined on file system type (for which the list seems incomplete), ++ rather than simply checking for a ':' in the device name. ++ Also libmount currently determines that 'tmpfs' is a dummy file system ++ even though it has associated storage. ++ ++2014-09-09 Fridolin Pokorny ++ ++ mountlist: use /proc/self/mountinfo when available ++ Use libmount to propagate device IDs provided by Linux in ++ /proc/self/mountinfo. This will give more accurate output when ++ using df in chroot'ed environments as the device IDs are not ++ determined by stat() which may be inaccurate within the chroot. ++ * lib/mountlist.c (read_file_system_list): Use the libmount routines ++ from util-linux to parse "/proc/self/mountinfo" or fall back to ++ standard getmntent() processing. ++ * m4/ls-mntd-fs.m4: Check for libmount only when 1-argument ++ getmntent() is used, as is the case on GNU/Linux. ++ + 2014-07-18 Pádraig Brady + + version 8.23 +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/NEWS coreutils-8.23/NEWS +--- coreutils-8.23~/NEWS 2015-10-01 17:09:13.000000000 -0500 ++++ coreutils-8.23/NEWS 2015-10-01 17:10:23.782341184 -0500 +@@ -154,6 +154,9 @@ + as these are probably explicitly mounted and may have separate ACLs etc. + [suppression was introduced in coreutils-8.21] + ++ df now prefers sources towards the root of a device when ++ eliding duplicate bind mounted entries. ++ + ** Improvements + + chroot has better --userspec and --group look-ups, with numeric IDs never +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/init.cfg coreutils-8.23/init.cfg +--- coreutils-8.23~/init.cfg 2015-10-01 17:08:13.000000000 -0500 ++++ coreutils-8.23/init.cfg 2015-10-01 17:10:23.782341184 -0500 +@@ -79,7 +79,7 @@ + require_mount_list_() + { + local mount_list_fail='cannot read table of mounted file systems' +- df 2>&1 | grep -F "$mount_list_fail" >/dev/null && ++ df --local 2>&1 | grep -F "$mount_list_fail" >/dev/null && + skip_ "$mount_list_fail" + } + +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/lib/mountlist.c coreutils-8.23/lib/mountlist.c +--- coreutils-8.23~/lib/mountlist.c 2015-10-01 17:08:13.000000000 -0500 ++++ coreutils-8.23/lib/mountlist.c 2015-10-01 17:10:23.778341177 -0500 +@@ -58,6 +58,7 @@ + + #ifdef MOUNTED_GETMNTENT1 /* 4.3BSD, SunOS, HP-UX, Dynix, Irix. */ + # include ++# include + # if !defined MOUNTED + # if defined _PATH_MOUNTED /* GNU libc */ + # define MOUNTED _PATH_MOUNTED +@@ -177,10 +178,9 @@ + we grant an exception to any with "bind" in its list of mount options. + I.e., those are *not* dummy entries. */ + #ifdef MOUNTED_GETMNTENT1 +-# define ME_DUMMY(Fs_name, Fs_type, Fs_ent) \ ++# define ME_DUMMY(Fs_name, Fs_type, Bind) \ + (ME_DUMMY_0 (Fs_name, Fs_type) \ +- || (strcmp (Fs_type, "none") == 0 \ +- && !hasmntopt (Fs_ent, "bind"))) ++ || (strcmp (Fs_type, "none") == 0 && !Bind)) + #else + # define ME_DUMMY(Fs_name, Fs_type) \ + (ME_DUMMY_0 (Fs_name, Fs_type) || strcmp (Fs_type, "none") == 0) +@@ -383,6 +383,34 @@ + + #endif + ++#if defined MOUNTED_GETMNTENT1 && defined __linux__ ++ ++/* Unescape the paths in mount tables. ++ STR is updated in place. */ ++ ++static void ++unescape_tab (char *str) ++{ ++ size_t i, j = 0; ++ size_t len = strlen (str) + 1; ++ for (i = 0; i < len; i++) ++ { ++ if (str[i] == '\\' && (i + 4 < len) ++ && str[i + 1] >= '0' && str[i + 1] <= '3' ++ && str[i + 2] >= '0' && str[i + 2] <= '7' ++ && str[i + 3] >= '0' && str[i + 3] <= '7') ++ { ++ str[j++] = (str[i + 1] - '0') * 64 + ++ (str[i + 2] - '0') * 8 + ++ (str[i + 3] - '0'); ++ i += 3; ++ } ++ else ++ str[j++] = str[i]; ++ } ++} ++#endif ++ + /* Return a list of the currently mounted file systems, or NULL on error. + Add each entry to the tail of the list so that they stay in order. + If NEED_FS_TYPE is true, ensure that the file system type fields in +@@ -415,6 +443,7 @@ + me = xmalloc (sizeof *me); + me->me_devname = xstrdup (mnt->mnt_fsname); + me->me_mountdir = xstrdup (mnt->mnt_dir); ++ me->me_mntroot = NULL; + me->me_type = xstrdup (mnt->mnt_type); + me->me_type_malloced = 1; + me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); +@@ -429,32 +458,132 @@ + + #ifdef MOUNTED_GETMNTENT1 /* GNU/Linux, 4.3BSD, SunOS, HP-UX, Dynix, Irix. */ + { +- struct mntent *mnt; +- char const *table = MOUNTED; + FILE *fp; + +- fp = setmntent (table, "r"); +- if (fp == NULL) +- return NULL; +- +- while ((mnt = getmntent (fp))) ++#ifdef __linux__ ++ /* Try parsing mountinfo first, as that make device IDs available. ++ Note we could use libmount routines to simplify this parsing a little ++ (and that code is in previous versions of this function), however ++ libmount depends on libselinux which pulls in many dependencies. */ ++ char const *mountinfo = "/proc/self/mountinfo"; ++ fp = fopen (mountinfo, "r"); ++ if (fp != NULL) + { +- me = xmalloc (sizeof *me); +- me->me_devname = xstrdup (mnt->mnt_fsname); +- me->me_mountdir = xstrdup (mnt->mnt_dir); +- me->me_type = xstrdup (mnt->mnt_type); +- me->me_type_malloced = 1; +- me->me_dummy = ME_DUMMY (me->me_devname, me->me_type, mnt); +- me->me_remote = ME_REMOTE (me->me_devname, me->me_type); +- me->me_dev = dev_from_mount_options (mnt->mnt_opts); ++ char *line = NULL; ++ size_t buf_size = 0; + +- /* Add to the linked list. */ +- *mtail = me; +- mtail = &me->me_next; ++ while (getline (&line, &buf_size, fp) != -1) ++ { ++ unsigned int devmaj, devmin; ++ int target_s, target_e, type_s, type_e; ++ int source_s, source_e, mntroot_s, mntroot_e; ++ char test; ++ char *dash; ++ int rc; ++ ++ rc = sscanf(line, "%*u " /* id - discarded */ ++ "%*u " /* parent - discarded */ ++ "%u:%u " /* dev major:minor */ ++ "%n%*s%n " /* mountroot */ ++ "%n%*s%n" /* target, start and end */ ++ "%c", /* more data... */ ++ &devmaj, &devmin, ++ &mntroot_s, &mntroot_e, ++ &target_s, &target_e, ++ &test); ++ ++ if (rc != 3 && rc != 7) /* 7 if %n included in count. */ ++ continue; ++ ++ /* skip optional fields, terminated by " - " */ ++ dash = strstr (line + target_e, " - "); ++ if (! dash) ++ continue; ++ ++ rc = sscanf(dash, " - " ++ "%n%*s%n " /* FS type, start and end */ ++ "%n%*s%n " /* source, start and end */ ++ "%c", /* more data... */ ++ &type_s, &type_e, ++ &source_s, &source_e, ++ &test); ++ if (rc != 1 && rc != 5) /* 5 if %n included in count. */ ++ continue; ++ ++ /* manipulate the sub-strings in place. */ ++ line[mntroot_e] = '\0'; ++ line[target_e] = '\0'; ++ dash[type_e] = '\0'; ++ dash[source_e] = '\0'; ++ unescape_tab (dash + source_s); ++ unescape_tab (line + target_s); ++ unescape_tab (line + mntroot_s); ++ ++ me = xmalloc (sizeof *me); ++ ++ me->me_devname = xstrdup (dash + source_s); ++ me->me_mountdir = xstrdup (line + target_s); ++ me->me_mntroot = xstrdup (line + mntroot_s); ++ me->me_type = xstrdup (dash + type_s); ++ me->me_type_malloced = 1; ++ me->me_dev = makedev (devmaj, devmin); ++ /* we pass "false" for the "Bind" option as that's only ++ significant when the Fs_type is "none" which will not be ++ the case when parsing "/proc/self/mountinfo", and only ++ applies for static /etc/mtab files. */ ++ me->me_dummy = ME_DUMMY (me->me_devname, me->me_type, false); ++ me->me_remote = ME_REMOTE (me->me_devname, me->me_type); ++ ++ /* Add to the linked list. */ ++ *mtail = me; ++ mtail = &me->me_next; ++ } ++ ++ free (line); ++ ++ if (ferror (fp)) ++ { ++ int saved_errno = errno; ++ fclose (fp); ++ errno = saved_errno; ++ goto free_then_fail; ++ } ++ ++ if (fclose (fp) == EOF) ++ goto free_then_fail; + } ++ else /* fallback to /proc/self/mounts (/etc/mtab). */ ++#endif /* __linux __ */ ++ { ++ struct mntent *mnt; ++ char const *table = MOUNTED; + +- if (endmntent (fp) == 0) +- goto free_then_fail; ++ fp = setmntent (table, "r"); ++ if (fp == NULL) ++ return NULL; ++ ++ while ((mnt = getmntent (fp))) ++ { ++ bool bind = hasmntopt (mnt, "bind"); ++ ++ me = xmalloc (sizeof *me); ++ me->me_devname = xstrdup (mnt->mnt_fsname); ++ me->me_mountdir = xstrdup (mnt->mnt_dir); ++ me->me_mntroot = NULL; ++ me->me_type = xstrdup (mnt->mnt_type); ++ me->me_type_malloced = 1; ++ me->me_dummy = ME_DUMMY (me->me_devname, me->me_type, bind); ++ me->me_remote = ME_REMOTE (me->me_devname, me->me_type); ++ me->me_dev = dev_from_mount_options (mnt->mnt_opts); ++ ++ /* Add to the linked list. */ ++ *mtail = me; ++ mtail = &me->me_next; ++ } ++ ++ if (endmntent (fp) == 0) ++ goto free_then_fail; ++ } + } + #endif /* MOUNTED_GETMNTENT1. */ + +@@ -473,6 +602,7 @@ + me = xmalloc (sizeof *me); + me->me_devname = xstrdup (fsp->f_mntfromname); + me->me_mountdir = xstrdup (fsp->f_mntonname); ++ me->me_mntroot = NULL; + me->me_type = fs_type; + me->me_type_malloced = 0; + me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); +@@ -499,6 +629,7 @@ + me = xmalloc (sizeof *me); + me->me_devname = xstrdup (fsp->f_mntfromname); + me->me_mountdir = xstrdup (fsp->f_mntonname); ++ me->me_mntroot = NULL; + me->me_type = xstrdup (fsp->f_fstypename); + me->me_type_malloced = 1; + me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); +@@ -525,6 +656,7 @@ + me = xmalloc (sizeof *me); + me->me_devname = xstrdup (fsd.fd_req.devname); + me->me_mountdir = xstrdup (fsd.fd_req.path); ++ me->me_mntroot = NULL; + me->me_type = gt_names[fsd.fd_req.fstype]; + me->me_type_malloced = 0; + me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); +@@ -623,6 +755,7 @@ + me->me_devname = xstrdup (fi.device_name[0] != '\0' + ? fi.device_name : fi.fsh_name); + me->me_mountdir = xstrdup (re != NULL ? re->name : fi.fsh_name); ++ me->me_mntroot = NULL; + me->me_type = xstrdup (fi.fsh_name); + me->me_type_malloced = 1; + me->me_dev = fi.dev; +@@ -672,6 +805,7 @@ + me = xmalloc (sizeof *me); + me->me_devname = xstrdup (stats[counter].f_mntfromname); + me->me_mountdir = xstrdup (stats[counter].f_mntonname); ++ me->me_mntroot = NULL; + me->me_type = xstrdup (FS_TYPE (stats[counter])); + me->me_type_malloced = 1; + me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); +@@ -708,6 +842,7 @@ + strcpy (me->me_devname + 5, mnt.mt_dev); + # endif + me->me_mountdir = xstrdup (mnt.mt_filsys); ++ me->me_mntroot = NULL; + me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ + me->me_type = ""; + me->me_type_malloced = 0; +@@ -755,6 +890,7 @@ + me = xmalloc (sizeof *me); + me->me_devname = xstrdup ((*ent)->mt_resource); + me->me_mountdir = xstrdup ((*ent)->mt_directory); ++ me->me_mntroot = NULL; + me->me_type = xstrdup ((*ent)->mt_fstype); + me->me_type_malloced = 1; + me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); +@@ -817,6 +953,7 @@ + me = xmalloc (sizeof *me); + me->me_devname = xstrdup (mnt.mnt_special); + me->me_mountdir = xstrdup (mnt.mnt_mountp); ++ me->me_mntroot = NULL; + me->me_type = xstrdup (mnt.mnt_fstype); + me->me_type_malloced = 1; + me->me_dummy = MNT_IGNORE (&mnt) != 0; +@@ -893,6 +1030,7 @@ + vmp->vmt_data[VMT_OBJECT].vmt_off); + } + me->me_mountdir = xstrdup (thisent + vmp->vmt_data[VMT_STUB].vmt_off); ++ me->me_mntroot = NULL; + me->me_type = xstrdup (fstype_to_string (vmp->vmt_gfstype)); + me->me_type_malloced = 1; + options = thisent + vmp->vmt_data[VMT_ARGS].vmt_off; +@@ -936,6 +1074,7 @@ + me = xmalloc (sizeof *me); + me->me_devname = xstrdup (dev.f_mntfromname); + me->me_mountdir = xstrdup (dev.f_mntonname); ++ me->me_mntroot = NULL; + me->me_type = xstrdup (dev.f_fstypename); + me->me_type_malloced = 1; + me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); +@@ -978,6 +1117,7 @@ + { + free (me->me_devname); + free (me->me_mountdir); ++ free (me->me_mntroot); + if (me->me_type_malloced) + free (me->me_type); + free (me); +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/lib/mountlist.h coreutils-8.23/lib/mountlist.h +--- coreutils-8.23~/lib/mountlist.h 2015-10-01 17:08:13.000000000 -0500 ++++ coreutils-8.23/lib/mountlist.h 2015-10-01 17:10:23.778341177 -0500 +@@ -27,6 +27,8 @@ + { + char *me_devname; /* Device node name, including "/dev/". */ + char *me_mountdir; /* Mount point directory name. */ ++ char *me_mntroot; /* Directory on filesystem of device used */ ++ /* as root for the (bind) mount. */ + char *me_type; /* "nfs", "4.2", etc. */ + dev_t me_dev; /* Device number of me_mountdir. */ + unsigned int me_dummy : 1; /* Nonzero for dummy file systems. */ +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/src/df.c coreutils-8.23/src/df.c +--- coreutils-8.23~/src/df.c 2015-10-01 17:09:13.000000000 -0500 ++++ coreutils-8.23/src/df.c 2015-10-01 17:10:23.782341184 -0500 +@@ -622,13 +622,16 @@ + struct devlist *devlist; + struct mount_entry *discard_me = NULL; + +- /* TODO: On Linux we might avoid this stat() and another in get_dev() ++ /* Avoid stating remote file systems as that may hang. ++ TODO: On Linux we might avoid this stat() and another in get_dev() + by using the device IDs available from /proc/self/mountinfo. + read_file_system_list() could populate me_dev from those + for efficiency and accuracy. */ +- if (-1 == stat (me->me_mountdir, &buf)) ++ if ((me->me_remote && show_local_fs) ++ || -1 == stat (me->me_mountdir, &buf)) + { +- /* Stat failed - add ME to be able to complain about it later. */ ++ /* If remote, and showing just local, add ME for filtering later. ++ If stat failed; add ME to be able to complain about it later. */ + buf.st_dev = me->me_dev; + } + else +@@ -640,6 +643,13 @@ + + if (devlist) + { ++ bool target_nearer_root = strlen (devlist->me->me_mountdir) ++ > strlen (me->me_mountdir); ++ /* With bind mounts, prefer items nearer the root of the device */ ++ bool target_nearer_device_root = ! (devlist->me->me_mntroot != NULL ++ && me->me_mntroot != NULL ++ && (strlen (devlist->me->me_mntroot) ++ < strlen(me->me_mntroot))); + if (me->me_remote && devlist->me->me_remote + && ! STREQ (devlist->me->me_devname, me->me_devname)) + { +@@ -650,9 +660,8 @@ + else if ((strchr (me->me_devname, '/') + /* let "real" devices with '/' in the name win. */ + && ! strchr (devlist->me->me_devname, '/')) +- /* let a shorter mountdir win. */ +- || (strlen (devlist->me->me_mountdir) +- > strlen (me->me_mountdir)) ++ /* let points towards the root of the device win. */ ++ || (target_nearer_root && target_nearer_device_root) + /* let an entry overmounted on a new device win... */ + || (! STREQ (devlist->me->me_devname, me->me_devname) + /* ... but only when matching an existing mnt point, +} +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/tests/df/no-mtab-status.sh coreutils-8.23/tests/df/no-mtab-status.sh +--- coreutils-8.23~/tests/df/no-mtab-status.sh 2015-10-01 17:08:13.000000000 -0500 ++++ coreutils-8.23/tests/df/no-mtab-status.sh 2015-10-01 17:10:23.782341184 -0500 +@@ -21,7 +21,8 @@ + print_ver_ df + require_gcc_shared_ + +-df || skip_ "df fails" ++# Protect against inaccessible remote mounts etc. ++timeout 10 df || skip_ "df fails" + + grep '^#define HAVE_MNTENT_H 1' $CONFIG_HEADER > /dev/null \ + || skip_ "no mntent.h available to confirm the interface" +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/tests/df/skip-rootfs.sh coreutils-8.23/tests/df/skip-rootfs.sh +--- coreutils-8.23~/tests/df/skip-rootfs.sh 2015-10-01 17:08:13.000000000 -0500 ++++ coreutils-8.23/tests/df/skip-rootfs.sh 2015-10-01 17:10:23.782341184 -0500 +@@ -19,7 +19,8 @@ + . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src + print_ver_ df + +-df || skip_ "df fails" ++# Protect against inaccessible remote mounts etc. ++timeout 10 df || skip_ "df fails" + + # Verify that rootfs is in mtab (and shown when the -a option is specified). + df -a >out || fail=1 +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' coreutils-8.23~/tests/df/total-verify.sh coreutils-8.23/tests/df/total-verify.sh +--- coreutils-8.23~/tests/df/total-verify.sh 2015-10-01 17:08:13.000000000 -0500 ++++ coreutils-8.23/tests/df/total-verify.sh 2015-10-01 17:10:23.782341184 -0500 +@@ -20,7 +20,8 @@ + print_ver_ df + require_perl_ + +-df || skip_ "df fails" ++# Protect against inaccessible remote mounts etc. ++timeout 10 df || skip_ "df fails" + + cat <<\EOF > check-df || framework_failure_ + my ($total, $used, $avail) = (0, 0, 0); --- coreutils-8.23.orig/debian/realpath.copyright +++ coreutils-8.23/debian/realpath.copyright @@ -0,0 +1,3 @@ +The empty package realpath is created by Michael Stone +and either is in the public domain or too trivial to copyright. + --- coreutils-8.23.orig/debian/rules +++ coreutils-8.23/debian/rules @@ -0,0 +1,213 @@ +#!/usr/bin/make -f +# This file is public domain software, originally written by Joey Hess. + +# Uncomment this to turn on verbose mode. +export DH_VERBOSE=1 + +# work around dpkg changes +DEB_HOST_ARCH_CPU := $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU 2>/dev/null) +DEB_HOST_ARCH_OS := $(shell dpkg-architecture -qDEB_HOST_ARCH_OS 2>/dev/null) +ifeq ($(DEB_HOST_ARCH_CPU),) + DEB_HOST_ARCH_CPU := $(shell dpkg-architecture -qDEB_HOST_GNU_CPU) + ifeq ($(DEB_HOST_ARCH_CPU),x86_64) + DEB_HOST_ARCH_CPU := amd64 + endif +endif +ifeq ($(DEB_HOST_ARCH_OS),) + DEB_HOST_ARCH_OS := $(subst -gnu,,$(shell dpkg-architecture -qDEB_HOST_GNU_SYSTEM)) + ifeq ($(DEB_HOST_ARCH_OS),gnu) + DEB_HOST_ARCH_OS := hurd + endif +endif + +# implement no optimization build option +CFLAGS = $(shell dpkg-buildflags --get CFLAGS) +LDFLAGS = $(shell dpkg-buildflags --get LDFLAGS) +CPPFLAGS = $(shell dpkg-buildflags --get CPPFLAGS) +CFLAGS += -DSYSLOG_SUCCESS -DSYSLOG_FAILURE -DSYSLOG_NON_ROOT + +# Renesas SH(sh4) need -mieee option. +ifeq ($(DEB_HOST_ARCH_CPU),sh4) + CFLAGS += -mieee +endif + +ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE)) + cross_build := yes + CROSS_CONFIGURE_FLAGS = --cache-file=./config.cache +endif + +# programs to include/not include +BUILDPROG_OPTS := --enable-install-program=arch + +BIN_PROGS = cat chgrp chmod chown cp date dd df dir echo false ln ls mkdir \ + mknod mv pwd readlink rm rmdir vdir sleep stty sync touch true uname \ + mktemp +d=debian/coreutils + +default: binary + +configure: patch configure-stamp +configure-stamp: + dh_testdir + dh_autotools-dev_updateconfig + +ifeq ($(cross_build),yes) + echo 'fu_cv_sys_stat_statfs2_bsize=yes' > config.cache +endif + CFLAGS="$(CFLAGS)" CPPFLAGS="$(CPPFLAGS)" \ + LDFLAGS='$(LDFLAGS)' ./configure \ + --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE) \ + --prefix=/usr -v \ + --libexecdir=/usr/lib \ + --infodir=/usr/share/info --mandir=/usr/share/man \ + --disable-silent-rules \ + $(BUILDPROG_OPTS) + + echo configured > configure-stamp + +build: build-arch +build-arch: patch configure build-stamp + +build-indep: + # do nothing + +build-stamp: + dh_testdir +ifeq ($(cross_build),yes) + $(MAKE) run_help2man=$(CURDIR)/man/dummy-man +else + $(MAKE) +ifeq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS))) + $(MAKE) check VERBOSE=yes +endif +endif # cross build + echo built > build-stamp + +clean: unpatch clean1 +clean1: + dh_testdir + rm -f build-stamp configure-stamp + rm -rf debian/buildinfo + make distclean || true + dh_autotools-dev_restoreconfig + rm -f config.log + rm -f config.status + dh_clean + +patch: patch-stamp +patch-stamp: + dpatch apply-all + dpatch cat-all > patch-stamp + touch patch-stamp + +unpatch: + dpatch deapply-all + rm -rf patch-stamp debian-patched + +install-arch: build-arch + dh_testdir + dh_testroot + dh_clean -a -k + dh_installdirs -a + +ifeq ($(cross_build),yes) + $(MAKE) install DESTDIR=$(CURDIR)/$(d) EXTRA_MANS= +else + $(MAKE) install DESTDIR=$(CURDIR)/$(d) +endif + + # some things go in root rather than usr + for f in $(BIN_PROGS); do \ + mv $(d)/usr/bin/$$f $(d)/bin/$$f; \ + done + + # backward compatability + ln -s /usr/bin/md5sum $(d)/usr/bin/md5sum.textutils + ln -s /usr/share/man/man1/md5sum.1 $(d)/usr/share/man/man1/md5sum.textutils.1 +ifneq ($(DEB_HOST_ARCH_OS),hurd) + # touch used to be in /usr/bin, don't break scripts + ln -s /bin/touch $(d)/usr/bin/touch +endif + + # remove stuff provided by other packages +ifeq ($(DEB_HOST_ARCH_OS),linux) + # kill from procps is linux-specific + rm -f $(d)/usr/bin/kill $(d)/usr/share/man/man1/kill.1 +else + mv $(d)/usr/bin/kill $(d)/bin +endif + rm -f $(d)/usr/bin/hostname $(d)/usr/share/man/man1/hostname.1 + rm -f $(d)/usr/bin/uptime $(d)/usr/share/man/man1/uptime.1 + + # the [ program doesn't have its own man page yet + ln -s test.1 $(d)/usr/share/man/man1/[.1 + + # gnu thinks chroot is in bin, debian thinks it's in sbin + install -d $(d)/usr/sbin $(d)/usr/share/man/man8 + mv $(d)/usr/bin/chroot $(d)/usr/sbin/chroot + sed s/\"1\"/\"8\"/1 $(d)/usr/share/man/man1/chroot.1 > $(d)/usr/share/man/man8/chroot.8 + rm $(d)/usr/share/man/man1/chroot.1 + + # some build environments will leave a dangling info dir + rm -f $(d)/usr/share/info/dir + + # unneeded + rm -rf $(d)/usr/share/locale/*/LC_TIME + + cp AUTHORS \ + NEWS README \ + THANKS \ + TODO \ + $(d)/usr/share/doc/coreutils + + dh_install -a + +install-indep: build-indep + dh_testdir + dh_testroot + dh_clean -i -k + dh_installdirs -i + dh_install -i + +# Build architecture-independent files here. +binary-indep: build-indep install + dh_testdir -i + dh_testroot -i + dh_installchangelogs -i + dh_installdocs -i + dh_buildinfo + dh_installexamples -i + dh_installinfo -i + dh_installman -i + dh_link -i + dh_compress -i + dh_fixperms -i + dh_installdeb -i + dh_gencontrol -i + dh_md5sums -i + dh_builddeb -i + +# Build architecture-dependent files here. +binary-arch: build-arch install-arch + dh_testdir -a + dh_testroot -a + dh_installchangelogs -a ChangeLog + dh_installdocs -a + dh_buildinfo -a + dh_installexamples -a + dh_installinfo -a doc/coreutils.info + dh_installman -a +ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) + dh_strip -a +endif + dh_link -a + dh_compress -a + dh_fixperms -a + dh_installdeb -a + dh_shlibdeps -a + dh_gencontrol -a + dh_md5sums -a + dh_builddeb -a + +binary: binary-indep binary-arch +.PHONY: build build-arch build-indep clean binary-indep binary-arch binary install patch unpatch clean1 --- coreutils-8.23.orig/debian/tests/control +++ coreutils-8.23/debian/tests/control @@ -0,0 +1,2 @@ +Tests: upstream +Depends: coreutils, acl, strace --- coreutils-8.23.orig/debian/tests/upstream +++ coreutils-8.23/debian/tests/upstream @@ -0,0 +1,352 @@ +#!/bin/sh +# Run a subset of the upstream tests which work in an unbuilt tree against the +# system installed package; these have been selected with +# +# for t in tests/*/*; do if env LANG= LANGUAGE= LC_ALL=C CONFIG_HEADER=/dev/null $t >/dev/null 2>&1; then echo ${t#tests/}; fi; done + +# plus remove all tests depending on test binaries (getlimits, ginstall). +set -e + +# ensure that we do not stumble over translations +unset LANG +unset LANGUAGE +export LC_ALL=C +fails=0 + +for test in \ + chgrp/basic.sh \ + chgrp/default-no-deref.sh \ + chgrp/deref.sh \ + chgrp/no-x.sh \ + chgrp/posix-H.sh \ + chgrp/recurse.sh \ + chmod/c-option.sh \ + chmod/equal-x.sh \ + chmod/equals.sh \ + chmod/inaccessible.sh \ + chmod/no-x.sh \ + chmod/octal.sh \ + chmod/setgid.sh \ + chmod/silent.sh \ + chmod/thru-dangling.sh \ + chmod/umask-x.sh \ + chmod/usage.sh \ + chown/deref.sh \ + chown/preserve-root.sh \ + cp/abuse.sh \ + cp/attr-existing.sh \ + cp/backup-1.sh \ + cp/backup-dir.sh \ + cp/backup-is-src.sh \ + cp/cp-HL.sh \ + cp/cp-deref.sh \ + cp/cp-i.sh \ + cp/cp-mv-backup.sh \ + cp/cp-parents.sh \ + cp/deref-slink.sh \ + cp/dir-rm-dest.sh \ + cp/dir-slash.sh \ + cp/dir-vs-file.sh \ + cp/existing-perm-dir.sh \ + cp/fail-perm.sh \ + cp/into-self.sh \ + cp/link-deref.sh \ + cp/link-no-deref.sh \ + cp/link-preserve.sh \ + cp/link-symlink.sh \ + cp/link.sh \ + cp/no-deref-link1.sh \ + cp/no-deref-link2.sh \ + cp/no-deref-link3.sh \ + cp/preserve-link.sh \ + cp/preserve-mode.sh \ + cp/proc-short-read.sh \ + cp/proc-zero-len.sh \ + cp/r-vs-symlink.sh \ + cp/reflink-perm.sh \ + cp/same-file.sh \ + cp/slink-2-slink.sh \ + cp/sparse-to-pipe.sh \ + cp/sparse.sh \ + cp/special-f.sh \ + cp/src-base-dot.sh \ + cp/symlink-slash.sh \ + cp/thru-dangling.sh \ + dd/ascii.sh \ + dd/bytes.sh \ + dd/direct.sh \ + dd/misc.sh \ + dd/no-allocate.sh \ + dd/nocache.sh \ + dd/not-rewound.sh \ + dd/reblock.sh \ + dd/skip-seek2.sh \ + dd/sparse.sh \ + dd/stderr.sh \ + dd/unblock-sync.sh \ + df/df-P.sh \ + df/df-output.sh \ + df/header.sh \ + df/unreadable.sh \ + du/8gb.sh \ + du/basic.sh \ + du/bigtime.sh \ + du/deref-args.sh \ + du/deref.sh \ + du/exclude.sh \ + du/files0-from-dir.sh \ + du/hard-link.sh \ + du/inacc-dest.sh \ + du/inacc-dir.sh \ + du/inodes.sh \ + du/long-from-unreadable.sh \ + du/long-sloop.sh \ + du/max-depth.sh \ + du/no-deref.sh \ + du/no-x.sh \ + du/restore-wd.sh \ + du/slash.sh \ + du/threshold.sh \ + du/trailing-slash.sh \ + du/two-args.sh \ + fmt/goal-option.sh \ + fmt/long-line.sh \ + id/uid.sh \ + id/zero.sh \ + install/trap.sh \ + ln/backup-1.sh \ + ln/hard-backup.sh \ + ln/hard-to-sym.sh \ + ln/relative.sh \ + ln/sf-1.sh \ + ln/slash-decorated-nonexistent-dest.sh \ + ln/target-1.sh \ + ls/abmon-align.sh \ + ls/block-size.sh \ + ls/color-clear-to-eol.sh \ + ls/color-dtype-dir.sh \ + ls/color-norm.sh \ + ls/color-term.sh \ + ls/dangle.sh \ + ls/dired.sh \ + ls/file-type.sh \ + ls/follow-slink.sh \ + ls/infloop.sh \ + ls/inode.sh \ + ls/m-option.sh \ + ls/multihardlink.sh \ + ls/no-arg.sh \ + ls/proc-selinux-segfault.sh \ + ls/recursive.sh \ + ls/root-rel-symlink-color.sh \ + ls/rt-1.sh \ + ls/slink-acl.sh \ + ls/stat-dtype.sh \ + ls/stat-failed.sh \ + ls/stat-free-symlinks.sh \ + ls/stat-vs-dirent.sh \ + ls/symlink-slash.sh \ + ls/time-style-diag.sh \ + ls/x-option.sh \ + misc/cat-proc.sh \ + misc/chcon-fail.sh \ + misc/csplit-1000.sh \ + misc/csplit-heap.sh \ + misc/csplit.sh \ + misc/date-sec.sh \ + misc/env-null.sh \ + misc/false-status.sh \ + misc/head-pos.sh \ + misc/head-write-error.sh \ + misc/invalid-opt.pl \ + misc/ls-time.sh \ + misc/md5sum-bsd.sh \ + misc/md5sum-parallel.sh \ + misc/mknod.sh \ + misc/nice-fail.sh \ + misc/nice.sh \ + misc/nl.sh \ + misc/nohup.sh \ + misc/nproc-avail.sh \ + misc/nproc-positive.sh \ + misc/od-N.sh \ + misc/od-endian.sh \ + misc/od-float.sh \ + misc/od-multiple-t.sh \ + misc/od-x8.sh \ + misc/pathchk1.sh \ + misc/printenv.sh \ + misc/printf-hex.sh \ + misc/printf-surprise.sh \ + misc/ptx-overrun.sh \ + misc/pwd-option.sh \ + misc/readlink-fp-loop.sh \ + misc/readlink-root.sh \ + misc/realpath.sh \ + misc/runcon-no-reorder.sh \ + misc/shred-exact.sh \ + misc/shred-negative.sh \ + misc/shred-passes.sh \ + misc/shred-remove.sh \ + misc/sort-NaN-infloop.sh \ + misc/sort-compress.sh \ + misc/sort-debug-keys.sh \ + misc/sort-debug-warn.sh \ + misc/sort-exit-early.sh \ + misc/sort-merge-fdlimit.sh \ + misc/sort-month.sh \ + misc/sort-rand.sh \ + misc/sort-unique.sh \ + misc/sort-version.sh \ + misc/stat-fmt.sh \ + misc/stat-hyphen.sh \ + misc/stat-mount.sh \ + misc/stat-nanoseconds.sh \ + misc/stat-slash.sh \ + misc/stty-invalid.sh \ + misc/stty-row-col.sh \ + misc/sum-sysv.sh \ + misc/tac-2-nonseekable.sh \ + misc/tee-dash.sh \ + misc/tee.sh \ + misc/timeout-group.sh \ + misc/timeout.sh \ + misc/tr-case-class.sh \ + misc/truncate-dangling-symlink.sh \ + misc/truncate-dir-fail.sh \ + misc/truncate-fail-diag.sh \ + misc/truncate-fifo.sh \ + misc/truncate-no-create-missing.sh \ + misc/truncate-parameters.sh \ + misc/truncate-relative.sh \ + misc/uniq-perf.sh \ + misc/wc-files0.sh \ + misc/wc-parallel.sh \ + mkdir/p-1.sh \ + mkdir/p-2.sh \ + mkdir/p-3.sh \ + mkdir/p-acl.sh \ + mkdir/p-slashdot.sh \ + mkdir/p-thru-slink.sh \ + mkdir/p-v.sh \ + mkdir/parents.sh \ + mkdir/perm.sh \ + mkdir/special-1.sh \ + mkdir/t-slash.sh \ + mv/atomic.sh \ + mv/atomic2.sh \ + mv/backup-dir.sh \ + mv/childproof.sh \ + mv/diag.sh \ + mv/dir-file.sh \ + mv/dir2dir.sh \ + mv/dup-source.sh \ + mv/force.sh \ + mv/hard-2.sh \ + mv/hard-3.sh \ + mv/hard-4.sh \ + mv/hard-verbose.sh \ + mv/i-2.sh \ + mv/i-3.sh \ + mv/i-4.sh \ + mv/i-5.sh \ + mv/i-link-no.sh \ + mv/into-self-3.sh \ + mv/into-self-4.sh \ + mv/into-self.sh \ + mv/mv-n.sh \ + mv/no-target-dir.sh \ + mv/perm-1.sh \ + mv/symlink-onto-hardlink-to-self.sh \ + mv/symlink-onto-hardlink.sh \ + mv/trailing-slash.sh \ + mv/update.sh \ + readlink/can-e.sh \ + readlink/can-f.sh \ + readlink/can-m.sh \ + readlink/multi.sh \ + readlink/rl-1.sh \ + rm/cycle.sh \ + rm/d-1.sh \ + rm/d-2.sh \ + rm/d-3.sh \ + rm/dangling-symlink.sh \ + rm/deep-1.sh \ + rm/deep-2.sh \ + rm/dir-no-w.sh \ + rm/dir-nonrecur.sh \ + rm/dot-rel.sh \ + rm/empty-inacc.sh \ + rm/f-1.sh \ + rm/fail-eacces.sh \ + rm/i-1.sh \ + rm/i-never.sh \ + rm/i-no-r.sh \ + rm/ignorable.sh \ + rm/interactive-always.sh \ + rm/interactive-once.sh \ + rm/ir-1.sh \ + rm/isatty.sh \ + rm/one-file-system2.sh \ + rm/r-1.sh \ + rm/r-2.sh \ + rm/r-3.sh \ + rm/r-4.sh \ + rm/readdir-bug.sh \ + rm/rm1.sh \ + rm/rm2.sh \ + rm/rm3.sh \ + rm/rm4.sh \ + rm/rm5.sh \ + rm/sunos-1.sh \ + rm/unread2.sh \ + rm/unread3.sh \ + rm/v-slash.sh \ + rmdir/fail-perm.sh \ + rmdir/ignore.sh \ + rmdir/t-slash.sh \ + split/additional-suffix.sh \ + split/b-chunk.sh \ + split/filter.sh \ + split/guard-input.sh \ + split/l-chunk.sh \ + split/line-bytes.sh \ + split/lines.sh \ + split/numeric.sh \ + split/r-chunk.sh \ + split/suffix-auto-length.sh \ + split/suffix-length.sh \ + tail-2/F-vs-rename.sh \ + tail-2/flush-initial.sh \ + tail-2/follow-name.sh \ + tail-2/follow-stdin.sh \ + tail-2/infloop-1.sh \ + tail-2/inotify-hash-abuse.sh \ + tail-2/inotify-hash-abuse2.sh \ + tail-2/pipe-f.sh \ + tail-2/pipe-f2.sh \ + tail-2/proc-ksyms.sh \ + tail-2/start-middle.sh \ + tail-2/tail-n0f.sh \ + tail-2/wait.sh \ + touch/60-seconds.sh \ + touch/dangling-symlink.sh \ + touch/dir-1.sh \ + touch/empty-file.sh \ + touch/fail-diag.sh \ + touch/fifo.sh \ + touch/no-create-missing.sh \ + touch/no-rights.sh \ + touch/not-owner.sh \ + touch/obsolescent.sh \ + touch/read-only.sh \ + touch/relative.sh \ + touch/trailing-slash.sh \ +; do + echo "$test" + chmod a+x "tests/$test" + OUT=$(tests/$test 2>&1 9>&1) || [ $? = 77 ] || { fails=$((fails+1)); echo "FAIL:"; echo "$OUT"; } +done + +echo $fails tests failed +exit $fails --- coreutils-8.23.orig/debian/watch +++ coreutils-8.23/debian/watch @@ -0,0 +1,3 @@ +version=3 +opts=uversionmangle=s/\.(gz|bz2|lzma|xz)$// \ +ftp://ftp.gnu.org/gnu/coreutils/coreutils-([\d+\.]+)\.tar\.(gz|bz2|lzma|xz) debian uupdate