﻿                                                     -*- coding: utf-8 -*-

Changes with APR-util 1.2.13

  *) APR_LDAP_SIZELIMIT should prefer LDAP_DEFAULT_LIMIT/-1 when the
     SDK supports it, but in the absence of LDAP_DEFAULT_LIMIT (and
     LDAP_NO_LIMIT/0) it is not safe to use a literal -1.
     PR23356 [Eric Covener]

  *) Better error detection for bucket allocation failures. 
     [Jim Jagielski]

  *) Fix a regression in apr_brigade_partition that causes integer overflows
     on systems where apr_off_t > apr_size_t.  [Ruediger Pluem]

  *) Ensure that apr_uri_unparse does not add scheme to URI if
     APR_URI_UNP_OMITSITEPART flag is set. PR 44044.
     [Michael Clark <michael metaparadigm.com>]

  *) Add better scheme/host parsing to apr_uri.
     [Henry Jen <henryjen ztune.net>]

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

Changes with APR-util 1.2.12

  *) Wakeup threads waiting for a reslist resource after a resource was
     invalidated. [Ruediger Pluem]

  *) Fix GMT offset for several date formats and add a new format.
     [Maxime Petazzoni <maxime.petazzoni bulix.org>]

  *) 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]

  *) Type mismatch between apr_datum_t and GDBM's datum type could
     yield a corrupt apr_datum_t when reading from a GDBM database.
     PR 43025.  [Björn Wiberg <Bjorn.Wiberg its.uu.se>, Davi Arnaut]

  *) Add the #define APR_LDAP_SIZELIMIT that is set appropriately
     for the LDAP SDK that is being used. Also include ZOS as an
     LDAP Platform.
     PR 37814.  [David Jones <oscaremma gmail com>, Davi Arnaut]

  *) Fix exported LDFLAGS with new expat detection.  PR 43337.
     [Justin Erenkrantz]

  *) Add MySQL DBD driver [Nick Kew, Bojan Smojver]

Changes with APR-util 1.2.10

  *) Support BerkeleyDB 4.6.  [Arfrever Frehtes Taifersar Arahesis]

  *) Test improvements to validate testmd4 and testdbm, unattended.
     [Bojan Smojver]

Changes with APR-util 1.2.9

  *) Ensure that an apr_reslist shrinks back to SMAX via the TTL by
     reorganising the resource list from a queue to a stack.
     PR 40348.  [Christian BOITEL <christian_boitel yahoo.fr>]

  *) Fix Solaris 2.8+ fdatasync() detection. The fdatasync() function
     is marked as part of the Realtime library functions.
     PR 37343.  [Davi Arnaut]

  *) Change configure's expat detection to use standard linker-based
     tests, fixing build on e.g. biarch Linux systems.  PR 28205.
     [Joe Orton, Ruediger Pluem]     

  *) Portably implement testdate's long-time constants to solve
     compilation faults where #LL isn't valid.  [Curt Arnold]

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

  *) Fix handling of attribute namespaces in apr_xml_to_text() when
     a namespace map is provided.  PR 41908.  [Joe Orton]

Changes with APR-util 1.2.8

  *) Add support for Berkeley DB 4.5 to the configure scripts.
     [Garrett Rooney]

  *) Allow apr_queue.h to be included before other APR headers.
     PR 40891 [Henry Jen <henryjen ztune.net>]

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

  *) Implement prepared statement support in SQLite3 DBD driver
     [Bojan Smojver]

  *) Fix to ensure that "deprecated" LDAP interfaces are still 
     exposed if using OpenLDAP 2.3.  [Joe Orton]

  *) Fix incorrect byte order and incorrect timestamp type
     in the fallback UUID generator used when no external UUID
     generator is detected by APR.  PR 37342.  [Max Bowsher]

Changes with APR-util 1.2.7

  *) Fix apr_dbd_init to be safe to call multiple times
     [Bojan Smojver <bojan rexursive com>, Nick Kew]

  *) Win32 / Netware - add missing apu_version.c for apu_version_string()
     to the Windows and Netware specific builds.  Unix platforms supported
     this API since 0.9.1.  [William Rowe, Brad Nicholes].

Changes with APR-util 1.2.6

  *) Stop trying to link against Berkeley DB by default.  To enable use
     of Berkeley DB users must now explicitly pass --with-berkeley-db to
     configure, since Berkeley DB is released under a viral license that
     requires distribution of source code for any program that uses it.
     [Garrett Rooney]

  *) Stop trying to link against GDBM by default.  To enable use of GDBM
     users must now explicitly pass --with-gdbm to configure, since GDBM
     is licensed under the GPL.
     [Garrett Rooney]

  *) Fix VPATH builds, and symlink builds where apr and apr-util
     reside in parallel as symlinks to directories with more explicit
     names, e.g. apr-1.x and apr-util-1.x.  This solves various breakage
     on Solaris in particular with ./buildconf and ./configure.  Also
     eliminated the nested ../apr-iconv/buildconf, given that apr-util
     didn't bother with ../apr/buildconf, and this was inconsistant.
     [William Rowe]

  *) Fix the escape implementations for the sqlite2 and sqlite3 dbd
     back ends.
     [Ronen Mizrahi <ronen tversity.com>, Garrett Rooney]

  *) Add support for Berkeley DB 4.4 to the configure scripts.
     [Garrett Rooney]

  *) Fix bug in test suite that cause testbuckets to write 8GB file
     on Mac OS X.  [Justin Erenkrantz]

Changes with APR-util 1.2.2

  *) Teach configure how to find the Novell LDAP SDK. [Graham Leggett]
 
  *) Fix usage of ldapssl_init/ldap_sslinit on platforms that support
     these API's including Win32.  Support APR_HAS_LDAP_START_TLS_S
     flag in the Win32 LDAP API, to drop usage of ldap_start_ssl_s
     and ldap_stop_ssl_s on Win32 by default (change the flag in apr_ldap.hw
     to enable if supported on a given OS level). [William Rowe]

Changes with APR-util 1.2.1

  *) Fix apr_rmm_realloc() offset calculation bug.  [Keith Kelleman
     <keith.kelleman oracle.com>]

  *) Add sqlite3 support to APR DBD. [Rick Keiner <rick_keiner yahoo.com>]

  *) Fix build failure with non-threaded APR on AIX.  PR 34655.
     [Ryan Murray <rmurray+apache cyberhqz.com>]

  *) Add sqlite2 support to APR DBD. [Ryan Phillips <ryan trolocsis.com>]

  *) Introduction of APR DBD layer.  [Nick Kew]


Changes for APR-util 1.1.x and later:

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

Changes for APR-util 1.0.x and later:

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

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

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