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 with APR-util 1.1.2

  *) Fix libaprutil.rc for Win32 builds [William Rowe, Justin Erenkrantz]

Changes with APR-util 1.1.1

  *) Fix memory leak in buckets when using APR_POOL_DEBUG mode. [Joe Schaefer]

  *) find_apu.m4: Try installed APR-util before bundled copy if --with-apr-util
     not passed to configure.  [Justin Erenkrantz] 

Changes with APR-util 1.1.0

  *) LDAP: Move all certificate initialisation, and the creation of SSL
     and TLS connections into the apr_ldap_set_option() API. Add support
     for client certificates. [Graham Leggett]
 
  *) Emit the run-time link path option in apu-config after installation
     if the user is linking with libtool.  [Justin Erenkrantz]

  *) Port testmd4 and testmd5 to the new test suite. [Thom May]

  *) Allow passing NULL inbuf/inbytes_left parameters to
     apr_xlate_conv_buffer(), required to correctly terminate the
     output buffer for some stateful character set encodings.
     [Joe Orton]

  *) Link libaprutil against the libraries on which it depends.
     PR 11122.  [Joe Orton]

  *) Add apr_brigade_insert_file() function, to safely insert a file
     into a brigade, regardless of size.  [Joe Orton]

Changes with APR-util 1.0.2

  *) Teach apr_ldap_init() how to handle STARTTLS in addition to the existing
     SSL support. Add apr_ldap_option API. [Graham Leggett]

  *) Rework the LDAP toolkit detection to be more accurate than "OpenLDAP
     detected regardless", while remaining backwards compatible with v1.0.
     [Graham Leggett]

  *) Added the apr_ldap_ssl_add_cert() API to allow multiple certificates
     to be stored and used when establishing an SSL connection to different
     LDAP servers. [Brad Nicholes]

  *) Fix the detection of ldap.h on Solaris - it needs lber.h to be
     defined first. [Graham Leggett]

  *) Add a build script to create a solaris package. [Graham Leggett]

Changes with APR-util 1.0.1

  *) Add support for Berkeley DB 4.3.  [Jani Averbach <jaa jaa.iki.fi>]

  *) SECURITY: CAN-2004-0786 (cve.mitre.org)
     Fix input validation in apr_uri_parse() to avoid passing negative
     length to memcpy for malformed IPv6 literal addresses.
     [Joe Orton]

Changes with APR-util 1.0

  *) Only install apu-$MAJOR-config and add appropriate detection code to
     find_apu.m4 (APU_FIND_APU).  [Max Bowsher <maxb ukf.net>]

  *) Overhaul support for LDAP URL parsing. Instead of using incompatible
     URL parsers and memory that needs freeing, apr-util provides a parser
     which parses the URL and allocates memory from a pool. [Graham Leggett]

  *) Remove support for LDAP v2.0 SDK toolkits. This will be added
     back properly later assuming there is demand for it. In the mean
     time, please use an LDAP v3.0 SDK toolkit. [Graham Leggett]

  *) Add an apr_ldap_err_t structure to handle the return of LDAP
     specific error codes. [Graham Leggett, Brad Nicholes]

  *) Add APR functions to do the job of ldap_init(), hiding toolkit
     specific SSL/TLS handling. Code derived from httpd util_ldap.
     [Graham Leggett]

  *) Add an RPM spec file derived from Fedora Core.
     [Graham Leggett, Joe Orton]

  *) The whole codebase was relicensed and is now available under
     the Apache License, Version 2.0 (http://www.apache.org/licenses).
     [Apache Software Foundation]

  *) A new function, apr_reslist_invalidate, was added so that invalid
     resources can be removed from a reslist instead of being returned
     to the reslist in a broken state.  [Nick Kew <nick webthing.com>]

  *) Switch to a single, top-level make. [Greg Stein]

  *) Add timeout feature to apr_reslist_acquire().  
     [Mladen Turk <mturk apache.org>]

  *) Pass error codes returned from constructors all the way back to
     the reslist consumer. Also fix a minor reslist memory leak that could
     happen when a constructor returns an error code.  PR 23492.
     [Snke Tesch <st@kino-fahrplan.de>, Aaron Bannert]

  *) The following header files have been removed:

     apu_compat.h

