Release 040603
* pax: Complain if the target directory argument to -rw is missing.
* lc: Made the -1 option work.
* tar: Transparently read archives which were compressed two or more times.
* tar: Automatically enable the B flag if reading from pipes or sockets.
* ed, sed (SVR4.2MP and POSIX versions only); pax: If the RE of a repeated
  substitution command matches the empty string, such as in 's/ *//g', do
  not get in an endless loop but examine the line character-wise.
* find, rm: Use O_DIRECTORY and, if applicable, O_NOFOLLOW when opening
  directories.

Release 040517
* ed: When creating the temporary output file for a regular file fails,
  do not refuse to write but truncate the original file if possible;
  otherwise, really leave the original file intact until the new version
  has been written entirely. Do not use temporary a temporary output
  file if the original file has more than one link, or is a symbolic link.
* diff: Optimized not to start a new process for each differing file when
  operating recursively.
* nawk: Do not recognize hexadecimal numbers, NaN, and infinity strings
  as numeric values even if strtod() of the underlying system does.
* nawk: Pre-POSIX version introduced. Prominent differences are the use
  of full (instead of extended) regular expressions, the lack of CONVFMT
  and of var=value file arguments.
* deroff: New /usr/5bin version derived from Plan 9. The BSD-derived
  version continues to be available in /usr/ucb.
* ed: If used interactively, errors do not affect the exit status.
* cpio, pax: When writing GNU tar format archives, append a '/' character
  to the name of each directory archive member.

Release 040502
* It is now possible to use dietlibc. It will result in losing all
  multibyte character functionality, though. Some commands (e. g.
  units, od -f) do not work correctly because dietlibc currently
  lacks support for the %e printf specifier.
* dd: Close the output file descriptor on exit to catch write errors
  that might happen at this time.
* egrep, fgrep, grep, pg: When an input line is too long to fit in
  memory, do not terminate but virtually split the line.
* more: When running out of memory, restore previous tty state.
* oawk: Fixed a pointer truncation problem that could occur on 64-bit
  platforms with LP64 model, in particular the Itanium (thanks to HP
  and the University of Freiburg for the test machine).
* Use __attribute__ ((used)) with gcc 3.4 to prevent version strings
  for what(1) to disappear with unit-at-a-time optimization.

Release 040420
* sed: Do not enter an endless loop if a '$' address is specified and
  the input is not terminated with a newline character.
* Supporting files changed for the new home page at
  <http://heirloom.sourceforge.net>.
* cpio, pax: When -k is specified and -H is used to select a tar format
  other than the 'pax' format, ignore the size of linked entries (i. e.
  do not expect that 'linkdata' was in effect when the archive was
  created).

Release 040416
* Made it compile with 'bison -y' as yacc implementation.
* cpio, pax: Implemented the 'linkdata' and 'times' option for the pax
  archive format.
* Portability fixes to make it compile on Playstation Linux.
* cpio, pax, tar: When appending to a pax format archive that contains a
  global header (not currently created by Heirloom tools), always override
  the respective fields in new extended headers.
* cpio, pax, tar: When writing to a Sun extended tar format archive, do not
  create SUN.devmajor or SUN.devminor records for other files than devices.

Release 040404_beta
* Ported to FreeBSD (except for psrinfo, ptime, and shl).
* find: Parse the '-local' primary correctly.

Release 040402
* cpio, pax, tar: Accept GNU long name 'K' and 'L' extended headers
  regardless of archive magic. This works around a bug in GNU tar which
  creates these headers even when advised to create old or ustar format
  archives.
* tar: Always accept checksums created using unsigned and signed chars
  regardless of the archive format.
* tar: When writing the second and following volumes to a block device,
  use direct i/o on Linux as for the first volume.
* cpio, pax: If -k (or -K) is given and a header format is explicitly
  specified with -H (or -x), do not auto-detect extended formats based
  on the specified format.
* cpio, pax, tar: Preliminary support for the POSIX.1-2001 pax format. No
  file names with non-ASCII characters are currently archived because the
  issue of UTF-8 conversion still has to be resolved by the Austin Group.
  Support for Sun's extended tar format (Solaris 7 and above) is also
  included.
* cpio, pax: If -k (or -K, respectively) is specified with a tar archive,
  skip 512 bytes before probing for the next valid header block and require
  a block of 512 zeroes at the end of the archive.

Release 040318
* cpio, pax: A bug was fixed that caused SGI extensions to be present in
  binary archives and SCO extensions in SVR4 archives by default (if an
  archived file exceeded 2 GB or used large device numbers; that is,
  rarely). Large device numbers on systems other than Linux are properly
  stored with the SGI format now.
