Changes in 1.2.5.2 (17 Dec 2011)
- fix ld error: unable to find version dependency 'ZLIB_1.2.5'
- use relative symlinks for shared libs
- Avoid searching past window for Z_RLE strategy
- Assure that high-water mark initialization is always applied in deflate
- Add assertions to fill_window() in deflate.c to match comments
- Update python link in README
- Correct spelling error in gzread.c
- Fix bug in gzgets() for a concatenated empty gzip stream
- Correct error in comment for gz_make()
- Change gzread() and related to ignore junk after gzip streams
- Allow gzread() and related to continue after gzclearerr()
- Allow gzrewind() and gzseek() after a premature end-of-file
- Simplify gzseek() now that raw after gzip is ignored
- Change gzgetc() to a macro for speed (~40% speedup in testing)
- Fix gzclose() to return the actual error last encountered
- Always add large file support for windows
- Include zconf.h for windows large file support
- Include zconf.h.cmakein for windows large file support
- Update zconf.h.cmakein on make distclean
- Merge vestigial vsnprintf determination from zutil.h to gzguts.h
- Clarify how gzopen() appends in zlib.h comments
- Correct documentation of gzdirect() since junk at end now ignored
- Add a transparent write mode to gzopen() when 'T' is in the mode
- Update python link in zlib man page
- Get inffixed.h and MAKEFIXED result to match
- Add a ./config --solo option to make zlib subset with no libary use
- Add undocumented inflateResetKeep() function for CAB file decoding
- Add --cover option to ./configure for gcc coverage testing
- Add #define ZLIB_CONST option to use const in the z_stream interface
- Add comment to gzdopen() in zlib.h to use dup() when using fileno()
- Note behavior of uncompress() to provide as much data as it can
- Add files in contrib/minizip to aid in building libminizip
- Split off AR options in Makefile.in and configure
- Change ON macro to Z_ARG to avoid application conflicts
- Facilitate compilation with Borland C++ for pragmas and vsnprintf
- Include io.h for Turbo C / Borland C++
- Move example.c and minigzip.c to test/
- Simplify incomplete code table filling in inflate_table()
- Remove code from inflate.c and infback.c that is impossible to execute
- Test the inflate code with full coverage
- Allow deflateSetDictionary, inflateSetDictionary at any time (in raw)
- Add deflateResetKeep and fix inflateResetKeep to retain dictionary
- Fix gzwrite.c to accommodate reduced memory zlib compilation
- Have inflate() with Z_FINISH avoid the allocation of a window
- Do not set strm->adler when doing raw inflate
- Fix gzeof() to behave just like feof() when read is not past end of file
- Fix bug in gzread.c when end-of-file is reached
- Avoid use of Z_BUF_ERROR in gz* functions except for premature EOF
- Document gzread() capability to read concurrently written files
- Remove hard-coding of resource compiler in CMakeLists.txt [Blammo]

