Changes in release 4.1:
[4.0p]
* various tools: quote multibyte characters correctly in diagnostics
* mv: portability fix for alpha
* dd: portability fix
* unified lib/: now that directory and most of the configuration framework
  is common between fileutils, textutils, and sh-utils
[4.0o]
* Include lib/nanosleep.h.
[4.0n]
* cp, install, ln, and mv: when making backup files in verbose mode, these
  commands now print the backup file name on the same line as the rest of the
  information, e.g., `a -> b (backup: b.~13~)' rather than on a separate line
  as all but ln used to do.  ln didn't output the backup file name at all.
[4.0m]
* mv accepts new option: --strip-trailing-slashes (soon, many other
  programs will, too)
* df no longer hangs when there is inaccessible mount point unrelated to PATH
* rmdir --verbose no longer prints extra, bogus diagnosic upon failure
* fix df bug that made it print bogus values in the `Use%' column.
* touch -d once again parses dates with `hh:mm ZONE' time zone info.
[4.0l]
* ls -l honors a trailing slash on a symlink argument, per POSIX.
* shred no longer appears to infloop when asked to remove files in
  unwritable directories
* `ls -ul' and `ls -uc' sort by name once again, as they should
[4.0k]
* mv may now be used to move a file onto a symlink to itself when that
  symlink is on a separate partition.  With fileutils-4.0j, it would
  fail with a diagnostic saying they were the same file.
* touch would fail with the misleading diagnostic `no such file' when asked
  to create a file in an unwritable directory.  Now it says something like
  `permission denied' or `read-only file system'.
[4.0j]
* mkdir may now be used to set special bits  e.g., `mkdir -m o+t dir' works
* touch can now change the time(s) of a file you own even if you don't have
  read or write access to it
* rm no longer dumps core after warning about directory cycles
* mv now refuses to move a file onto a symlink to itself when that symlink
  is on a separate partition.  Before, it would remove the file and leave
  only the symlink.
* `install -d -g foo 1/2' now sets the `group' of the final component as well
  as that of the leading one.
* df, du, and ls no longer divide by zero when an invalid block size is
  specified through an environment variable
* under certain conditions, chgrp would fail to affect files referenced
  through symlinks.  Now it does.
* ln now makes hard links to symlinks on systems that support it.
* touch: no longer infloop on dangling symlinks
* cp, install, ln, mv: deprecate the --version-control option.  Use --backup's
  new optional argument instead.  The old option still works, but now evokes a
  warning.