* cpio, pax: When the -A (or -a for pax) option was used with a zip archive
  that contained zip data descriptors (as written by cpio and pax for files
  larger than 196 kbytes), the zip central directory structure was not
  correctly updated. This caused no problems with cpio and pax as they
  ignore this structure, but could result in CRC errors being reported
  by other zip archivers.
* cpio, pax: Do not allow path names to exceed 65535 bytes even with those
  formats that would support longer names by design. Such path names are
  rejected by open() on any known Unix system; they are are a certain sign
  for a corrupt archive and may cause a memory allocation failure unless
  such precautions are taken.
* cpio, pax: Support for the Cray UNICOS 5 cpio format added.
* tar: Tuned the structures used when storing files with multiple hard links.
  This resolves the extremely slow processing that happened when many such
  files were archived.
* ed: When writing a regular file, write the content to a temporary file
  first, then rename it to the target file.

Release 040314
* cpio, pax: Fixed a null pointer dereference which occured when reading
  invalid SVR4 format cpio archives that contain the file data for a hard
  link multiple times. When extracting such archives, no hard links are
  created.
* pax: Standard output is always line-buffered in list mode.
* cpio, pax, tar: Automatically decompress compressed input (gzip, bzip2,
  etc.) also when reading from pipes, tapes or other nonseekable input.
* cpio, pax: When writing archives in formats other than zip, report
  a read error only once per archived file.
* cpio, pax: Handle input file read errors correctly when writing a zip
  archive entry in deflate format.
* pr: Fixed a bug which sometimes caused the first character on a page of
  single-column output to be garbled.
* cpio, pax: For -Hcrc and various tar formats, checksums are created using
  signed chars by some implementations and using unsigned chars by others.
  cpio and pax now accept both without complaint or the need to use the -k
  option (or -K for pax).
* cpio, pax: Support for SunOS 4 'bar' format added.
* cpio, pax: If -k (or -K for pax) is given and a checksum is not correct
  with the -Hcrc format, do not restore an existing original file.

Release 040306
* tar: If a 0...9 key is specified but no corresponding entry exists in
  /etc/default/tar, an error is reported instead of using /dev/null.
* tar: If a file matched a pattern but was not successfully extracted, it
  is handled as if it had not matched for the final statistics.
* pg: When a search command is interrupted, return to the position in the
  file on which the search was started.
* tar: If a directory name appears in a file for the 'X' key, files below
  that directory are also excluded. If 'v' is combined with 'X', excluded
  files are reported on standard error.
* tar: Don't report write errors a second time when closing the archive.
* tape: Report the density code in hexadecimal (with the status command).
* sed: Reallocation of substitution patterns sometimes left a dangling
  pointer on the heap. This usually resulted in garbage characters in
  the substituted string.

Release 040227
* find: If -depth was given, all attributes of struct stat (-perm, -type,
  -links, -user, -group, -size, -inum, -[amc]time, -newer, -fstype, -local,
  -nouser, -nogroup) were handled wrong for directories.
* cpio: Support for UnixWare 7.1 extended cpio format added.
* cpio, tar: Call close() for the archive when writing to detect write
  errors that occur at this point.