Changes with APR-util 0.9.5

  *) Fix corrupt output from the apr_xlate_* interfaces on AIX 4.x.
     [Joe Orton]

  *) Change the order in which ldap.h and lber.h are defined, to fix
     a compile bug in Solaris v2.8 which requires lber.h then ldap.h.
     PR 27379.  [Andrew Connors <andy.connors idea.com>]
 
  *) Restore support for SHA1 passwords in apr_validate_password.
     PR 17343.  [Paul Querna <chip force-elite.com>]

  *) Fix DESTDIR install for bundled expat library.  PR 14076
     [David S. Madole <david madole.net>]

  *) Fix occasional crash in apr_rmm_realloc().  PR 22915.
     [Jay Shrauner <shrauner inktomi.com>]

  *) Fix apr_dbm_exists() for sdbm when sizeof(int) != sizeof(size_t). 
     [Joe Orton]

  *) The whole codebase was relicensed and is now available under
     the Apache License, Version 2.0 (http://www.apache.org/licenses).
     [Apache Software Foundation]

  *) Fix xlate.c compile failure on AIX 5.2.  PR 25701.  [Jeff Trawick]

  *) Fixed a bug in apr_rmm that would cause it to mishandle blocks of
     a size close to the one requested from the allocator.
     [Kevin Wang <xwang_tech yahoo.com>]

Changes with APR-util 0.9.4

  *) Changed apr_bucket_alloc_create() so that it uses the allocator
     from the pool that was passed in rather than creating its own.
     Also, the bucket_allocator is now allocated from the apr_allocator_t
     rather than using apr_palloc().  Added apr_bucket_alloc_create_ex()
     which takes an apr_allocator_t* directly rather than an apr_pool_t*.
     [Cliff Woolley, Jean-Jacques Clar]

  *) Added debugging consistency checks to the buckets code.  Add
     -DAPR_BUCKET_DEBUG to the build flags to enable.
     [Cliff Woolley]

  *) Make the version of the db library APU built against visible.
     [Thom May]

  *) Fix a problem with VPATH builds copying the APR rules.mk into the
     source directory rather than the build directory.  [Justin Erenkrantz]

  *) SECURITY [httpd incident CAN-2003-0189] Address a thread safety
     issue with apr_password_validate() on AIX, Linux, Mac OS X, and
     possibly other platforms.  [Jeff Trawick, Justin Erenkrantz]

  *) Fix a problem with LDAP configuration which caused subsequent
     configure tests to fail since LIBS contained LDAP libraries for
     subsequent tests but LDFLAGS no longer included the path to such 
     LDAP libraries.  [Jeff Trawick]

  *) Fix a problem preventing the use of the bundled Expat when APR-util
     is built stand-alone.  [Jeff Trawick]

  *) Use the same compiler and preprocessor for the APR-util config tests
     which were used by APR.  The user can override this via CC and CPP.
     This was done all along for the actual build, but not necessarily
     for the config tests.  [Jeff Trawick]

  *) Fix apr_uuid_parse() on EBCDIC machines.  [Jeff Trawick]

  *) Fix alignment problem when allocating memory using apr_rmm. The problem
     showed up while trying to write a double in the memory allocated.
     [Madhusudan Mathihalli]

Changes with APR-util 0.9.3

  *) Allow apr_date_parse_rfc to parse 'Sun, 06-Nov-1994 08:49:37 GMT' as a
     valid date.  [Dmitri Tikhonov <dmitri@netilla.com>]

  *) Fix error in apu-config when symlinks are involved.
     [Garrett Rooney <rooneg@electricjellyfish.net>]

Changes with APR-util 0.9.2

  *) Fix the APR_BUCKET_IS_foo() macros so they parenthesize their parameter.
     This fixes compile problems with some types of parameters.
     [Jim Carlson <jcarlson@jnous.com>]

  *) Queue overwrite, we now return the item pushed, not a reference to it. 
     [Paul Marquis <PMarquis@pobox.com, Jacob Lewallen <jlwalle@cs.ucr.edu>]

  *) Remove include/apr_ldap.h on distclean.  PR 15592.  [Justin Erenkrantz]

  *) Fix race conditions in apr_queue.
     [Jacob Lewallen <jlwalle@cs.ucr.edu>]

  *) Stop buildconf copying rules.mk, copy it at configure time. 
     [Thom May]

  *) Make buildconf copy rules.mk as well. 
     [Garrett Rooney <rooneg@electricjellyfish.net>]

  *) Add --includedir flag to apu-config.  [Justin Erenkrantz]

  *) Fix brokenness in sdbm when sizeof(int) != sizeof(size_t)
     (e.g., 64-bit AIX, 64-bit Solaris).  PR 14861.  [Jeff Trawick]

  *) Have buildconf copy required files from apr so that apr-util can build
     on its own.  [Craig Rodrigues <rodrigc@attbi.com>]

  *) Detect OpenLDAP when used with Solaris 9. PR 13427.
     [Gary Algier <gaa@ulticom.com>]

  *) Detect Berkeley DB 4.1 when compiled with --with-uniquenames
     [Thom May]

  *) Allow apu-config to work in symlinked install directories when
     'realpath' is available.  [Justin Erenkrantz]

  *) Fix bug in apr_strmatch when used with case-insensitive patterns.
     [Justin Erenkrantz]

  *) Allow apr_queue to have greater than int number of elements.
     [Justin Erenkrantz]

  *) Detect Berkeley DB 4.0 compiled with --with-uniquenames.
     [Philip Martin <philip@codematters.co.uk>]

  *) Allocate brigades from a bucket allocator rather than a pool. [Brian Pane]

  *) Update with the latest APR renames [Thom May]

  *) Update doxygen tags.  [Justin Erenkrantz]

  *) Add apr_ldap.hw for Windows build.
     [Andre Schild <A.Schild@aarboard.ch>]

  *) Add IPv6 literal address support to apr_uri_parse(), apr_uri_unparse(), 
     and apr_uri_parse_hostinfo().  PR 11887  [Jeff Trawick]

  *) Add apr_brigade_writev()  [Brian Pane]

  *) Add support for Berkeley DB 4.1.  [Justin Erenkrantz]

  *) Add --bindir option to apu-config.  [Justin Erenkrantz]

