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

  *) APR's configure script uses AC_TRY_RUN to detect whether the return type
     of strerror_r is int. When cross-compiling this defaults to no.

     This commit adds an AC_CACHE_CHECK so users who cross-compile APR may
     influence the outcome with a configure variable. [Sebastian Kemper
     <sebastian_ml gmx net>]

  *) Add a cache check with which users who cross-compile APR
     can influence the outcome of the /dev/zero test by setting the variable
     ac_cv_mmap__dev_zero=yes [Sebastian Kemper <sebastian_ml gmx net>]

  *) apr_crypto_commoncrypto: Remove stray reference to -lcrypto that
     prevented commoncrypto being enabled. [Graham Leggett]

  *) Add --tag=CC to libtool invocations. PR 62640. [Michael Osipov]

  *) apr_thread_exit() is now a void function.  [Joe Orton]

  *) apr_crypto_openssl: Remove unused link to the ssl library.
     [Graham Leggett]

  *) apu_dso_init: Fix pool lifetime and introduce a reference count.
     apu_dso_init() can now be called more than once (from multiple
     modules) and from unrelated pools (usually seen in unit tests).
     [Graham Leggett]

  *) apr_crypto_openssl: use OPENSSL_init_crypto() to initialise OpenSSL
     on versions 1.1+. [Graham Leggett]

  *) Fixed: apr_get_oslevel() was returning APR_WIN_XP on Windows 10

  *) Windows platform: Use the native XML parser implementation (XmlLite)
     by default instead of libxml2 and expat. [Ivan Zhakov]

  *) Fix handle leak in the Win32 apr_uid_current implementation.
     PR 61165. [Ivan Zhakov]

  *) apr_rwlock_t: Use native Slim Reader/Writer (SRW) locks on Windows.
     PR 51360. [Ivan Zhakov]

  *) Fix possible race condition in the Win32 apr_rwlock_t implementation.
     PR 45455. [Ivan Zhakov]

  *) apr_thread_once: Fix problem that apr_thread_once can return before
     the other thread completes initialization on Windows.

  *) Windows platform: Remove support for Windows 2000, XP, Vista. The minimum
     supported OS versions are now Windows 7 / Windows Server 2008 R2.

  *) apr_file_info: [Win32 only] Treat only "name surrogate" reparse points
     as symlinks, and not other reparse tag types. PR47630
     [Oleg Liatte <olegliatte gmail.com>]

  *) Test %ld vs. %lld to avoid compiler emits using APR_OFF_T_FMT, in the
     case of apparently equivilant long and long long types. [William Rowe] 

  *) Recognize APPLE predefined macros as equivilant to DARWIN. [Jim Jagielski]

  *) Signals: Allow handling of SIGUSR2 in apr_signal_thread. [Yann Ylavic]

  *) Atomics: Support for 64bit ints. [Jim Jagielski]

  *) apr_jose: Add support for encoding and decoding of JSON Object
     Signing and Encryption messages as per RFC7515, RFC7516, RFC7517
     and RFC7519. [Graham Leggett]

  *) Add apr_errprintf() as a convenience function to create and
     populate apu_err_t. [Graham Leggett]

  *) apr_crypto: Add support for digest functions, with hashing, signing
     and verifying. [Graham Leggett]

  *) apr_json: Add support for encoding and decoding RFC8259 JSON.
     [Moriyoshi Koizumi <mozo mozo jp>]

  *) Add the apr_encode_* API that implements RFC4648 and RFC7515
     compliant BASE64, BASE64URL, BASE32, BASE32HEX and BASE16
     encode/decode functions. [Graham Leggett]

  *) Add apr_reslist_acquire_ex() which allows to control acquire order,
     that is LIFO (default) or FIFO.  [Yann Ylavic]

  *) apr_file_write: Optimize large reads from buffered files on Windows.
     [Evgeny Kotkov]

  *) Add apr_pool_tag_get to retrieve the pool tag name.  [Joe Orton]

  *) Add apr_sockaddr_zone_set, apr_sockaddr_zone_set to set and retrieve
     the zone for link-local IPv6 addresses.  [Joe Orton]

  *) apr_sockaddr_equal: Compare link-local IPv6 addresses with different
     zones as not equal.  [Joe Orton]

  *) apr_sockaddr_ip_getbuf, apr_sockaddr_ip_get: Append "%zone" for
     IPv6 link-local addresses.  [Joe Orton]

  *) Don't seek to the end when opening files with APR_FOPEN_APPEND on Windows.
     [Evgeny Kotkov <evgeny.kotkov visualsvn.com>]

  *) Fix a deadlock when writing to locked files opened with APR_FOPEN_APPEND
     on Windows. PR 50058.
     [Evgeny Kotkov <evgeny.kotkov visualsvn.com>]

  *) apr_file_write: Optimize large writes to buffered files on Windows.
     [Evgeny Kotkov <evgeny.kotkov visualsvn.com>]

  *) apr_file_trunc: Truncating a buffered file could add unexpected
     data after the truncate position. PR 51017.
     [Evgeny Kotkov <evgeny.kotkov visualsvn.com>]

  *) apr_file_trunc: Fix an issue where reading from a buffered file
     after truncate could return stale data from the buffer.
     [Evgeny Kotkov <evgeny.kotkov visualsvn.com>]

  *) apr_allocator, apr_pools: Add apr_allocator_page_size() and
     apr_allocator_min_order_set() to respectively get the (system's) page size
     in use and set the minimum allocation size for an allocator (expressed in
     2^order pages).  [Yann Ylavic]

  *) apr_file_gets: Optimize for buffered files on Windows.
     [Evgeny Kotkov <evgeny.kotkov visualsvn.com>]

  *) apr_crypto: avoid excessive iteration in bcrypt hash.
     [Hanno Böck <hanno hboeck.de>]

  *) apr_siphash: Implement keyed hash function SipHash.  [Yann Ylavic]

  *) apr_atomic: change the API of apr_atomic_casptr() apr_atomic_xchgptr()
     functions to take a volatile pointer to void instead of pointer to
     volatile void.  [Yann Ylavic]

  *) apr_crypto: Add apr_crypto_key() function which supports keys
     generated from a passphrase or a raw secret provided by the caller.
     Deprecate apr_crypto_passphrase(). [Graham Leggett]

  *) apr_crypto_nss: Ensure the SECItem returned by PK11_ParamFromIV
     is properly freed. [Graham Leggett]

  *) apr_crypto: Don't cache the driver if initialisation fails. This
     stops the second and subsequent attempt to use the API from failing
     claiming the library is not initialised. [Graham Leggett]

  *) apr_xml_to_text: Add style APR_XML_X2T_PARSED to maintain a
     consistent namespace prefix. [Jari Urpalainen
     <jari.urpalainen nokia.com>]

  *) apr_os_proc_mutex-unix: For consistency with other OS native to APR
     types constructors/_put()ers and non-unix mutex mechanisms, always
     destroy the underlying native mutex when apr_proc_mutex_destroy() is
     called explicitly.  [Yann Ylavic]

  *) apr_os_proc_mutex_put_ex: Allow to specify whether the OS native
     mutex should or not be cleaned up (destroyed) with the constructed
     APR mutex (given pool), and default to not for the simple _put()
     function.  [Yann Ylavic]

  *) apr_file_io: Add apr_file_pipe_create_pools() allowing a pair of
     pipes to be created, each in a different pool. [Graham Leggett]

  *) apr_table_overlap: Add APR_OVERLAP_TABLES_ADD to merge and set when
     overlapping tables. [Graham Leggett]

  *) apr_filepath_merge: Fix truename length calculation on Windows
     in cases where the "short" name variant is actually longer than
     the "long" or "true" name. See: testnames.c:merge_shortname().
     [Bert Huijben <rhuijben a.o>]

  *) apr_file_mktemp: Use mkostemp() where available to save on system
     calls.  [Joe Orton]

  *) apr_pools: Fix pool debugging output so that creation events are
     always emitted before allocation events and subpool destruction
     events are emitted on pool clear/destroy for proper accounting.
     [Brane Čibej]

  *) apr_atomic: Fix errors when building on Visual Studio 2013 while
     maintaining the ability to build on Visual Studio 6 with Windows
     Server 2003 R2 SDK. PR 57191. [Gregg Smith]

  *) build: Correctly use AC_(PATH|CHECK)_TOOL to support cross compilation.
     PR: 56866.  [Timothy Gu <timothygu99 gmail.com>]

  *) apr_queue: Add apr_queue_timedpush() and apr_queue_timedpop() to
     support timedout operations. PR 56951. [Anthony Minessale <anthm
     freeswitch org>, Travis Cross <tc+asf travislists com>, Yann Ylavic].

  *) apr_allocator: Be less wasteful and don't return a memnode that is
     much larger than what was requested. [Stefan Fuhrmann
     <stefan fuhrmann wandisco com>]

  *) Windows platform: Remove support for Windows 9x.

  *) Added signed apr_intptr_t.  Changed ODBC dbd driver to use this.
     [Tom Donovan]

  *) Changes to apr_pollset_method_e enum value of APR_POLLSET_POLL and
     APR_POLLSET_AIO_MSGQ.  Restore APR_POLLSET_POLL to its pre-r1308910 
     (April 2012) value, and move APR_POLLSET_AIO_MSGQ ahead. This restores
     ABI compat with released branches.  [Eric Covener]

  *) Add apr_pbase64_encode() and apr_pbase64_decode() to encode to/from
     the pool. [Graham Leggett]

  *) Mark apr_dbd_freetds as unsupported, and remove it from all builds
     [Nick Kew]

  *) Fix pool integrity checks with threads. Add new apr_pool_owner_set()
     function. PR 43375, 52785. [Stefan Fritsch]

  *) Add support code to teach valgrind about APR pools, allocators, and
     bucket allocators. [Stefan Fritsch]

  *) apr_socket_accept_filter(): The 2nd and 3rd arguments are now 
     const char * instead of char *.  [Jeff Trawick]

  *) apr_brigades: add a check to prevent infinite while loop in case
     of a corrupted brigade.  Problem evidenced in PR 51062.  Analysis by
     Krzysztof Kostałkowicz <KKostalkowicz ivmx.pl>, patch [Nick Kew].

  *) Support libxml2 as an alternative XML parser to expat [Nick Kew]

  *) Hide apr_wait_for_io_or_timeout() from public view and add instead
     apr_socket_wait() and apr_file_pipe_wait(). [Brian Havard]

  *) Support connecttimeout, readtimeout and writetimeout MySQL options
     PR 48251 [Marko Kevac <marko kevac.org>]

  *) Transfer the apr-util spec file contents to apr.spec. [Graham
     Leggett]

  *) Added Unix domain socket support.  [Mladen Turk]

  *) Merge APR-util into APR.  [various]

  *) apr_socket_listen: Allow larger listen backlog values on Windows 8+.
     [Evgeny Kotkov <evgeny.kotkov visualsvn.com>]

  *) Remove the APR_SENDFILE_DISCONNECT_SOCKET flag. [Ivan Zhakov]

  *) apr_atomic_read64(): Fix non-atomic read on 32-bit Windows [Ivan Zhakov]

  *) apr_proc_create(): Properly escape arguments containing whitespace
     characters on Windows [Ivan Zhakov]

Changes for APR and APR-util 1.7.x and later:

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

Changes for APR and APR-util 1.6.x and later:

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

Changes for APR and APR-util 1.5.x and later:

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

Changes for APR and APR-util 1.4.x and later:

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

Changes for APR and APR-util 1.3.x and later:

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

Changes for APR and APR-util 1.2.x and later:

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

Changes for APR and APR-util 1.1.x and later:

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

Changes for APR and APR-util 1.0.x and later:

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

Changes for APR and APR-util 0.9.x and later/earlier:

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