* cpio: Don't report the 'TRAILER!!!' end-of-archive marker with -ov.
* cpio: Restore the original file if linking an entry of a tar archive
  fails (Thanks to J"org Schilling).
* pax: New in this tool collection (in fact, mainly another interface for
  the cpio implementation).
* ed: Reset subexpression count for 's' command in SVID4/POSIX version so
  that e. g. '\3' will insert a literal '3' if a third subexpression does
  not occur in the current RE but did occur in a previous one.
* tcopy: Report read errors and continue operation without creating a new
  file on the target tape.

Release 040221
* find: If the argument to '-type' begins with '-' or '+', use its second
  character as file type specifier (i. e. '-f' does the same as 'f').
* cpio: GNU tar extended fields are now also supported for st_rdev.
* cpio: Added support for the Digital UNIX/Tru64 UNIX extended (-e) cpio
  format.
* tar: When writing old format archives, file descriptors were not properly
  closed. This caused tar to complain that it could not open further files.
* cpio: Can now handle DCL imploded zip archive entries (thanks to Mark
  Adler's implementation which is distributed with zlib).
* cpio: Use zip data descriptors when writing deflate compressed entries.
  This results in a performance enhancement.
* cpio: Handle zip data descriptor structure for zip64 archive entries.

Release 040209
* tar: The 'n' modifier causes reports in kilobytes instead of blocks and
  has no further effect (tapes are automatically recognized).
* dd: If a read error occurs and conv=noerror is specified, seek one input
  block forward to skip past the error (unless reading from tapes).
* tapecntl: New -v option.
* tape: New in this tool collection.
* dd: Do not allocate two buffers if only one is needed with bs= and
  no conversion specified.
* cpio: Can now append to archives on tape devices with -A (if supported
  by the hardware).
* tar: Can now update (-r, -u) blocked archives; can now update archives
  on tape devices (if supported by the hardware).

Release 040118
* cpio: Copy-in of zip64 entries fixed.
* cpio: Don't try to reset access times of symbolic links with -a.
* cpio: Handle zip data descriptors for directories on extraction.
* tapecntl: '-c' option added (control tape compression).
* cpio: Support for bzip2 compression inside zip archives was added.
* expand, newform, pg, ps, ul, unexpand: Handle zero-width multibyte
  characters correctly when counting columns.
* sdiff: Handle illegal multibyte sequences when counting columns.

Release 031229
* cpio: Files named 'TRAILER!!!' do not mark the end of tar or zip format
  archives.
* tcopy: New in this tool collection (ported from 4.3BSD).
* tar: Report write errors correctly even for very small archives (below
  one tape block).
* mt, tapecntl: New in this tool collection.
* diff: Use /proc/self to ensure that exactly the same binary is used
  for single file diffs when descending directory hierarchies with -r.
* ps: Display appropriate process flags on Solaris and Open UNIX.
* sort: Don't dump core if a record is too large with glibc (call write()
  instead of fprintf() if malloc() fails).
* more: The character '\177' does not imply that the file is not text
  (unless followed by 'ELF').
* tar: If the -n option is given or input is read from a regular file,
  use lseek() to skip over irrelevant portions of input (e. g. with -t).
* tar: Respect the n flag given in /etc/default/tar.
* ed: A '\.' line causes a single period '.' to be inserted with the a, c,
  and i commands in the SVID4 version (as already done for the SVID3 one).
* rmdir: The -p option was fixed to remove all directories of a relative
  path name operand, including the first one. Traditional versions were
  introduced that print a message if the operation was successful for a
  whole path; this is not done for the POSIX.2 version.
* bc: Terminate immediately if the first file given on the command line
  cannot be opened.
* spell: Handle filenames with embedded whitespace.
* ls: If both -f and -p are given, only -f is effective.

Release 031110
* tar: Fixed the -u function not to skip modified files below directories
  whose modification time was not changed.
* mknod: Support 32-bit dev_t on Linux.
* man: Set the TROFFMACS environment variable in the /etc/default/man
  definitions for nroff and troff so that the Heirloom man macros are
  used instead of the vendor's ones on Solaris and Open UNIX.
* ps: Always treat zombie processes as processes without controlling tty.
* tar: Revised temporary file handling does not leave stale files if the
  operation is interrupted before any new files are appended with -u, and
  does not try to remove files on exit that were not previously created.
* tar: Really use the block size specified in /etc/default/tar.
* cpio, tar: Use direct i/o with all block devices on writing. The rationale
  is the same as for floppy disks; buffered writes make it impossible to
  interrupt the write process on slow devices.
* random: New in this tool collection.
* pg: With the -f option, lines were still split when displaying search
  results. This is no longer done.

Release 031029
* man: Use nroff with the -Tlp option and pass its output to col -x to
  get proper display results with tbl output on Solaris. Since the default
  command for nroff is set in /etc/default/man and this file is not
  overwritten by make install if it exists, -Tlp should be added by
  hand when upgrading.
* man: Use ksh instead of bash if possible. This is done because ksh is
  typically twice as fast with man and does not print 'broken pipe' when
  piped output is aborted.
* man: Made section selection work with pdksh.
* ps: The default heading for '-o tty' is now 'TT' as in POSIX.2.
* ps: Read the process flags from the psinfo file on Solaris, making ps
  fully functional without special privilege on this platform.
* hostname, logname, printenv, users, whoami: New in this tool collection.
* pg: Fixed the command input handling not to reject valid characters after
  a 'b', 'm', or 't' was given at an inappropriate position.
* deroff: Handle ISO-8859-1 input characters; handle lines and input file
  names of arbitrary length and an arbitrary number of input files. This
  command is now in /usr/ucb since there might be another implementation
  in /usr/5bin some day. Until then, a symbolic link points to the current
  /usr/ucb version.
* more, page: New in this tool collection (traditional version only, derived
  from 4.3BSD).
* apropos, catman, deroff, expand, man, renice, ul, unexpand, uptime,
  w, whatis: Create compatibility symbolic links in /usr/ucb.
* ul: New in this tool collection (derived from 4.3BSD).
* pg: Pass through some formatting terminal escape sequences such as bold,
  underline, or colors.
* lc: Colorize file names even if standard output is not a terminal.
* ptime: Don't install it on systems other than Linux.
* tty: Recognize synchronous lines on Solaris and Open UNIX.

Release 031020
* Support for building pkgadd packages on Solaris and Open UNIX.
* w, whodo: Fixed display of columns; replace nonprintable characters in
  command lines with question marks.
* Fixed use of getdents() on Open UNIX (affects du, find, rm, and tar).
* Build fixes for glibc 2.2 systems.
* shl: Specify the group ownership in the rpm spec file (for utmp updates).
* dfspace: Do not print information for sysfs mounts on Linux.
* pgrep, pkill: Handle '0' argument value to -g and -s.
* Added 'chmod a+x /etc/default' to the rpm postinstall script. /etc/default
  is part of the shadow-utils package on RedHat Linux, with mode 750. The
  /etc/default/useradd file of this package is only readable by root anyway,
  so it seems safe to allow directory access for anybody (Thanks to Pierre
  Gentile).
* man: Handle Solaris SGML format pages (needs /usr/lib/sgml/sgml2roff)
  and Open UNIX HTML format pages (needs /usr/bin/html2ascii).
* file: Recognition of big-endian machines fixed (caused cpio files to
  be wrongly identified as byte-swapped).
* ps, pgrep, pkill, uptime, w, whodo: Handle Solaris and Open UNIX /proc.
* priocntl, psrinfo: Fall back to the native version in /usr/[s]bin and
  don't install our binaries and manpages on systems other than Linux.
* mkdir: Handle ENOSYS when trying to mkdir() an existing path name.
* cpio: Made the -A option work with raw devices.
* cpio, tar: When writing to a floppy block device on Linux, use O_DIRECT
  instead of fsync() to avoid data buffering.
* od: Don't print a '*' if the input is empty.
* bc: If a file cannot be opened, include its name in the error message.
* basename, cal, cat, chgrp, chown, df, dfspace, egrep, env, fgrep, grep,
  lc, ls, news, nl, nohup, od, paste, pg, psrinfo, ptime, rm, setpgrp,
  sleep, stty, time, touch, wc, what, yes: Handle argc == 0 (Thanks to
  Stephane Chazelas).
* ps: Documentation for cache file configuration is now provided in ps/NOTES
  and ps/ps.dfl. The second file is normally installed in /etc/default/ps,
  but it is not overwritten if it already exists; adjust it by hand if you
  want to use the configuration settings when upgrading an installed system.

Release 031013
* ps: If /tmp/ps_cache was hard linked to another file, the contents of
  that file were overwritten (Thanks to Stephane Chazelas).
* hd: Fixed printing of '\', '^', and '~' characters with the -t option.
* pgrep, pkill: Ignore leading space or colon in criterion lists.
* ps: Complain if a criterion string starts with a space or colon character
  (Thanks to Stephane Chazelas); complain but continue execution if both
  valid and invalid user or group criterions are given.

Release 031012
* ps: Do not follow symbolic links when creating /tmp/ps_cache (Thanks
  to Stephane Chazelas).
* tee: Open output files in the order given on the command line.
* dd: dup() standard input or standard output if no if/of arguments given.
* tail: Do not accept more than one sign; handle +<c>r as on historical
  systems (Thanks to Stephane Chazelas).
* head: Fixed 'head -0' to print the header for more than one file but no
  content; negative counts are not accepted anymore (Thanks to Stephane
  Chazelas).
* The path names in build/mk.config and in the uninstalled manual pages
  are now the same as those in heirloom.spec (/usr/5bin, /usr/5lib etc.).
  Note that you may have to change the paths in /etc/default/man by hand
  if you switch to the new default location since this file is not
  overwritten at installation.
* The effects of the SYSV3 environment variable are described in the
  manual pages for affected utilities.
* expr: Problems with the historic basename example in the manual page are
  marked (Thanks to Stephane Chazelas).
* cpio: Allow -M without -O or -I in SYSV3 mode.
* Deleted some stale license files in subdirectories.
