                                                     -*- coding: utf-8 -*-
Changes for APR 1.2.13

  *) apr_mcast_hops: Fix EINVAL for IPv6 sockets caused by using byte
     instead integer for setsockopt. [Mladen Turk]

  *) Fix flag character '#' in combination with format character 'x' in
     apr snprintf implementations.  [Rainer Jung]

  *) Fix return value when apr_pollset_poll interrupted.
     PR 42580 [Basant Kumar Kukreja <basant.kukreja sun.com>]

  *) z/OS: return standard apr_status_t codes from apr_dso_load()
     and apr_dso_sym().  [David Jones <oscaremma gmail.com>]

  *) Fix the make test target in the spec file. [Graham Leggett]

Changes for APR 1.2.12

  *) Numerous fixes to the test/ framework, including better handling of
     long size_t comparisons and more consistent Makefile.(in|win) setup
     for authoring new tests.  [William Rowe]

  *) Win32 build fixes including a Makefile.win scheme, fixes for 64P
     model x86_64 compiles and VC8 builds.  [William Rowe]

  *) Fix --disable-ipv6 build on platforms with getifaddrs().
     PR 39199.  [Joe Orton]

  *) Fix DSO-related crash on z/OS caused by incorrect memory
     allocation.  [David Jones <oscaremma gmail.com>]

  *) Define apr_ino_t in such a way that it doesn't change definition
     based on the library consumer's -D'efines to the filesystem.
     [Lucian Adrian Grijincu <lucian.grijincu gmail.com>]

  *) Implement apr_atomic_casptr() for z/OS.
     [David Jones <oscaremma gmail.com>]

  *) Fill in apr_fileinfo_t member st_csize on Netware and Unix (PR 41678),
     and refine the file times down to apr_time_t resolution if supported
     by a st_atimensec or st_atim.tv_nsec value by the OS.  Additional
     msec implementations are possible if exposed through autoconf.
     [William Rowe, Nicklas Edmundsson <nikke acc.umu.se>]

  *) Fix apr_socket_recvfrom() to ensure the peer's port and address
     is returned through the "from" parameter on Unix and Win32.  
     [Joe Orton, William Rowe]

  *) The WIN32 cleanup routine for shared memory segments could wrongly
     return unknown errors and leak a open handle.
     [Joe Mudd <Joe.Mudd sas.com>]

  *) apr_procattr_io_set() on Windows: Set non-blocking pipe handles
     to a default timeout of 0, following the Unix default.  No effect
     on pipe handles configured to block.  PR 43522.
     [Eric Covener <covener gmail.com>]

  *) apr_file_write() on Windows: Fix return code when writing to a non-
     blocking pipe would have blocked.  PR 43563.
     [Eric Covener <covener gmail.com>]

  *) Cause apr_file_dup2() on Win32 to update the MSVCRT psuedo-stdio
     handles for fd-based and FILE * based I/O.  [William Rowe]

  *) Revert Win32 to the 1.2.8 behavior of apr_proc_create() for any 
     of the three stdio streams which are not initialized, through either
     apr_procattr_io_set() or apr_procattr_child_XXX_set(), when given a
     procattr_t with one or two streams which were initialized through
     apr_procattr_child_XXX_set().  Once again, these do not inherit the 
     parent process stdio stream to WIN32 child processes (passing 
     INVALID_HANDLE_VALUE instead) as on Unix.  Note APR 1.3.0 adopts 
     the Unix behavior of inheriting any uninitialized streams as the 
     parent's corresponding stdio stream, in such cases.  [William Rowe]

Changes for APR 1.2.11

  *) Fix handling of EINTR from read() in apr_generate_random_bytes()
     on platforms with /dev/random.  PR 39790.  [Joe Orton]

  *) Win32 apr_file_read: Correctly handle completion-based read-to-EOF.
     [Steven Naim <steven.naim googlemail.com>]

  *) Fixed Win32 regression of stdout inheritance in apr_proc_create.
     [William Rowe]

Changes for APR 1.2.10

  *) Solve WinNT inherited pipe leaks by mutexing apr_proc_create calls,
     on WinNT (not WinCE, nor 9x) so that we toggle the inherited state 
     of the stdin/out/err pipes.  All other file handles are treated as
     not-inherited until apr_file_dup2'ed a std handle of this process, 
     or while they are used by apr_proc_create.  [William Rowe]

  *) Define the Mac OS/X filesystem_encoding as utf-8 (in previous
     releases the interpretation would vary).  [Erik Huelsmann
     <ehuels gmail.com>]

  *) Fix day of year (tm_day) calculation for July. The bug only affects
     Windows builds.  PR 42953.  [Davi Arnaut]

  *) Fix LFS detection when building over NFS. The mode must be
     specified when O_CREAT is in the flags to open().
     PR 42821.  [Rainer Jung <rainer.jung kippdata.de>]

  *) Avoid overwriting the hash_mutex table for applications that
     incorrectly calls apr_atomic_init().  PR 42760.  [Davi Arnaut]

  *) Allow IPv6 connectivity test to fail, avoiding a potentially fatal
     error.  [Davi Arnaut]

  *) The MinGW Windows headers effectively redefines WINADVAPI from
     __stdcall to empty which results in a link failure when wincrypt.h
     is placed after an include to apr_private.h.
     PR 42293.  [Curt Arnold]

  *) Define SEM_FAILED if it isn't already defined, as the proc mutex
     code already does it. Also search for the sem_open function in
     the realtime library. (This fixes HP-UX sem_open detection).
     [Davi Arnaut]

  *) Define the _HPUX_SOURCE feature test macro to obtain maximum
     functionality. Fixes broken sendfile with LFS support on HP-UX.
     PR 42261.  [Davi Arnaut]