* cp, install, ln, mv: accept new option: --target-directory=DIR
* chgrp: accept new option, --dereference.  --no-dereference is now the default.
* New ls option --quoting-style=locale acts like --quoting-style=c, except
  with locale-specific quoting symbols (` and ' by default) instead of ".
* `df DIR' is less likely to hang due to bad NFS mounts
* As per POSIX.2, `df -P' now uses ceiling rather than rounding, and its
  header now says `1024-blocks ... Capacity' instead of `1k-blocks ... Use%'.
[4.0i]
* `cp -f FILE FILE' and `mv -f FILE FILE' no longer remove FILE
* touch works once again (DST-wise) when certain `--date DATE-TIME'
  values are specified.
* shred's -u option (short form of --remove) is now accepted
[4.0h]
* cp --one-file-system (-x) no longer crosses filesystem boundaries.
* touch can once again operate on directories
[4.0g]
* New large-file support for AIX and HP-UX, and for cross-compiles.
* shred's default options are now suitable for devices, not files, since
  shred is more reliable on devices.  shred now does not remove by default;
  the old -p or --preserve option was inverted and renamed to -u or --remove.
* shred -u now attempts to truncate devices before removing them.
* shred -v no longer outputs carriage-returns; shred -vv has no extra effect;
  shred -v now outputs to stderr.
* shred now tries to find the size of a non-regular file by seeking to its end.
* dd now opens the output file for *read* access only if `seek=' is used.
[4.0f]
* `ls --color' no longer segfaults
* dd works once again
[4.0e]
* shred --devices option renamed to -D so that -d, -i and -r can be
  compatible with rm.
* shred -s/--size=N option added to specify the size of the object to be
  shredded.
* `shred -' now shreds stdout rather than stdin.  This is incompatible with -v.
* shred now does not need to read from its output file, so opens it O_WRONLY
* `ls -l' uses `+' to designate each file that has a custom ACL
* eliminate race condition that could make touch truncate a nonempty file
* No longer use *_unlocked I/O macros on systems (like solaris5.5.1) where
  they're not declared, so selected executables (e.g., rm) that are linked
  with shared libraries will once again run on solaris5.6 systems.
[4.0d (aka 4.1-b3)]
* ls recognizes solaris 2 `doors'
* new program: shred
* ln: Allow creation of a hard link to a dangling symlink
* cp, mv, install: --verbose now prints a message for each backup-related
  renaming
* portability fixes for copy.c's code to detect move-directory-into-self
* upgrade to automake-1.3b
* upgrade to autoconf-2.13, and...
* remove some of the kludges in m4/*.m4 that permitted
[4.1-b2]
* concurrent `mkdir -p' processes no longer fail when creating the
  same hierarchy
* argmatch.c has been fixed so that the unambiguous usage `ls --color=n'
  no longer evokes an error.
* now, specifying an improper argument for an option that accepts enumerated
  values evokes diagnostics like this:
    $ src/touch --time=x file
    src/touch: invalid argument `x' for `--time'
    Valid arguments are:
      - `atime', `access', `use'
      - `mtime', `modify'
    Try `src/touch --help' for more information.
[4.1-b1]
* ls --quoting-style=c prints correct octal escapes for certain nonprinting
  characters in file names.
* fix `ls -R .' formatting bug that broke mktexlsr
* moving a directory into itself is properly diagnosed in more cases
* moving a directory containing hard-linked files now works

Changes in release 4.0:
[4.0-b7]
* rm -rf '' no longer gets a failed assertion on the Hurd
[4.0-b6]
* rm simply fails as it should (rather than segfaulting) for
  `mkdir -m 0100 x; rm -rf x'
[4.0-b5]
* still *more* mktime.c portability tweaks
[4.0-b4]
* mktime.c portability tweak for headers with GNU libc 5.4.44.
[4.0-b3]
* mktime.c works around problems with Digital Unix 4.0A and 4.0D.
* mktime.c handles dates in the spring-forward gap the same way other
  implementations do
* install accepts long option --suffix=SUFFIX
[4.0-b2]
* man/Makefile.maint framework tweaks
* add test for `mv -i' bug
[4.0-pre1]
* fix serious bug whereby `touch a b; echo n|mv -i a b' would remove b.
[3.16z]
* portability tweaks
* avoid `root `cp -a' from Netapp snapshot' corruption
[3.16y]
* `install -D' now works
* distribute maintainer Makefiles in man/
[3.16x]
* man pages are now automatically generated from a combination of --help
  output and the contents of new (though mostly empty), man/*.x files.
[3.16w]
* touch now interprets `-t TIME-DATE' as POSIX specifies
* `ls EMPTY-DIR EMPTY-DIR' once again outputs the directory names
[3.16v]
* portability fixes
* `ls -R EMPTY-DIR' now outputs the name of the directory
[3.16u]
* mv now fails (as it should) upon attempt to move a directory into itself
* `cp -a --one-file-system' now copies any mount point directories it
  encounters on the selected file system.
[3.16t]
* cp (with --update) and ls compare time stamps with subsecond resolution when
  available (e.g., on systems with recent Linux kernels and on Solaris 2.6).
* install once again does the -m-specified chmod *after* running strip
  (this fixes another bug introduced in 3.16o)
[3.16s]
* df accept a new option --local (-l)
* touch works around a system-specific bug so it now affects existing,
  zero-length files on certain systems
* chown now works even on certain SVR3 systems where it used to fail
[3.16r]
* include gettext's m4 macros
* minor cp bug fixed
* non-portable cp tests removed
* --without-included-regex now means don't compile regex.c
* rx support removed
[3.16q]
* `df', `du', and `ls' now accept a new option --block-size=SIZE,
  where SIZE can be a positive integer block size, followed by an
  optional SI prefix (e.g. `k' for kilo, `M' for Mega), followed by an
  optional `B' (for ``byte'', indicating powers of 1024, which is the
  default) or `D' (for ``decimal byte'', indicating powers of 1000).
  SIZE can also be `human-readable' (for -h or --human-readable
  behavior) or `si' (for -H or --si behavior).
* These suffixes can also be used by `dd'; e.g. `dd bs=1MB' is equivalent
  to `dd bs=1048576'.
* The default block size for the `df' command is now obtained from the
  DF_BLOCK_SIZE environment variable or, if that is not set, from BLOCK_SIZE.
  Similarly for `du' and `ls'.
* The output columns of `df' have been adjusted slightly to accommodate
  larger filesystems.
* fix gettext-related link failures seen when configuring certain ways
[3.16p]
* fix install bug introduced in 3.16o
* build/test changes only
[3.16o]
* chown accepts new option, --dereference.  --no-dereference is now the default.
* install now shares core copying code with mv and cp
* mv (between distinct filesystems) now uses more of the core copying code
* fixed a bug or two in mv
* df once again displays negative numbers when that's what's returned
  by get_fs_usage
[3.16n]
* `mv dir dir' once again does *not* remove dir/
* ls accepts new options:
    --indicator-style=none (no indicators, the default)
    --indicator-style=classify (all indicators)
	 (equivalent to -F or --classify)
    --indicator-style=file-type (file type indicators)
	 (equivalent to -p or --file-type)

    --quoting-style=literal (do not quote output)
    --quoting-style=shell (minimally quote output for the shell)
    --quoting-style=shell-always (always quote output with '' for the shell)
    --quoting-style=c (quote output as for a C-language string)
	 (equivalent to -Q or --quote-name)
    --quoting-style=escape (like c but omit enclosing "")
	 (equivalent to -b or --escape)

    --show-control-chars is the opposite of --hide-control-chars
      This option can be useful if output is to a terminal,
      to override the default beahvior of hiding control characters.

* The QUOTING_STYLE environment variable can now be used to specify the
  default value for ls's --quoting-style option.  If not specified,
  the default quoting style is 'literal', but this default may change to
  'shell' in a future version of this package.
* ls's quoting style now affects operands in diagnostics, too.
* ls's --dired option now outputs the quoting style
  using the format of the new --quoting-style option.
* ls's -e or --quote-shell option (introduced in 3.16j) has been removed;
  use --quoting-style=shell to get its functionality.
[3.16m]
* mv can move (and doesn't read) special files
* remove maintainer mode
[3.16l]
* mv can finally move non-regular files between partitions
[3.16k]
* install accepts new option, -D
[3.16j]
* du accepts new options, --exclude=PAT and --exclude-from=FILE (-X FILE)
* ls now quotes file names for the shell by default, if they contain
  characters that need quoting.  Use -N to get the old default behavior.
  The new behavior is also enabled by the new option -e or --quote-shell.
* ln --backup is now consistent with cp and mv in that --force is no longer
  required when the destination is an existing non-directory.
* install accepts new option, --verbose (-v)
* mkdir -p is a lot faster when creating very deep directories on some systems
* rm -i no longer exits with status indicating failure solely because the
  user declines to remove a file
* rm -r is a lot faster on some systems when removing deep hierarchies
* chgrp, chmod, and chown no longer give contradictory output when --verbose
  is used and an operation fails
* ls's multicolumn option now uses variable width columns to conserve
  vertical space
* install accepts new option, --preserve-timestamps
* du --megabytes --total now shows total in megabytes
* ls accepts new option, -h or --human-readable
* df, du, and ls now accept new option, -H or --si, for powers of 1000 not 1024
* df, du, and ls now consistently round to nearest, with ties going to even
* df, du, and ls now use `k' instead of `K' for `kilo',
  and support larger abbreviations T(era), P(eta), E(xa), Z(etta), Y(otta)
* touch -d DATE now works on Unicos
* du accepts new option --max-depth=N
* rmdir accepts new options: --ignore-fail-on-non-empty and --verbose
* on most hosts df, du, and ls now overflow at 2**64 bytes, not 2**31 bytes
* all programs now work on large files on LFS systems like Solaris 2.6 and
  Linux with the pre-2.1 development version of GNU libc.
* df now works with OpenBSD 2.1 beta
* cp -d FILE SYMLINK-TO-FILE doesn't erase FILE.  Now it gives an error.

Changes in release 3.16:
* du --megabytes (-m) works
* ls -l works even on systems with non-POSIX strftime in their C library

Changes in release 3.15:
* touch --date=DATE bug (due to broken getdate.y) has been fixed
* ls -l no longer misformats the date when run in a locale for which the
  locale's abbreviated week-day name (strftime's %a format) is shorter or
  longer than the `normal' three bytes (with LANG=de it's a two-byte string).
* Using --program-prefix no longer applies the prefix twice
* ls --color properly restores color attributes upon completion when the
  normal (`no') color attribute is not the default color.
* with ls -s --color, the `total' and size of the first file are printed
* ls --color stats symlinks and distinguishes between regular symlinks
  and orphan ones.
* cp --preserve preserves owner and group of symlinks on Linux when run
  with EUID == 0
* dircolors no longer accepts --print-data-base (alternate spelling of
  --print-database)

Changes in release 3.14:
* ls --color highlights based on suffix rules only for regular files
* touch --date=DATE accepts dates like those in an RCS log listing, e.g.,
  `1992/11/01 05:44:34'.
* install SRC DST no longer rejects non-regular, non-directory SRC
* df accepts -F as a synonym for -t for compatibility with Solaris
* cp -i /dev/null existing-file now prompts before overwriting the target
* ls --color highlights orphaned symlinks text on terminals that support it
* ls -l honors current locale with respect to abbreviated month names (and,
  with --full-time day names) on systems with a locale-supporting strftime
  function, e.g., ones based on recent versions of the GNU C library
* ls -l recognizes Cray's migrated dmf files.
* chgrp no longer aborts when given a group number larger than INT_MAX
* chgrp now fails when run by root with an unrecognized group name
* when possible, cp -p preserves owner/group even on symlinks in case
  they're in a directory that has the sticky-bit set.
* cp --recursive --parents SRC DEST works when SRC is an absolute file name.

Changes in release 3.13:
* ls properly determines window size on SunOS and Solaris systems
* ls accepts new option --color[=WHEN] where WHEN is `always', `never',
  or `auto'.  --color=never is the default.  --color is equivalent
  to --color=always.
* new program: dircolors
* ls allows 0 as argument to --tabsize (-T) option.  Using --tabsize=0
  inhibits the use of TAB characters for separating columns.
* you can create a backup of FILE with cp --force --backup FILE FILE.  Before,
  that command failed saying that ``FILE' and `FILE' are the same file'.
* uses automake-generated Makefile templates
* chown and chgrp accept new option --no-dereference (-h)
* ln -f FILE FILE fails with a diagnostic rather than silently removing FILE
* when building on systems that have getopt_long (most GNU-oriented ones),
  the system-provided function will be used -- so executables may be a
  little smaller
* cp -p, and mv modify owner and/or group of symlinks on systems
  (like Solaris) that provide the lchown system call.
* df no longer invokes the sync system call by default.  You can use the
  --sync option to make df invoke sync before getting file system sizes.
* internationalized diagnostic messages
* mkdir accepts new option: --verbose
* `cp file D/' uses the full file name `D/file' instead of `D//file'.
* cp --backup a~ a fails instead of silently destroying the source file
* df and du have new options --human-readable (-h) and --megabytes (-m).
* install now honors --backup (-b), --suffix=SUFFIX (-S SUFFIX), and
  --version-control=WORD (-V WORD) options just as cp, ln, and mv do.
* ln --verbose output is less prone to misinterpretation
* ls -o works like -lG;  for compatibility with other versions of ls
* cp has a new option to control creation of sparse files:
  --sparse={auto,always,never}.  --sparse=auto is the default.
* rm -rf '' behaves properly on SunOS 4 systems
* touch: rename long option name, --file, to --reference.
  `touch --file' will continue to work a little longer.
* df fails if the same file system type is both selected and excluded.
* df works around SunOS statfs brokenness wrt filesystems larger than 2GB
* df better handles inconsistent mtab entries
* `ls -lDR dir dir2' works
* `ls -c' does what it's supposed to
* all programs include program name in --version output
* `ls --quote-name' works
* mv properly determines whether src and dest are the same file
  Before, it could (though with very low probability) fail to do the move,
  reporting that distinct source and destination are the same file.
* du --dereference (-L) works with directory symlinks
* du works on SunOS 4 systems even when accounting is enabled
* many programs that convert strings to integers now use strtol or strtoul
  and detect overflow

User-visible changes in release 3.12:
* None.
User-visible changes in release 3.11:
* None.
User-visible changes in release 3.10:
* mkdir -p now ignores arguments that are existing directories.  Before,
  (contrary to POSIX spec) it would attempt to change ownership and/or
  protections of existing directories listed on the command line.  And
  it would fail when such a directory was owned by another user.
* Fix bug in cp that made the commands `mkdir dir; touch foo; cp -P foo dir'
  incorrectly change the permissions on directory, dir.
* df accepts a new option, --no-sync, that inhibits the default invocation
  of the sync system call.
* ls accepts a new option, --dired, that makes emacs' dired mode more efficient
* skeletal texinfo documentation (mainly just the `invoking' nodes)
* ln accepts a new option: --no-dereference (-n).  With this option,
  if the destination command line argument is a symlink to a directory,
  use that as the destination instead of the file in the directory.
* `ln -i no-such-file existing-file' gives a diagnostic and fails.
  Before, if you responded `yes' to the prompt it would both remove
  `existing-file' and fail to make a link.
* du no longer requires read access to all of the directory components
  of the current working directory on systems with fchdir.
* touch -d 'date' is no longer off by one hour.
* New program: sync.
* Fix bug in cp that made the commands `ln -s . s; cp -rd s r' incorrectly
  create `r' as a symlink instead of as a regular file.
* du's -S and -c options now work when used together.
  Before, the grand total was always reported to be zero.

Major changes in release 3.9:
* --help gives a one-line description of each option and shows the
  correspondence between short and long-named options.
* work around systems with BROKEN_STAT_MACROS
* work around problem where $(srcdir)/config.h was used instead of
  ../config.h -- this happened only when building in a subdirectory
  and when config.h remained in $(srcdir) from a previous ./configure.
* GNU chmod treats symlinks the same way other vendor's versions do.
  Now symlinks listed on the command line are processed (they were
  ignored before); the permissions of the dereferenced files are
  changed.  Symlinks encountered in recursive traversals are still
  ignored.  This makes GNU chmod act more like e.g. Sun's.
* configure uses config.h, so DEFS won't exceed preprocessor limits of
  some compilers on the number of symbols defined via -D.
* ls and cp can handle mount points on more systems
* cp, mkdir, and rmdir long option --path renamed to --parents;  --path
  will still work for a while
* cp, ln, and mv convert `cp A B/' to cp A B/A when A is not a directory.
  This change affects only the two-argument form of the commands.  It makes
  such commands fail when the target has a trailing slash but is not a
  directory or symlink to a directory and the source is not a directory.
  They used to succeed, ignoring the implicitly contradictory trailing slash.

Major changes in release 3.8:
* install isn't as likely to produce spurious errors
* avoid redundant compilations for `dir' and `vdir';
* configure properly defines STAT_STATFS2_BSIZE on a Pyramid MIServer
  running OSx 5.1

Major changes in release 3.7:
* none
Major changes in release 3.6:
* `ln -s dir_pathname .' works when the pathname has a trailing slash
* with the --version option programs print the version and exit immediately
* GNU ls -f works like Unix ls -f
* mktime replacement works

Major changes in release 3.5:
* adds support for DEC Alpha under OSF/1
* configuring with gcc uses CFLAGS='-g -O' by default
* all programs accept --help and --version options
* long-named options must be introduced with `--'; `+' is no longer
  accepted since it is incompatible with the POSIX.2 standard
* chmod accepts long-named options
* dd conv=unblock doesn't hang
* new df option --exclude=fstype
* new ls option --full-time

Major changes in release 3.4:
* cp -p and mv preserve setuid and setgid bits
* chown works on systems where sizeof(uid_t) != sizeof(int)
  or sizeof(uid) != sizeof(gid)
* catch errors from spurious slashes at ends of arguments

Major changes in release 3.3:
* df sped up by not calling sync for every filesystem
* df ported to AIX (RS/6000 and PS/2), and SVR2 port fixed
* df -i now also prints the total number of inodes per filesystem
* ls sped up by not reading symlink contents unnecessarily
* du doesn't die on POSIX systems when the root filesystem is NFS mounted
* cp and mv report chown Permission denied errors when run by root