Changes with APR-util 0.9.1

  *) Add versioning infrastructure.
     [Justin Erenkrantz]

  *) Running "make check" in the toplevel directory or the test/ directory
     will build and run all test programs.  [Aaron Bannert]

  *) Bug #9789 : NDBM support 
     [Toomas Soome <tsoome@muhv.pri.ee>, Ian Holsman]

  *) Added a Thread safe FIFO bounded buffer (apr_queue) [Ian Holsman]

  *) Changed file_bucket_setaside() to use apr_file_setaside() instead
     of turning the file bucket into an mmap bucket.  [Brian Pane]

  *) Install libaprutil support libraries before installing libaprutil
     itself, since on some platforms libaprutil is relinked during
     make install and the support libraries need to exist already.
     [Jeff Trawick]

  *) Added a Resource List API for threadsafe access to persistent
     and dynamically created user-defined resources.  [Aaron Bannert]

  *) Adopted apr-util/xlate from apr/i18n for inclusion of apr-iconv
     as required by missing libiconv.  [William Rowe]

  *) Adopted apr-util/crypto/ uuid and md5 from apr.  [William Rowe]

  *) Look for expat in lib64 directories.  [Peter Poeml <poeml@suse.de>]

  *) Faster implementation of apr_brigade_puts()  [Brian Pane]

  *) Fixed a segfault in apr_date_parse_rfc() for some date formats
     where it was trying to overlay a potentially static input
     string even though it didn't really need to.
     [Cliff Woolley, Doug MacEachern]

  *) Ensure that apu-config does not print libtool libraries when
     using --libs.  [Justin Erenkrantz]

  *) Added apr_bucket_file_enable_mmap() function to the bucket
     API to let an application control whether a file bucket may
     be turned into an mmap bucket upon read.  (The default remains
     to do the mmap, but this function lets the app prevent the
     mmap in contexts where mmap would be a bad idea.  Examples
     include multiprocessors where mmap doesn't scale well and
     NFS-mounted filesystems where a bus error can result if
     a memory-mapped file is removed or truncated.) [Brian Pane]

  *) Added string-matching API (apr_strmatch.h)  [Brian Pane]

  *) Rearrange INCLUDES so that APRUTIL_PRIV_INCLUDES is always
     first.  [Garrett Rooney <rooneg@electricjellyfish.net>]

  *) Add --old-expat option to apu-config to allow users of apr-util to
     determine what expat it should expect to be installed.  If the
     flag is set to yes, it should include xmlparse.h.  If it is set to
     no, it should include expat.h.  [Justin Erenkrantz]

  *) Fix exporting of includes in apu-config.  [Justin Erenkrantz]

  *) Change bucket brigades API to allow a "bucket allocator" to be
     passed in at certain points.  This allows us to implement freelists
     so that we can stop using malloc/free so frequently.
     [Cliff Woolley, Brian Pane]

  *) add apr_rmm_realloc() function
     [Madhusudan Mathihalli <madhusudan_mathihalli@hp.com>]

  *) renames: apr_ansi_time_to_apr_time becomes apr_time_ansi_put
     ap_exploded_time_t becomes apr_time_exp_t
     [Thom May <thom@planetarytramp.net>]

  *) Add detection support for FreeBSD's expat and expat2 ports.
     [Justin Erenkrantz]

  *) Deprecate check_brigade_flush(), which had several nasty bugs, and
     which was causing apr_brigade_write()'s logic to be less than obvious.
     Everything is now done in a slightly rearranged apr_brigade_write().
     [Cliff Woolley]

  *) Don't add /usr/include to the INCLUDES variable on expat's account.
     [Joe Orton <joe@manyfish.co.uk>]

  *) Remove the autoconf 2.5x cache directory in buildconf.
     [Joe Orton <joe@manyfish.co.uk>]

  *) BerkleyDB should NULL out the key if it is @EOF in vt_db_nextkey
     [Ian Holsman]

  *) Add ability to natively fetch and split brigades based on LF lines.
     [Justin Erenkrantz]

  *) add --with-berkeley-db=DIR & --with-gdbm  configure flags
     [Ian Holsman/Justin Erenkrantz]

  *) Fix expat detection to recognize installed versions.
     [Eric Gillespie, Jr. <epg@pretzelnet.org>]

  *) Add find_apu.m4 to allow third-party programs that use APR-util
     to have a standard m4 macro for detection.  [Justin Erenkrantz]

  *) Add apu-config - a shell script to allow third-party programs
     easy access to APR configuration parameters.  [Justin Erenkrantz]

  *) Add GMT offset calculation to apr_date_parse_rfc().  
     [Justin Erenkrantz]

  *) Introduce the apr_rmm api, to allow relocatable memory management
     of address-independent data stores, such as shared memory.
     [William Rowe]

  *) Rework and fix VPATH-build support.  [Justin Erenkrantz]

  *) Add support for Berkeley DB4.  [Justin Erenkrantz]

  *) Improve testdbm help.  [Justin Erenkrantz]

  *) Improve autoconf detection of DBMs.  [Justin Erenkrantz]

  *) BerkeleyDBM v2 now checks minor level for cursor ops [Ian Holsman]

  *) Reading a file bucket bigger than APR_MMAP_LIMIT (4MB) now yields
     a string of 4MB mmap buckets, rather than a string of 8KB heap buckets
     plus a 4MB mmap bucket.  To accomodate this, the mmap bucket destroy
     function explicitly deletes the apr_mmap_t after last reference
     to avoid having too much of a large file mapped at once if possible.
     [Cliff Woolley]

  *) Multi-DBM support (via apr_dbm_open_ex).  [Ian Holsman]

  *) Use apr_mmap_dup in mmap_setaside().  [Brian Pane <bpane@pacbell.net>]

  *) Dropped the "w" parameter from apr_bucket_heap_create() and
     apr_bucket_heap_make().  That parameter was originally intended
     to return the amount of data copied into the bucket, but it
     ended up being unnecessary because that amount is invariant from
     the size of the data and is available as b->length in the
     resulting bucket anyway.  [Cliff Woolley]

  *) Fix Makefile conversion for BSD/OS.  [Cliff Woolley]

  *) Use APR_XtOffsetOf instead of offsetof() in the ring macros for
     portability.  [Cliff Woolley]

  *) We now create exports.c and export_vars.h, which in turn create
     exports.c.  From this we generate two more files with different
     purposes: aprutil.exp - list of exported symbols; and exports.lo
     (exports.o) - an object file that can be linked with an executable
     to force resolution of all apr-util symbols.   [Aaron Bannert]

  *) Fix Berkley DBM support [Ian Holsman <ianh@apache.org>]

  *) Fix apr_brigade_vprintf so that it can handle more than
     4k of data at one time.  [Cody Sherr <csherr@covalent.net>]

  *) prefix UNP_* flags with APR_URI_

     rename:
     apr_uri_components                  -> apr_uri_t
     apr_uri_unparse_components          -> apr_uri_unparse
     apr_uri_parse_components            -> apr_uri_parse
     apr_uri_parse_hostinfo_components   -> apr_uri_parse_hostinfo

     s/APU_URI_/APR_URI_/g
     [Perl]

  *) Landed the link-to-LDAP to the build process, and the LDAP v2/v3
     compatibility functions.
     [Dave Carrigan <dave@rudedog.org>, Graham Leggett]

  *) Fix URI unparse function to handle the case where it would place a @
     when both the username and password were present but omitted.
     [Jon Travis <jtravis@covalent.net]

  *) Added apr_xml_parse_file() routine and a testxml program.
     [Ian Holsman <ianh@cnet.com>]

  *) Extend apr_bucket struct to add a pointer to a function used
     to free the bucket. This change enables custom buckets to
     completely specify how they are to be allocated and freed.
     Before this change, custom buckets were required to use the 
     same memory allocation scheme as the standard APR buckets.
     [Saeid Sakhitab, Bill Stoddard, Cliff Woolley, Roy Fielding]

  *) Install Expat when installing APR-util.  [Justin Erenkrantz]

  *) Make APR-util configure script rely on APR.  This removes the locally
     generated copy of libtool and uses the one in APR.  Fix up how we
     call the expat configure script.  Generate config.nice file.
     [Justin Erenkrantz]

  *) The apr_bucket lengths are now consistently apr_size_t, while any
     apr_brigade lengths (short of a read) are consistently apr_off_t.
     This is required for APR_HAS_LARGE_FILES handling.  [William Rowe]

  *) apr_bucket_file_create() and apr_bucket_file_make() now take a pool
     parameter which is the pool into which any needed data structures
     should be created during file_read().  This is used for MMAPing the
     file and reopening the file if the original apr_file_t is in XTHREAD
     mode.  [Cliff Woolley]

  *) apr_brigade_partition() now returns an apr_status_t. [Cliff Woolley]

  *) Add MD4 implementation in crypto.  [Sander Striker, Justin Erenkrantz]

  *) Moved httpd 2.0.18's util_date to apr_date and enhanced its parsing
     capabilities.  [Justin Erenkrantz]

  *) Moved httpd 2.0.18's util_uri to apr_uri and name-protected its
     symbols and functions.  [Justin Erenkrantz, Roy Fielding]

  *) Rename field "private" in struct apr_xml_elem to "priv" for C++
     compatibility.  PR #7727  [Joshua MacDonald <jmacd@cs.berkeley.edu>]

  *) Make APR_IMPLEMENT_EXTERNAL_HOOK_BASE generate a 
     ${namespace}_hook_get_${hookname} function to fetch the
     list of registered hooks [Doug MacEachern]

  *) Allow LTFLAGS to be overridden by the configure command-line
     (default="--silent") and introduce LT_LDFLAGS.  [Roy Fielding]

  *) Add APR_SHARELOCK support to apr_sdbm_open(), locking read operations
     with a shared lock and all write ops with an excl lock.  [Will Rowe]

  *) Namespace protect apr_sdbm, and normalize the return values (including
     the apr_sdbm_fetch, apr_sdbm_firstkey and apr_sdbm_nextkey functions).
     Normalized the get/clear error function names, and stores the actual 
     apr error for apr_sdbm_error_get. [Will Rowe]

  *) Introduce an apr_fileperms_t argument to apr_dbm_open(). [Will Rowe]

  *) Removed apr_bucket_do_create() macro, which was causing warnings
     about unreachable code in some compilers (notably MSVC).  What
     used to be done by this macro is now done inline in the various
     apr_bucket_foo_create() functions.  [Cliff Woolley]

  *) Make clean, distclean, and extraclean consistently according to the
     Gnu makefile guidelines.  [Justin Erenkrantz <jerenkrantz@ebuilt.com>]

  *) Migrate the --disable-libtool changes from APR to APR-util.
     This cleans things up, and allows more flexibility when building
     programs.  [Ryan Bloom]

  *) Allow APR-util to be compiled without libtool.  The default is
     to use libtool, but it can turned off with --disable-libtool
     on the configure command.  [Ryan Bloom]

  *) Repair calling convention for apr_register_optional_fn to
     eliminate GP fault on Win32.  [William Rowe]

  *) Substantial changes to correct linkage and declarations for
     generic hooks on dso architectures.  [Ben Laurie, Will Rowe]

  *) apr_bucket_shared_destroy() now returns a boolean value.
     [Cliff Woolley]

  *) We have to initialize the heap buckets to the correct length.
     we were seeing heap buckets with 17 chars in them reporting
     a length of 9017, because they were initialized to the amount
     of memory allocated, instead of the amount of memory used.
     This was only an issue for heap buckets created by the
     apr_brigade_* functions.   [Ryan Bloom]

  *) apr_bucket_init_types() and apr_bucket_insert_type() have been
     removed... they're not needed anymore. [Cliff Woolley]

  *) The apr_bucket_shared and apr_bucket_simple structures have been
     removed as an API simplification/optimization.  This should be
     transparent outside APR-util except to callers who attempt to
     directly manipulate the buckets' internal structure (which is
     not recommended anyway) and to callers who create their own
     bucket types. [Cliff Woolley]

  *) apr_bucket_simple_split() and apr_bucket_simple_copy() are now
     exported functions, which could be helpful in implementing
     external bucket types. [Cliff Woolley]

  *) The third parameter to apr_bucket_shared_make() is now
     'apr_off_t length' rather than 'apr_off_t end', since the
     end usually had to be computed by the caller and all we
     really want is the length anyway. [Cliff Woolley]