Changes for APR 1.2.9

  *) Stop invoking the testshm* helpers upon 'make test' invocation.
     [Kurt Miller <kurt intricatesoftware.com>]

  *) Register a cleanup only if APR_FILE_NOCLEANUP was not flagged in
     apr_file_mktemp. [Brian J. France <list firehawksystems.com>]

  *) Numerous build fixes for non-GCC builds and GCC builds on Win32,
     as well as WinCE builds.  [Davi Arnaut <davi haxent.com.br>,
     Curt Arnold <carnold apache.org>, John Mark Vandenberg, 
     Kouhei Sutou <kou cozmixng.org>, William Rowe]

  *) Discard file buffers when running cleanups for exec.
     PR 41119.  [Davi Arnaut <davi haxent.com.br>, Bojan Smojver]

  *) If apr_proc_create() fails to exec in the fork()ed child, call
     _exit() not exit() to avoid running atexit()-registered functions
     in the child.  PR 30913.  [Joe Orton]

  *) Improve thread safety of assorted file_io functions.
     PR 42400.  [Davi Arnaut <davi haxent.com.br>]

  *) Fix file pointer position calculation in apr_file_writev() on
     buffered file.  PR 40963.  [Davi Arnaut <davi haxent.com.br>]

  *) Fix formatting of unsigned integers larger than 2^63 in the
     vformatter/apr_*printf.  PR 42250.  
     [Wynn Wilkes <wynn bungeelabs.com>]

  *) Fix possible EFAULT failures in apr_socket_sendfile() on 32-bit
     Solaris with LFS enabled.  PR 39463.  [Joe Orton, Joseph Tam
     <tam math.ubc.ca>]

  *) Fix deadlock in apr_file_gets() for a file opened with both the
     APR_BUFFERED and APR_XTHREAD flags.  [Bojan Smojver, Joe Orton]

Changes for APR 1.2.8

  *) Correctly retrieve 'empty' environment values with apr_env_get
     on Win32 (e.g. "VAR="), and added validation to testall suite.  
     PR 40764.  [Issac Goldstand <margol beamartyr.net>]

  *) APR_FIND_APR macro no longer checks /usr/local/apache2/.
     PR 40842.  [Colm MacCárthaigh]

  *) Portably check for EEXIST in mktemp code.  PR 40818
     [Kenneth Golomb <KGolomb TradeCard.com>]

  *) Fix apr_snprintf/apr_vsnprintf return value to not count the
     NUL terminator in the overflow case.  PR 39996.
     [Michal Luczaj <regenrecht o2.pl>]

  *) Provide folding in autogenerated .manifest files for Win32 builders
     using VisualStudio 2005  [William Rowe]

  *) Fix detection of pthread cross-process robust mutexes.
     PR 39833.  [Tsuyoshi SASAMOTO <nazonazo miobox.jp>]

  *) NetBSD: Avoid leaving zombie process when using apr_signal() 
     to ignore SIGCHLD.  PR 36750.  [Todd Vierling <tv pobox.com>]

  *) Fix apr_socket_sendv() for platforms without writev.
     PR 38822.  [Joe Orton]

  *) Avoid issues using >2Gb of data per call with sendfile() on
     64-bit Linux platforms.  [Joe Orton]

Changes for APR 1.2.7

  *) Netware - add missing apu_version.c parsing for apu_version_string()
     to the Netware specific builds.  Unix platforms support this API 
     since 0.9.1.  [Brad Nicholes]

  *) Fix a regression in the updated win32 apr_file_read with timeouts
     since 1.2.6 which would fail to return the bytes read in specific
     edge cases.  [William Rowe]