Changes in 1.2.5.3 (15 Jan 2012)
- Restore gzgetc function for binary compatibility
- Do not use _lseeki64 under Borland C++ [Truta]
- Update win32/Makefile.msc to build test/*.c [Truta]
- Remove old/visualc6 given CMakefile and other alternatives
- Update AS400 build files and documentation [Monnerat]
- Update win32/Makefile.gcc to build test/*.c [Truta]
- Permit stronger flushes after Z_BLOCK flushes
- Avoid extraneous empty blocks when doing empty flushes
- Permit Z_NULL arguments to deflatePending
- Allow deflatePrime() to insert bits in the middle of a stream
- Remove second empty static block for Z_PARTIAL_FLUSH
- Write out all of the available bits when using Z_BLOCK
- Insert the first two strings in the hash table after a flush

Changes in 1.2.7 (2 May 2012)
- Replace use of memmove() with a simple copy for portability
- Test for existence of strerror
- Restore gzgetc_ for backward compatibility with 1.2.6
- Fix build with non-GNU make on Solaris
- Require gcc 4.0 or later on Mac OS X to use the hidden attribute
- Include unistd.h for Watcom C
- Use __WATCOMC__ instead of __WATCOM__
- Do not use the visibility attribute if NO_VIZ defined
- Improve the detection of no hidden visibility attribute
- Avoid using __int64 for gcc or solo compilation
- Cast to char * in gzprintf to avoid warnings [Zinser]
- Fix make_vms.com for VAX [Zinser]
- Don't use library or built-in byte swaps
- Simplify test and use of gcc hidden attribute
- Fix bug in gzclose_w() when gzwrite() fails to allocate memory
- Add "x" (O_EXCL) and "e" (O_CLOEXEC) modes support to gzopen()
- Fix bug in test/minigzip.c for configure --solo
- Fix contrib/vstudio project link errors [Mohanathas]
- Add ability to choose the builder in make_vms.com [Schweda]
- Add DESTDIR support to mingw32 win32/Makefile.gcc
- Fix comments in win32/Makefile.gcc for proper usage
- Allow overriding the default install locations for cmake
- Generate and install the pkg-config file with cmake
- Build both a static and a shared version of zlib with cmake
- Include version symbols for cmake builds
- If using cmake with MSVC, add the source directory to the includes
- Remove unneeded EXTRA_CFLAGS from win32/Makefile.gcc [Truta]
- Move obsolete emx makefile to old [Truta]
- Allow the use of -Wundef when compiling or using zlib
- Avoid the use of the -u option with mktemp
- Improve inflate() documentation on the use of Z_FINISH
- Recognize clang as gcc
- Add gzopen_w() in Windows for wide character path names
- Rename zconf.h in CMakeLists.txt to move it out of the way
- Add source directory in CMakeLists.txt for building examples
- Look in build directory for zlib.pc in CMakeLists.txt
- Remove gzflags from zlibvc.def in vc9 and vc10
- Fix contrib/minizip compilation in the MinGW environment
- Update ./configure for Solaris, support --64 [Mooney]
- Remove -R. from Solaris shared build (possible security issue)
- Avoid race condition for parallel make (-j) running example
- Fix type mismatch between get_crc_table() and crc_table
- Fix parsing of version with "-" in CMakeLists.txt [Snider, Ziegler]
- Fix the path to zlib.map in CMakeLists.txt
- Force the native libtool in Mac OS X to avoid GNU libtool [Beebe]
- Add instructions to win32/Makefile.gcc for shared install [Torri]

As NetBSD has properly packaged regular releases of their libedit
library (readline replacement), a new vendor branch has been created
for it. Libedit was last synchronized with NetBSD 4 years ago, to
the week.

During that time, a new function was added to the DragonFly version
that still doesn't exist on NetBSD. It is necessary to support GDB
7.x, so the addition of rl_completion_word_break_hook function has
been carried over to this update.

The first version of this modification was created by Matthias Schmidt.
Unmodified, grep used on a HAMMER filesystem will emit "Invalid argument"
when scanning directories because HAMMER doesn't treat them as files.

The modification was removed because it didn't merge simply with the
grep upgrade from 2.9 to 2.12. Now that the merge is complete, the
new version of the modification is applied to restore the correct
behavior of grep on the HAMMER filesystem.

It's been nearly five months and 80 commits since 2.9, yet few big
changes in grep proper. However, there have been many changes in gnulib,
including a few portability fixes that affect grep. We inherited 750+
portability and robustness improvements by using gnulib.

[Bug fixes]
* grep no longer mishandles high-bit-set pattern bytes on systems
where "char" is a signed type. [bug appears to affect only MS-Windows]

* grep now rejects a command like "grep -r pattern . > out",
in which the output file is also one of the inputs,
because it can result in an "infinite" disk-filling loop.
[bug present since "the beginning"]

[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.

In just 2.5 months, we've seen more changes than in the five months
leading up to 2.10, addressing a surprising number of old bugs.
Special thanks to Paulo Bonzini and Paul Eggert for many fine patches. We
inherited 340+ portability and robustness improvements by using gnulib.

[New features]
* If no file operand is given, and a command-line -r or equivalent
option is given, grep now searches the working directory. Formerly
grep ignored the -r and searched standard input nonrecursively.
An -r found in GREP_OPTIONS does not have this new effect.

* grep now supports color highlighting of matches on MS-Windows.

[Bug fixes]
* grep no longer dumps core on lines whose lengths do not fit in 'int'.
(e.g., lines longer than 2 GiB on a typical 64-bit host).
Instead, grep either works as expected, or reports an error.
An error can occur if not enough main memory is available, or if the
GNU C library's regular expression functions cannot handle such long
lines. [bug present since "the beginning"]

* The -m, -A, -B, and -C options no longer mishandle context line
counts that do not fit in 'int'. Also, grep -c's counts are now
limited by the type 'intmax_t' (typically less than 2**63) rather
than 'int' (typically less than 2**31).

* grep no longer silently suppresses errors when reading a directory
as if it were a text file. For example, "grep x ." now reports a
read error on most systems; formerly, it ignored the error.
[bug introduced in grep-2.5]

* grep now exits with status 2 if a directory loop is found,
instead of possibly exiting with status 0 or 1.
[bug introduced in grep-2.3]

* The -s option now suppresses certain input error diagnostics that it
formerly failed to suppress. These include errors when closing the
input, when lseeking the input, and when the input is also the output.
[bug introduced in grep-2.4]

* The --include, --exclude, and --exclude-dir options now handle
command-line arguments more consistently. --include and --exclude
apply only to non-directories and --exclude-dir applies only to
directories. "-" (standard input) is never excluded, since it is
not a file name.
[bug introduced in grep-2.5]

* grep no longer rejects "grep -qr . > out", i.e., when run with -q
and an input file is the same as the output file, since with -q
grep generates no output, so there is no risk of infinite loop or
of an output-affecting race condition. Thus, the use of the following
options also disables the input-equals-output failure:
--max-count=N (-m) (for N >= 2)
--files-with-matches (-l)
--files-without-match (-L)
[bug introduced in grep-2.10]

* grep no longer emits an error message and quits on MS-Windows when
invoked with the -r option.

There have been 22 commits by 3 people in the 7 weeks since 2.11.
In spite of the relatively small number of commits, this is a
significant delta, with two regression fixes, Paul's conversion,
from grep's crufty old dir-traversal code to the use of gnulib's fts
and the change to how -r (--recursive) works.

[Bug fixes]
* "echo P|grep --devices=skip P" once again prints P, as it did in 2.10
[bug introduced in grep-2.11]

* Recursive grep now uses fts for directory traversal, so it can
handle much-larger directories without reporting things like "File
name too long", and it can run much faster when dealing with large
directory hierarchies. [bug present since the beginning]

[New features]
* The -R option now has a long-option alias --dereference-recursive.

[Changes in behavior]
* The -r (--recursive) option now follows only command-line symlinks.
Also, by default -r now reads a device only if it is named on the
command line; this can be overridden with --devices. -R acts as
before, so use -R if you prefer the old behavior of following all
symlinks and defaulting to reading all devices.

The grep option --only-files exists only on DragonFly. It was added in
late 2005 by Simon Schubert as a quick and dirty way to search object
directories using grep rather than a complex find command. The issue
was that some directory symlinks were created that produced recursive
loops. There wasn't a lot of support for the suggestion, but when the
code was altered to allow non-directory symlinks to be followed by the
--only-files option, the main objection was addressed.

The problem is that this modification is making it difficult to maintain
grep. The code that it touches changes frequently, and its unmergable
with grep 2.12. The burden of maintaining this option is too much
considering it may only have a single user.

Discussed with: Dillon

For the purposes of merging grep 2.12, the hammer bug fix is also being
removed since it doesn't merge cleanly, but it will be restored after
the merge.

The function that retrieves the hints file contents had a logic flaw.
It's supposed to return either the full or filtered version of the
hints file depending if the object has the nodefaultlib flag set or
not. The problem was that every subsequent call would return the
first call's result regardless of the nodefaultlib flag setting.

The function's API was changed to simplify the code. The function is
never called without a valid object, so there was no need to test for
that in order the check the nodefaultlib flag. Now the flag is passed
to gethints() directly.

* Spelling fixes.
* Stop hard-coding default directory mode as 0777.
* Use arc4random_uniform() to avoid "modulo bias".
* Before updating the password database, the pw(8) utility first
performs a sanity check by invoking "pwd_mkdb -C". However, if this
failed it silently returned success. Fix this so it fails the update
operation instead.
* Increase the size of the salt in pw(8) from 8 to 32.
* Make it possible to have a '/' in the salt.
* Add the groupmod '-d' option to pw to allow the deletion of existing
users from a group without the need to perform the same operation by
replacing the existing list via the '-M' option. The '-M' option
requires someone to fetch the existing members with pw, deleting the
undesired members from the list and sending the altered list back.
* Do the right thing with symlinks in the skeleton directory.
* Accept passwords which contain whitespace.
* Introduce the new option -M to allow to set the permissions of the
user's newly created home directory.
* Use strlcpy(3).
* Shift file locking to source file instead of temp file.
* Add a `-H <fd>' option that is like `-h <fd>', but accepts an already
encrypted password on the specified file descriptor.

The shared library search order on the dynamic linker was updated a few
weeks ago, but the man page was not updated to reflect its new behavior.
DragonFly's search order is the same as Linux, but differs from FreeBSD
and other BSDs due to the recently added support for DT_RUNPATH and
-z nodefaultlib.

To clarify, FreeBSD and DragonFly *recognized* the DT_RUNPATH dynamic
tag but considered it an alias of DT_RPATH and thus wasn't handling the
tag as intended.

DragonFly is likely is the only BSD that searches shared objects like
Linux, but FreeBSD developers have patches from DragonFly in case they
want to follow suit.

Recent updates to realpath implements some of the missing POSIX
functionality, but the requirement to allocate memory for the pointer
returned by the function when a null pointer is passed to the
resolved_path argument was missing.

The prototype changes in the following ways:
1. The restrict type qualifier is added to both arguments
2. The second argument changes from "char resolved[PATH_MAX]" to
"char * resolved"

The new prototype is backwards-compatible with the old one.

This should bring realpath up to Open Group Specifications Issue 7
IEEE Std 1003.1-2008
http://pubs.opengroup.org/onlinepubs/9699919799/functions/realpath.html

include <file>:
Parse the contents of file before continuing with the current file.

includedir <dir>:
Parse the contents of every file in dir that ends in .conf before
continuing with the current file.

Any file or directory encountered while processing include or includedir
directives will be parsed exactly once, even if it is encountered multiple
times.

Taken from FreeBSD SVN 234851 (30 APR 2012) with modification:

1) DragonFly realpath works differently than FreeBSD's and doesn't
accept a null value for the resolved_path argument.
2) FreeBSD's debug lines reflect the wrong function, lm_init, instead
of lmc_parse_file. lmc_parse_dir also calls lmc_parse_file, so
the debug message is definitely wrong and was corrected.
3) FreeBSD keeps using path even after determining realpath and putting
the result in the rpath variable. It uses path for debug messages
and opening a file descriptor. DragonFly doesn't use path again and
only uses rpath after it is determined.
4) FreeBSD's lmc_parse_file code had a bug in the linked list used to
track which conf files had already been parsed. Memory for the
filename was allocated so it wouldn't get overwritten after multiple
passes, which is standard for the includedir functionality.

For the most part, FreeBSD took our gnu_hash implementation without much
modification. Most of these changes are caused by whitespace differences
due to a different style scheme, and by declarating variables separately
from their assignments. Notable exceptions were:
* FreeBSD didn't use int_fast32_t type
* FreeBSD keeps checking the first character before doing strcmp
* FreeBSD renamed the symlook_obj2 to symlook_obj1_*

The only additions were two debug statements. This commits syncs the
following back to DragonFly:

- Avoid the spurious retransmit in the following dump:
http://leaf.dragonflybsd.org/~sephe/fast1.xpl (~9.755sec)
- Loosely meet the requirement of RFC3042: no new segments should be
sent upon ACKs carrying useless SACK information
- Add sysctl net.inet.tcp.ignore_redun_dsack to disable useless
DSACK detection; default on

Actually it was always compiled in by default but the code depended
on the WATCHDOG_ENABLED option which is not in the GENERIC kernels.

Simply remove the WATCHDOG_ENABLE option. The code is small, it does
nothing by default than initializing a lock, a /dev/wdog and a
callout, and it also makes it easier for people who want to use
ichwd(4) by simply kldloading it.

This mainly used to avoid unnecessary early retransmit and fast
retransmit as show in the following two dumps:
http://leaf.dragonflybsd.org/~sephe/early.xpl (~4.8sec)
http://leaf.dragonflybsd.org/~sephe/fast.xpl (~12.35sec)

Remove a very old busy_time == 0 hack which assumed that a delta busy time
of 0 with transactions present simply meant that a transaction didn't
complete within one second and that the device was 100% busy.

In fact, disk devices are so fast these days (particularly SSDs) that it is
possible for many transactions to complete without causing the busy counter
to tick-over. The device is more likely to be less than 1% busy.

This fixes the '% busy' display for e.g. 'systat -vm 1' to properly report
0% in these situations.

Note that cluster_awrite() always bawrite()'s or equivalent. The
DragonFly API split the functions out, so cluster_write() can now
almost always bdwrite() for the non-clustered case.

* Solves some serious performance and real-time disk space usage issues
when HAMMER1 was updated to use the cluster calls. The disk space
would be recovered by the daily cleanup but the extra writes could
end up being quite excessive, 25:1 unnecessary writes vs necessary
writes.