Changes for APR 1.2.6

  *) Fully test the detected libuuid or libc based uuid_create or
     uuid_generate function against the detected uuid.h, uuid/uuid.h,
     or sys/uuid.h (using only the first-found .h examined in that order)
     for correct compilation.  Resolves various apr_os_uuid issues on
     multiple environments.  [William Rowe]

  *) Prevent detection of robust mutex support with glibc 2.4,
     fixing APR_LOCK_PROC_PTHREAD locks.  PR 38442.  [Joe Orton]

  *) Correct bug in kqueue backend for apr_pollset where we would
     erroneously indicate that a socket was readable or writeable.
     [Garrett Rooney]

  *) Make the filePtr in apr_file_t an apr_off_t on Unix, to avoid issues
     truncating offsets down to 32 bits on large file systems.
     [Garrett Rooney]

  *) Fix seeks with files opened in xthread mode for append on win32.
     [M Joonas Pihlaja <jpihlaja cc.helsinki.fi>, Garrett Rooney]

  *) Keep testpipe.c from hanging on win32. [Garrett Rooney]

  *) Cause apr_file_write_full on win32 to consider the timeout value set by 
     apr_file_pipe_timeout_set.  PR 30182
     [<eholyat olf.com>]

  *) Fix assertion from double close of a handle with a rwlock on win32.
     [Evgueni Brevnov <evgueni.brevnov gmail.com>]

  *) Fix EOF handling for unbuffered reads on win32.
     [Konstantin Sharenkov <Konstantin.Sharenkov enterra-inc.com>]

  *) Documented that apr_stat and apr_dir_read can return APR_INCOMPLETE,
     and how to determine which parts of the resulting apr_finfo_t can be
     used in such a case.
     [Garrett Rooney]

  *) Fix passing "" as an argument to the program started by apr_proc_create
     on Win32.
     [Philip Martin <philip codematters.co.uk>

  *) Bugfix for apr_pollset_poll() on systems that implement pollsets
     using select(2): properly compute the number of signalled desciptors
     when one or more of them are both readable and writable.
     [Dror Shilo <Dror.Shilo ericom.com>, Gerry <gerry everythingsucks.co.uk>]

  *) Fix apr_file_seek() to catch write failures when flushing
     pending writes for a buffered file.  [Joe Orton]

Changes for APR 1.2.2

  *) Fix crash in apr_dir_make_recursive() for relative path
     when the working directory has been deleted.  [Joe Orton]

  *) Win32: fix apr_proc_mutex_trylock() to handle WAIT_TIMEOUT,
     returning APR_EBUSY.  [Ronen Mizrahi <ronen@tversity.com>]

  *) Fix apr_socket_opt_set() issue where TCP_NODELAY would be
     set when TCP_DEFER_ACCEPT was set.  [Brian Pane]

  *) Allow TCP_NODELAY and TCP_CORK to be set concurrently on
     Linux 2.6 and later.  [Joe Orton]

  *) Fix apr_socket_addr_get(,APR_REMOTE,) after a non-blocking
     connection is completed.  PR 32737.  [Joe Orton]

  *) Fix apr_file_gets() and apr_file_read() to catch write failures
     when flushing pending writes for a buffered file.  [Joe Orton]

  *) Fix apr_file_write() infinite loop on write failure for buffered
     files.  [Erik Huelsmann <ehuels gmail.com>]

  *) Fix error handling where apr_uid_* and apr_gid_* could return
     APR_SUCCESS in failure cases.  PR 34053 continued.  [Joe Orton]

Changes for APR 1.2.1

  *) Refactor Win32 condition variables code to address bugs 27654, 34336.
     [Henry Jen <henryjen ztune.net>, E Holyat <eholyat yahoo.com>]

Changes for APR 1.2.0

  *) If getpwuid_r or getgrgid_r set their results to NULL, it is an error.
     PR 34053. [Paul Querna]

  *) Switch to lazy initialization of the pollset that's used within
     apr_file_t on platforms where apr_wait_for_io_or_timeout() doesn't
     use poll(2).  (This fixes a performance problem observed in httpd-2.x
     on OS X due to the use of poll now being disabled by default on that
     platform.)  [Brian Pane]

  *) Fix Pollset corruption on Solaris 10. [Paul Querna]

  *) Add %pt support to apr_snprintf() for printing an apr_os_thread_t
     in hex format.  [Jeff Trawick]

  *) Support APR_SO_SNDBUF and APR_SO_RCVBUF on Windows.  PR 32177.
     [Sim <sgobbi datamanagement.it>, Jeff Trawick]

  *) Fix apr_table_overlap()'s handling of tables allocated from
     different pools.  [Joe Schaefer <joe+gmane sunstarsys.com>]

  *) Add support for uuid_generate on OS X 10.4. [Paul Querna]

  *) Include the C preprocessor flags in --cflags for pkg-config.
     [Paul Querna]

  *) Fix issue with poll() followed by net I/O yielding EAGAIN on
     Mac OS 10.4 (Darwin 8). [Wilfredo Sanchez]


Changes for APR 1.1.x and later:

  *) http://svn.apache.org/viewvc/apr/apr/branches/1.1.x/CHANGES?view=markup

Changes for APR 1.0.x and later:

  *) http://svn.apache.org/viewvc/apr/apr/branches/1.0.x/CHANGES?view=markup

Changes for APR 0.9.x and later/earlier:

  *) http://svn.apache.org/viewvc/apr/apr/branches/0.9.x/CHANGES?view=markup
