apr-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bo...@apache.org
Subject svn commit: r784636 [33/47] - in /apr/site/trunk/docs/docs: apr-util/trunk/ apr/trunk/
Date Mon, 15 Jun 2009 00:01:47 GMT
Added: apr/site/trunk/docs/docs/apr/trunk/group___a_p_r___util___bucket___brigades.html
URL: http://svn.apache.org/viewvc/apr/site/trunk/docs/docs/apr/trunk/group___a_p_r___util___bucket___brigades.html?rev=784636&view=auto
==============================================================================
--- apr/site/trunk/docs/docs/apr/trunk/group___a_p_r___util___bucket___brigades.html (added)
+++ apr/site/trunk/docs/docs/apr/trunk/group___a_p_r___util___bucket___brigades.html Mon Jun 15 00:01:38 2009
@@ -0,0 +1,2868 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Apache Portable Runtime: Bucket Brigades</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+  <div class="tabs">
+    <ul>
+      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li><a href="examples.html"><span>Examples</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="contents">
+<h1>Bucket Brigades<br>
+<small>
+[<a class="el" href="group___a_p_r___util.html">APR Utility Functions</a>]</small>
+</h1><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structapr__bucket__type__t.html">apr_bucket_type_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structapr__bucket.html">apr_bucket</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structapr__bucket__brigade.html">apr_bucket_brigade</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structapr__bucket__refcount.html">apr_bucket_refcount</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structapr__bucket__heap.html">apr_bucket_heap</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structapr__bucket__pool.html">apr_bucket_pool</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structapr__bucket__mmap.html">apr_bucket_mmap</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structapr__bucket__file.html">apr_bucket_file</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">union &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="unionapr__bucket__structs.html">apr_bucket_structs</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g82bf404af30875135c65e2c13ad035e5">APR_BUCKET_BUFF_SIZE</a>&nbsp;&nbsp;&nbsp;8000</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#ge1dfe8bf117d10e7dc5b8e0c08f0ebb2">APR_BRIGADE_CHECK_CONSISTENCY</a>(b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#gedaeb3fbe71aac408377471b8a54dc08">APR_BUCKET_CHECK_CONSISTENCY</a>(e)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g858da66dccab1e063415678bb115788a">APR_BRIGADE_SENTINEL</a>(b)&nbsp;&nbsp;&nbsp;APR_RING_SENTINEL(&amp;(b)-&gt;list, <a class="el" href="structapr__bucket.html">apr_bucket</a>, link)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g836f61da6cce15074eff257ce4b6fc0f">APR_BRIGADE_EMPTY</a>(b)&nbsp;&nbsp;&nbsp;APR_RING_EMPTY(&amp;(b)-&gt;list, <a class="el" href="structapr__bucket.html">apr_bucket</a>, link)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#gb5826a11eb6ba90786a94282f806c230">APR_BRIGADE_FIRST</a>(b)&nbsp;&nbsp;&nbsp;APR_RING_FIRST(&amp;(b)-&gt;list)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g40e0ef2a904aa519ca9d63288dee0b4d">APR_BRIGADE_LAST</a>(b)&nbsp;&nbsp;&nbsp;APR_RING_LAST(&amp;(b)-&gt;list)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g6dc39d8757e18941a6fb069b0c18fbd3">APR_BRIGADE_INSERT_HEAD</a>(b, e)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g5447595f8374296c5ffe208db39b2f5d">APR_BRIGADE_INSERT_TAIL</a>(b, e)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g7cecbc89be912ce9ab24c889eb8f955b">APR_BRIGADE_CONCAT</a>(a, b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g52ba212f76507a79ccae213875150ad1">APR_BRIGADE_PREPEND</a>(a, b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#ge012adeccda754eabc42b7855bec081e">APR_BUCKET_INSERT_BEFORE</a>(a, b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g1f8114b7316d1fef1deb95abc8f02341">APR_BUCKET_INSERT_AFTER</a>(a, b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g7171f690b203d548a5b6ae0b079068d8">APR_BUCKET_NEXT</a>(e)&nbsp;&nbsp;&nbsp;APR_RING_NEXT((e), link)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#gf229fecd4174efd4d6a9774e3048ae28">APR_BUCKET_PREV</a>(e)&nbsp;&nbsp;&nbsp;APR_RING_PREV((e), link)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g2c46a1b717a87b68bd98b425e0c64977">APR_BUCKET_REMOVE</a>(e)&nbsp;&nbsp;&nbsp;APR_RING_REMOVE((e), link)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g00c2e104125f124c3a52627863432de9">APR_BUCKET_INIT</a>(e)&nbsp;&nbsp;&nbsp;APR_RING_ELEM_INIT((e), link)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g506cb29cc1ec1abeb487e01b122bd4d9">APR_BUCKET_IS_METADATA</a>(e)&nbsp;&nbsp;&nbsp;((e)-&gt;type-&gt;is_metadata)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g24105da0bb755a775c4b2a519d7c25f9">APR_BUCKET_IS_FLUSH</a>(e)&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#g5e315ec48f1dc4b06877fc63518248c9">apr_bucket_type_flush</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g89b225e1c08473766eec719b985ca0d6">APR_BUCKET_IS_EOS</a>(e)&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#g21b10f799879619e86369add3dd2848b">apr_bucket_type_eos</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g1d54037bb6953c73d5c61f64c311d470">APR_BUCKET_IS_FILE</a>(e)&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#gaeb5cd89cf6ba890f329bbd656d2824d">apr_bucket_type_file</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g03e62d86c994d1d1cc9be3eb8b8f6ac6">APR_BUCKET_IS_PIPE</a>(e)&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#g010d5dcb116755a68090d573584cd256">apr_bucket_type_pipe</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g4b8315b498e4eb67efde1c83bdbe8b87">APR_BUCKET_IS_SOCKET</a>(e)&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#g107a7f0eeb8834deae36c2a3acb6ddd0">apr_bucket_type_socket</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g3dee4fbd5b4e16e5188a6cfec40b6961">APR_BUCKET_IS_HEAP</a>(e)&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#ge48a3b98a024d04fd3d11d7b05a3014b">apr_bucket_type_heap</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g1a7e7ac5fddbab4ce189e8d3007446ff">APR_BUCKET_IS_TRANSIENT</a>(e)&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#g0445b8ae0f59c8348b2b34dae23531f3">apr_bucket_type_transient</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g53f1188c168acf7dcfabfa1ac5a08655">APR_BUCKET_IS_IMMORTAL</a>(e)&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#gc254c94d966f069f8942a04ec89f54ae">apr_bucket_type_immortal</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g1693d49aeb0287e3b171c922c6b633d2">APR_BUCKET_IS_MMAP</a>(e)&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#g0e92cccf3ba14bb5cafcb91e1f27879d">apr_bucket_type_mmap</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#gdbe80a9016da6a06ab414ba61d6625d0">APR_BUCKET_IS_POOL</a>(e)&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#ga18a611f4fdb03f35ebc29fbfda55d2f">apr_bucket_type_pool</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#ge3ccf4c383c9e7fea28354cc8e029626">APR_BUCKET_ALLOC_SIZE</a>&nbsp;&nbsp;&nbsp;APR_ALIGN_DEFAULT(2*sizeof(<a class="el" href="unionapr__bucket__structs.html">apr_bucket_structs</a>))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#gfc0dae1e90a798284ed777a0c9e90ec6">apr_bucket_destroy</a>(e)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g8925c02a7f95e8c1c3986294d4678797">apr_bucket_delete</a>(e)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#ge44ae938c6c60e148430fdb098dcf28f">apr_bucket_read</a>(e, str, len, block)&nbsp;&nbsp;&nbsp;(e)-&gt;type-&gt;read(e, str, len, block)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#gb00941ffd472982693eb415a964de7af">apr_bucket_setaside</a>(e, p)&nbsp;&nbsp;&nbsp;(e)-&gt;type-&gt;setaside(e,p)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g5bb8827a8dd1baa6ac32682e13e9d8c2">apr_bucket_split</a>(e, point)&nbsp;&nbsp;&nbsp;(e)-&gt;type-&gt;split(e, point)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#gb33cc08b7f064d06397f312e427279c3">apr_bucket_copy</a>(e, c)&nbsp;&nbsp;&nbsp;(e)-&gt;type-&gt;copy(e, c)</td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="structapr__bucket__brigade.html">apr_bucket_brigade</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g9f50254e85c7aad79ca289a0ba069025">apr_bucket_brigade</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="structapr__bucket.html">apr_bucket</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#ga17a456120961b1c5af0525f4900a457">apr_bucket</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="group___a_p_r___util___bucket___brigades.html#g9a30babfeb6e290db124d8f9b69e49e4">apr_bucket_alloc_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g9a30babfeb6e290db124d8f9b69e49e4">apr_bucket_alloc_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="structapr__bucket__type__t.html">apr_bucket_type_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g4a152aaf7d851c81af73b7e84dc1a8a2">apr_bucket_type_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef <a class="el" href="group__apr__errno.html#gf76ee4543247e9fb3f3546203e590a6c">apr_status_t</a>(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#gcdf6dc9d4c81c64834e5e509281f7f16">apr_brigade_flush</a> )(<a class="el" href="structapr__bucket__brigade.html">apr_bucket_brigade</a> *bb, void *ctx)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="structapr__bucket__refcount.html">apr_bucket_refcount</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g785fd3402961b30315975b0c87c87706">apr_bucket_refcount</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="structapr__bucket__heap.html">apr_bucket_heap</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#gede6e77d621d0f3f7d2685d489d01283">apr_bucket_heap</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="structapr__bucket__pool.html">apr_bucket_pool</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g211e00d871029de148116cd24b070aed">apr_bucket_pool</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="structapr__bucket__mmap.html">apr_bucket_mmap</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g27ede7c3a29627c7d184dc7cfbc4f767">apr_bucket_mmap</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="structapr__bucket__file.html">apr_bucket_file</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g1a786f7edac4d7a2c212f0fe74457b3d">apr_bucket_file</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef union <a class="el" href="unionapr__bucket__structs.html">apr_bucket_structs</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g3c0929c971f94de4521fb0fea6fd3209">apr_bucket_structs</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Enumerations</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g756973fb6392bd1026c3d96b4519776d">apr_read_type_e</a> { <a class="el" href="group___a_p_r___util___bucket___brigades.html#gg756973fb6392bd1026c3d96b4519776d2d983f5b7fd996434e0dded171c261d8">APR_BLOCK_READ</a>, 
+<a class="el" href="group___a_p_r___util___bucket___brigades.html#gg756973fb6392bd1026c3d96b4519776d42b97663ca71fbbf2e2af7c8192e5dd8">APR_NONBLOCK_READ</a>
+ }</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#gcf9eda09476ce80470514efcf6144692">APU_DECLARE</a> (<a class="el" href="structapr__bucket__brigade.html">apr_bucket_brigade</a> *) apr_brigade_create(<a class="el" href="group__apr__pools.html#gf137f28edcf9a086cd6bc36c20d7cdfb">apr_pool_t</a> *p</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g926dce3ea57b811f0833dd06f3d08426">APU_DECLARE</a> (<a class="el" href="group__apr__errno.html#gf76ee4543247e9fb3f3546203e590a6c">apr_status_t</a>) apr_brigade_destroy(<a class="el" href="structapr__bucket__brigade.html">apr_bucket_brigade</a> *b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g16a1f59cc84933bb977e5ed1f803e81e">APU_DECLARE_NONSTD</a> (<a class="el" href="group__apr__errno.html#gf76ee4543247e9fb3f3546203e590a6c">apr_status_t</a>) apr_brigade_putstrs(<a class="el" href="structapr__bucket__brigade.html">apr_bucket_brigade</a> *b</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g27f6e71b8633cd35233362c55205ae1d">APU_DECLARE</a> (<a class="el" href="structapr__bucket.html">apr_bucket</a> *) apr_brigade_insert_file(<a class="el" href="structapr__bucket__brigade.html">apr_bucket_brigade</a> *bb</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g555f01b5d309441a9d8a96e8dbaa470f">APU_DECLARE_NONSTD</a> (<a class="el" href="group___a_p_r___util___bucket___brigades.html#g9a30babfeb6e290db124d8f9b69e49e4">apr_bucket_alloc_t</a> *) apr_bucket_alloc_create(<a class="el" href="group__apr__pools.html#gf137f28edcf9a086cd6bc36c20d7cdfb">apr_pool_t</a> *p)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#ga36958c6bae91ffb67ea0bb3a932803c">APU_DECLARE_NONSTD</a> (void) apr_bucket_alloc_destroy(<a class="el" href="group___a_p_r___util___bucket___brigades.html#g9a30babfeb6e290db124d8f9b69e49e4">apr_bucket_alloc_t</a> *list)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g45c726656436cdba52fbc7e4cde2e89e">APU_DECLARE_NONSTD</a> (void *) apr_bucket_alloc(apr_size_t size</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbc41b7f5611fbb6b712ea1c802deb1b8"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::free_func" ref="gbc41b7f5611fbb6b712ea1c802deb1b8" args="(void *data))" -->
+const char apr_size_t void(*)&nbsp;</td><td class="memItemRight" valign="bottom"><b>free_func</b> (void *data))</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf196b368accdf6580a5c7db8e3e79162"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::list" ref="gf196b368accdf6580a5c7db8e3e79162" args="" -->
+<a class="el" href="group___a_p_r___util___bucket___brigades.html#g9a30babfeb6e290db124d8f9b69e49e4">apr_bucket_alloc_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>list</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g75a1212aed1a8b96ab073728965d49ec"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::e" ref="g75a1212aed1a8b96ab073728965d49ec" args="" -->
+<a class="el" href="structapr__bucket.html">apr_bucket</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>e</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb35e0a3ed8c0326a9cb61bc42054e20d"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::a" ref="gb35e0a3ed8c0326a9cb61bc42054e20d" args="" -->
+<a class="el" href="structapr__bucket.html">apr_bucket</a> <a class="el" href="structapr__bucket__brigade.html">apr_bucket_brigade</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>a</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga171c51f2fad7a4b51dcb4c4347c78a6"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::point" ref="ga171c51f2fad7a4b51dcb4c4347c78a6" args="" -->
+apr_off_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>point</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd94b78a8a65bce49b41a534acf716151"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::after_point" ref="gd94b78a8a65bce49b41a534acf716151" args="" -->
+apr_off_t <a class="el" href="structapr__bucket.html">apr_bucket</a> **&nbsp;</td><td class="memItemRight" valign="bottom"><b>after_point</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g80716da2e4f477e5575cf941af57749c"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::read_all" ref="g80716da2e4f477e5575cf941af57749c" args="" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><b>read_all</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g29fa8215fc015266af29c404bb4d84c2"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::length" ref="g29fa8215fc015266af29c404bb4d84c2" args="" -->
+int apr_off_t *&nbsp;</td><td class="memItemRight" valign="bottom"><b>length</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gaba9f1dcf8f3a91b49aa1a8e3c755a52"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::c" ref="gaba9f1dcf8f3a91b49aa1a8e3c755a52" args="" -->
+char *&nbsp;</td><td class="memItemRight" valign="bottom"><b>c</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g36f4a31e320c8f18d8691ce72c8dc166"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::len" ref="g36f4a31e320c8f18d8691ce72c8dc166" args="" -->
+char apr_size_t *&nbsp;</td><td class="memItemRight" valign="bottom"><b>len</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g8fea43b485988aa6df5dced9dddbe733"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::pool" ref="g8fea43b485988aa6df5dced9dddbe733" args="" -->
+char apr_size_t <a class="el" href="group__apr__pools.html#gf137f28edcf9a086cd6bc36c20d7cdfb">apr_pool_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>pool</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf26be2806acc50509fd2becf8c7b9eb0"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::bbIn" ref="gf26be2806acc50509fd2becf8c7b9eb0" args="" -->
+<a class="el" href="structapr__bucket__brigade.html">apr_bucket_brigade</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>bbIn</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gdd63e6711e1269de89573e6332a67b81"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::block" ref="gdd63e6711e1269de89573e6332a67b81" args="" -->
+<a class="el" href="structapr__bucket__brigade.html">apr_bucket_brigade</a> <a class="el" href="group___a_p_r___util___bucket___brigades.html#g756973fb6392bd1026c3d96b4519776d">apr_read_type_e</a>&nbsp;</td><td class="memItemRight" valign="bottom"><b>block</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g0a63d8fbd6651d878c2b7a1ed1f8f748"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::maxbytes" ref="g0a63d8fbd6651d878c2b7a1ed1f8f748" args="" -->
+<a class="el" href="structapr__bucket__brigade.html">apr_bucket_brigade</a> <br class="typebreak">
+<a class="el" href="group___a_p_r___util___bucket___brigades.html#g756973fb6392bd1026c3d96b4519776d">apr_read_type_e</a> apr_off_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>maxbytes</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbef47b3f526bb25d85fa23fe7a1ceb61"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::vec" ref="gbef47b3f526bb25d85fa23fe7a1ceb61" args="" -->
+struct iovec *&nbsp;</td><td class="memItemRight" valign="bottom"><b>vec</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g958868c49101dc0eea6ae2e148749ad5"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::nvec" ref="g958868c49101dc0eea6ae2e148749ad5" args="" -->
+struct iovec int *&nbsp;</td><td class="memItemRight" valign="bottom"><b>nvec</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2f5b7d797cd2fe7d8486064200999d40"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::flush" ref="g2f5b7d797cd2fe7d8486064200999d40" args="" -->
+<a class="el" href="group___a_p_r___util___bucket___brigades.html#gcdf6dc9d4c81c64834e5e509281f7f16">apr_brigade_flush</a>&nbsp;</td><td class="memItemRight" valign="bottom"><b>flush</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g690dd15edfb28f03a9bf9a8cda7f8ccc"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::ctx" ref="g690dd15edfb28f03a9bf9a8cda7f8ccc" args="" -->
+<a class="el" href="group___a_p_r___util___bucket___brigades.html#gcdf6dc9d4c81c64834e5e509281f7f16">apr_brigade_flush</a> void *&nbsp;</td><td class="memItemRight" valign="bottom"><b>ctx</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9785b220cb9f2802aaef49256e257488"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::va" ref="g9785b220cb9f2802aaef49256e257488" args="" -->
+<a class="el" href="group___a_p_r___util___bucket___brigades.html#gcdf6dc9d4c81c64834e5e509281f7f16">apr_brigade_flush</a> void va_list&nbsp;</td><td class="memItemRight" valign="bottom"><b>va</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gab9226fe8f632e1f998e24276d478f30"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::str" ref="gab9226fe8f632e1f998e24276d478f30" args="" -->
+<a class="el" href="group___a_p_r___util___bucket___brigades.html#gcdf6dc9d4c81c64834e5e509281f7f16">apr_brigade_flush</a> void const char *&nbsp;</td><td class="memItemRight" valign="bottom"><b>str</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g19a56d6f9dcf813c74420f84a3d1c062"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::nbyte" ref="g19a56d6f9dcf813c74420f84a3d1c062" args="" -->
+<a class="el" href="group___a_p_r___util___bucket___brigades.html#gcdf6dc9d4c81c64834e5e509281f7f16">apr_brigade_flush</a> void const <br class="typebreak">
+char apr_size_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>nbyte</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gcd9a2244dc969d5afe5e330f69ae311b"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::fmt" ref="gcd9a2244dc969d5afe5e330f69ae311b" args="" -->
+<a class="el" href="group___a_p_r___util___bucket___brigades.html#gcdf6dc9d4c81c64834e5e509281f7f16">apr_brigade_flush</a> void <br class="typebreak">
+<a class="el" href="group___a_p_r___util___bucket___brigades.html#gcdf6dc9d4c81c64834e5e509281f7f16">apr_brigade_flush</a> void const <br class="typebreak">
+char *&nbsp;</td><td class="memItemRight" valign="bottom"><b>fmt</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g08c56f8ee324f070de0f31b0bf87de72"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::f" ref="g08c56f8ee324f070de0f31b0bf87de72" args="" -->
+<a class="el" href="group__apr__file__io.html#ga46e4763ac375ea3c7a43ba6f6099e22">apr_file_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>f</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd36094f99c09d68b2c88576461dfdc6b"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::start" ref="gd36094f99c09d68b2c88576461dfdc6b" args="" -->
+<a class="el" href="group__apr__file__io.html#ga46e4763ac375ea3c7a43ba6f6099e22">apr_file_t</a> apr_off_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>start</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5cd91701e5c167f2b1a38e70ab57817e"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::p" ref="g5cd91701e5c167f2b1a38e70ab57817e" args="" -->
+<a class="el" href="group__apr__file__io.html#ga46e4763ac375ea3c7a43ba6f6099e22">apr_file_t</a> apr_off_t apr_off_t <br class="typebreak">
+<a class="el" href="group__apr__pools.html#gf137f28edcf9a086cd6bc36c20d7cdfb">apr_pool_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>p</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">APU_DECLARE_DATA const <br class="typebreak">
+<a class="el" href="structapr__bucket__type__t.html">apr_bucket_type_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g5e315ec48f1dc4b06877fc63518248c9">apr_bucket_type_flush</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">APU_DECLARE_DATA const <br class="typebreak">
+<a class="el" href="structapr__bucket__type__t.html">apr_bucket_type_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g21b10f799879619e86369add3dd2848b">apr_bucket_type_eos</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">APU_DECLARE_DATA const <br class="typebreak">
+<a class="el" href="structapr__bucket__type__t.html">apr_bucket_type_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#gaeb5cd89cf6ba890f329bbd656d2824d">apr_bucket_type_file</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">APU_DECLARE_DATA const <br class="typebreak">
+<a class="el" href="structapr__bucket__type__t.html">apr_bucket_type_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#ge48a3b98a024d04fd3d11d7b05a3014b">apr_bucket_type_heap</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">APU_DECLARE_DATA const <br class="typebreak">
+<a class="el" href="structapr__bucket__type__t.html">apr_bucket_type_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g0e92cccf3ba14bb5cafcb91e1f27879d">apr_bucket_type_mmap</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">APU_DECLARE_DATA const <br class="typebreak">
+<a class="el" href="structapr__bucket__type__t.html">apr_bucket_type_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#ga18a611f4fdb03f35ebc29fbfda55d2f">apr_bucket_type_pool</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">APU_DECLARE_DATA const <br class="typebreak">
+<a class="el" href="structapr__bucket__type__t.html">apr_bucket_type_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g010d5dcb116755a68090d573584cd256">apr_bucket_type_pipe</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">APU_DECLARE_DATA const <br class="typebreak">
+<a class="el" href="structapr__bucket__type__t.html">apr_bucket_type_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#gc254c94d966f069f8942a04ec89f54ae">apr_bucket_type_immortal</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">APU_DECLARE_DATA const <br class="typebreak">
+<a class="el" href="structapr__bucket__type__t.html">apr_bucket_type_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g0445b8ae0f59c8348b2b34dae23531f3">apr_bucket_type_transient</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">APU_DECLARE_DATA const <br class="typebreak">
+<a class="el" href="structapr__bucket__type__t.html">apr_bucket_type_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___bucket___brigades.html#g107a7f0eeb8834deae36c2a3acb6ddd0">apr_bucket_type_socket</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7fa09c5c80a7d25b74511944f5949e31"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::b" ref="g7fa09c5c80a7d25b74511944f5949e31" args="" -->
+<a class="el" href="structapr__bucket.html">apr_bucket</a> **&nbsp;</td><td class="memItemRight" valign="bottom"><b>b</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb2ec5c8d7a31b8b2ac2b21bffe000242"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::data" ref="gb2ec5c8d7a31b8b2ac2b21bffe000242" args="" -->
+void *&nbsp;</td><td class="memItemRight" valign="bottom"><b>data</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g17bc47ccf1b618ed082a4ff4f2cc7f7e"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::buf" ref="g17bc47ccf1b618ed082a4ff4f2cc7f7e" args="" -->
+const char *&nbsp;</td><td class="memItemRight" valign="bottom"><b>buf</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga7bea6df1fe699a0c42d676c252b211c"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::free_func" ref="ga7bea6df1fe699a0c42d676c252b211c" args=")(void *data)" -->
+apr_size_t void(*&nbsp;</td><td class="memItemRight" valign="bottom"><b>free_func</b> )(void *data)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g12d9bfb21f432268bf941e8ba2d823a4"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::mm" ref="g12d9bfb21f432268bf941e8ba2d823a4" args="" -->
+<a class="el" href="structapr__mmap__t.html">apr_mmap_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>mm</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g631505071f80c4cbf2dd302e706b0552"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::thissock" ref="g631505071f80c4cbf2dd302e706b0552" args="" -->
+<a class="el" href="group__apr__network__io.html#g49262b223e7434746e1f1737659aa2c3">apr_socket_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>thissock</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gcaa691aff7fb9da8a60b463c0487140c"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::thispipe" ref="gcaa691aff7fb9da8a60b463c0487140c" args="" -->
+<a class="el" href="group__apr__file__io.html#ga46e4763ac375ea3c7a43ba6f6099e22">apr_file_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>thispipe</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g0feae9f93d4bc5dca392194c513e0921"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::offset" ref="g0feae9f93d4bc5dca392194c513e0921" args="" -->
+apr_off_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>offset</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ge38fbe4f355ac2094e78a8762aa51d02"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::fd" ref="ge38fbe4f355ac2094e78a8762aa51d02" args="" -->
+<a class="el" href="group__apr__file__io.html#ga46e4763ac375ea3c7a43ba6f6099e22">apr_file_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>fd</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g03e6cca0c879c0443efb431c30c14f76"></a><!-- doxytag: member="APR_Util_Bucket_Brigades::enabled" ref="g03e6cca0c879c0443efb431c30c14f76" args="" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><b>enabled</b></td></tr>
+
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="ge1dfe8bf117d10e7dc5b8e0c08f0ebb2"></a><!-- doxytag: member="apr_buckets.h::APR_BRIGADE_CHECK_CONSISTENCY" ref="ge1dfe8bf117d10e7dc5b8e0c08f0ebb2" args="(b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BRIGADE_CHECK_CONSISTENCY          </td>
+          <td>(</td>
+          <td class="paramtype">b&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+checks the ring pointers in a bucket brigade for consistency. an abort() will be triggered if any inconsistencies are found. note: this is a no-op unless APR_BUCKET_DEBUG is defined. <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>b</em>&nbsp;</td><td>The brigade </td></tr>
+  </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g7cecbc89be912ce9ab24c889eb8f955b"></a><!-- doxytag: member="apr_buckets.h::APR_BRIGADE_CONCAT" ref="g7cecbc89be912ce9ab24c889eb8f955b" args="(a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BRIGADE_CONCAT          </td>
+          <td>(</td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> {                                    \
+        <a class="code" href="group__apr__ring.html#g34ee7a0d6daa61117006bb74498ff5aa">APR_RING_CONCAT</a>(&amp;(a)-&gt;list, &amp;(b)-&gt;list, <a class="code" href="structapr__bucket.html">apr_bucket</a>, link);      \
+        <a class="code" href="group___a_p_r___util___bucket___brigades.html#ge1dfe8bf117d10e7dc5b8e0c08f0ebb2">APR_BRIGADE_CHECK_CONSISTENCY</a>((a));                             \
+    } <span class="keywordflow">while</span> (0)
+</pre></div>Concatenate brigade b onto the end of brigade a, leaving brigade b empty <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>a</em>&nbsp;</td><td>The first brigade </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>b</em>&nbsp;</td><td>The second brigade </td></tr>
+  </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g836f61da6cce15074eff257ce4b6fc0f"></a><!-- doxytag: member="apr_buckets.h::APR_BRIGADE_EMPTY" ref="g836f61da6cce15074eff257ce4b6fc0f" args="(b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BRIGADE_EMPTY          </td>
+          <td>(</td>
+          <td class="paramtype">b&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;APR_RING_EMPTY(&amp;(b)-&gt;list, <a class="el" href="structapr__bucket.html">apr_bucket</a>, link)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Determine if the bucket brigade is empty <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>b</em>&nbsp;</td><td>The brigade to check </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>true or false </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="gb5826a11eb6ba90786a94282f806c230"></a><!-- doxytag: member="apr_buckets.h::APR_BRIGADE_FIRST" ref="gb5826a11eb6ba90786a94282f806c230" args="(b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BRIGADE_FIRST          </td>
+          <td>(</td>
+          <td class="paramtype">b&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;APR_RING_FIRST(&amp;(b)-&gt;list)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Return the first bucket in a brigade <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>b</em>&nbsp;</td><td>The brigade to query </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The first bucket in the brigade </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g6dc39d8757e18941a6fb069b0c18fbd3"></a><!-- doxytag: member="apr_buckets.h::APR_BRIGADE_INSERT_HEAD" ref="g6dc39d8757e18941a6fb069b0c18fbd3" args="(b, e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BRIGADE_INSERT_HEAD          </td>
+          <td>(</td>
+          <td class="paramtype">b,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> {                            \
+        <a class="code" href="structapr__bucket.html">apr_bucket</a> *ap__b = (e);                                        \
+        <a class="code" href="group__apr__ring.html#gd59352546dc9253c0057ad43cf728a63">APR_RING_INSERT_HEAD</a>(&amp;(b)-&gt;list, ap__b, <a class="code" href="structapr__bucket.html">apr_bucket</a>, link);      \
+        <a class="code" href="group___a_p_r___util___bucket___brigades.html#ge1dfe8bf117d10e7dc5b8e0c08f0ebb2">APR_BRIGADE_CHECK_CONSISTENCY</a>((b));                             \
+    } <span class="keywordflow">while</span> (0)
+</pre></div>Insert a list of buckets at the front of a brigade <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>b</em>&nbsp;</td><td>The brigade to add to </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The first bucket in a list of buckets to insert </td></tr>
+  </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g5447595f8374296c5ffe208db39b2f5d"></a><!-- doxytag: member="apr_buckets.h::APR_BRIGADE_INSERT_TAIL" ref="g5447595f8374296c5ffe208db39b2f5d" args="(b, e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BRIGADE_INSERT_TAIL          </td>
+          <td>(</td>
+          <td class="paramtype">b,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> {                            \
+        <a class="code" href="structapr__bucket.html">apr_bucket</a> *ap__b = (e);                                        \
+        <a class="code" href="group__apr__ring.html#g235311035184125d72ce0689c9949a3e">APR_RING_INSERT_TAIL</a>(&amp;(b)-&gt;list, ap__b, <a class="code" href="structapr__bucket.html">apr_bucket</a>, link);      \
+        <a class="code" href="group___a_p_r___util___bucket___brigades.html#ge1dfe8bf117d10e7dc5b8e0c08f0ebb2">APR_BRIGADE_CHECK_CONSISTENCY</a>((b));                             \
+    } <span class="keywordflow">while</span> (0)
+</pre></div>Insert a list of buckets at the end of a brigade <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>b</em>&nbsp;</td><td>The brigade to add to </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The first bucket in a list of buckets to insert </td></tr>
+  </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g40e0ef2a904aa519ca9d63288dee0b4d"></a><!-- doxytag: member="apr_buckets.h::APR_BRIGADE_LAST" ref="g40e0ef2a904aa519ca9d63288dee0b4d" args="(b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BRIGADE_LAST          </td>
+          <td>(</td>
+          <td class="paramtype">b&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;APR_RING_LAST(&amp;(b)-&gt;list)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Return the last bucket in a brigade <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>b</em>&nbsp;</td><td>The brigade to query </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The last bucket in the brigade </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g52ba212f76507a79ccae213875150ad1"></a><!-- doxytag: member="apr_buckets.h::APR_BRIGADE_PREPEND" ref="g52ba212f76507a79ccae213875150ad1" args="(a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BRIGADE_PREPEND          </td>
+          <td>(</td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> {                                    \
+        <a class="code" href="group__apr__ring.html#g4d5aaa9b6f02f96f98f234a0a428474d">APR_RING_PREPEND</a>(&amp;(a)-&gt;list, &amp;(b)-&gt;list, <a class="code" href="structapr__bucket.html">apr_bucket</a>, link);     \
+        <a class="code" href="group___a_p_r___util___bucket___brigades.html#ge1dfe8bf117d10e7dc5b8e0c08f0ebb2">APR_BRIGADE_CHECK_CONSISTENCY</a>((a));                             \
+    } <span class="keywordflow">while</span> (0)
+</pre></div>Prepend brigade b onto the beginning of brigade a, leaving brigade b empty <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>a</em>&nbsp;</td><td>The first brigade </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>b</em>&nbsp;</td><td>The second brigade </td></tr>
+  </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g858da66dccab1e063415678bb115788a"></a><!-- doxytag: member="apr_buckets.h::APR_BRIGADE_SENTINEL" ref="g858da66dccab1e063415678bb115788a" args="(b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BRIGADE_SENTINEL          </td>
+          <td>(</td>
+          <td class="paramtype">b&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;APR_RING_SENTINEL(&amp;(b)-&gt;list, <a class="el" href="structapr__bucket.html">apr_bucket</a>, link)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Wrappers around the RING macros to reduce the verbosity of the code that handles bucket brigades. The magic pointer value that indicates the head of the brigade <dl class="remark" compact><dt><b>Remarks:</b></dt><dd>This is used to find the beginning and end of the brigade, eg: <pre>
+      while (e != <a class="el" href="group___a_p_r___util___bucket___brigades.html#g858da66dccab1e063415678bb115788a">APR_BRIGADE_SENTINEL(b)</a>) {
+          ...
+          e = <a class="el" href="group___a_p_r___util___bucket___brigades.html#g7171f690b203d548a5b6ae0b079068d8">APR_BUCKET_NEXT(e)</a>;
+      }
+ </pre> </dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>b</em>&nbsp;</td><td>The brigade </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The magic pointer value </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="ge3ccf4c383c9e7fea28354cc8e029626"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_ALLOC_SIZE" ref="ge3ccf4c383c9e7fea28354cc8e029626" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_ALLOC_SIZE&nbsp;&nbsp;&nbsp;APR_ALIGN_DEFAULT(2*sizeof(<a class="el" href="unionapr__bucket__structs.html">apr_bucket_structs</a>))          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The amount that apr_bucket_alloc() should allocate in the common case. Note: this is twice as big as <a class="el" href="unionapr__bucket__structs.html">apr_bucket_structs</a> to allow breathing room for third-party bucket types. 
+</div>
+</div><p>
+<a class="anchor" name="g82bf404af30875135c65e2c13ad035e5"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_BUFF_SIZE" ref="g82bf404af30875135c65e2c13ad035e5" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_BUFF_SIZE&nbsp;&nbsp;&nbsp;8000          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+default bucket buffer size - 8KB minus room for memory allocator headers 
+</div>
+</div><p>
+<a class="anchor" name="gedaeb3fbe71aac408377471b8a54dc08"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_CHECK_CONSISTENCY" ref="gedaeb3fbe71aac408377471b8a54dc08" args="(e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_CHECK_CONSISTENCY          </td>
+          <td>(</td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+checks the brigade a bucket is in for ring consistency. an abort() will be triggered if any inconsistencies are found. note: this is a no-op unless APR_BUCKET_DEBUG is defined. <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket </td></tr>
+  </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="gb33cc08b7f064d06397f312e427279c3"></a><!-- doxytag: member="apr_buckets.h::apr_bucket_copy" ref="gb33cc08b7f064d06397f312e427279c3" args="(e, c)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define apr_bucket_copy          </td>
+          <td>(</td>
+          <td class="paramtype">e,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">c&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;(e)-&gt;type-&gt;copy(e, c)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Copy a bucket. <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket to copy </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>c</em>&nbsp;</td><td>Returns a pointer to the new bucket </td></tr>
+  </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g8925c02a7f95e8c1c3986294d4678797"></a><!-- doxytag: member="apr_buckets.h::apr_bucket_delete" ref="g8925c02a7f95e8c1c3986294d4678797" args="(e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define apr_bucket_delete          </td>
+          <td>(</td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> {                                    \
+        <a class="code" href="group___a_p_r___util___bucket___brigades.html#g2c46a1b717a87b68bd98b425e0c64977">APR_BUCKET_REMOVE</a>(e);                                           \
+        <a class="code" href="group___a_p_r___util___bucket___brigades.html#gfc0dae1e90a798284ed777a0c9e90ec6">apr_bucket_destroy</a>(e);                                          \
+    } <span class="keywordflow">while</span> (0)
+</pre></div>Delete a bucket by removing it from its brigade (if any) and then destroying it. <dl class="remark" compact><dt><b>Remarks:</b></dt><dd>This mainly acts as an aid in avoiding code verbosity. It is the preferred exact equivalent to: <pre>
+      <a class="el" href="group___a_p_r___util___bucket___brigades.html#g2c46a1b717a87b68bd98b425e0c64977">APR_BUCKET_REMOVE(e)</a>;
+      <a class="el" href="group___a_p_r___util___bucket___brigades.html#gfc0dae1e90a798284ed777a0c9e90ec6">apr_bucket_destroy(e)</a>;
+ </pre> </dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket to delete </td></tr>
+  </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="gfc0dae1e90a798284ed777a0c9e90ec6"></a><!-- doxytag: member="apr_buckets.h::apr_bucket_destroy" ref="gfc0dae1e90a798284ed777a0c9e90ec6" args="(e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define apr_bucket_destroy          </td>
+          <td>(</td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> {                                    \
+        (e)-&gt;type-&gt;destroy((e)-&gt;data);                                  \
+        (e)-&gt;free(e);                                                   \
+    } <span class="keywordflow">while</span> (0)
+</pre></div>Free the resources used by a bucket. If multiple buckets refer to the same resource it is freed when the last one goes away. <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group___a_p_r___util___bucket___brigades.html#g8925c02a7f95e8c1c3986294d4678797">apr_bucket_delete()</a> </dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket to destroy </td></tr>
+  </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g00c2e104125f124c3a52627863432de9"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_INIT" ref="g00c2e104125f124c3a52627863432de9" args="(e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_INIT          </td>
+          <td>(</td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;APR_RING_ELEM_INIT((e), link)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Initialize a new bucket's prev/next pointers <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket to initialize </td></tr>
+  </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g1f8114b7316d1fef1deb95abc8f02341"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_INSERT_AFTER" ref="g1f8114b7316d1fef1deb95abc8f02341" args="(a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_INSERT_AFTER          </td>
+          <td>(</td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> {                            \
+        <a class="code" href="structapr__bucket.html">apr_bucket</a> *ap__a = (a), *ap__b = (b);                          \
+        <a class="code" href="group__apr__ring.html#g40453637d00c853f3a212a30c1f2cb41">APR_RING_INSERT_AFTER</a>(ap__a, ap__b, link);                      \
+        <a class="code" href="group___a_p_r___util___bucket___brigades.html#gedaeb3fbe71aac408377471b8a54dc08">APR_BUCKET_CHECK_CONSISTENCY</a>(ap__a);                            \
+    } <span class="keywordflow">while</span> (0)
+</pre></div>Insert a list of buckets after a specified bucket <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>a</em>&nbsp;</td><td>The bucket to insert after </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>b</em>&nbsp;</td><td>The buckets to insert </td></tr>
+  </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="ge012adeccda754eabc42b7855bec081e"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_INSERT_BEFORE" ref="ge012adeccda754eabc42b7855bec081e" args="(a, b)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_INSERT_BEFORE          </td>
+          <td>(</td>
+          <td class="paramtype">a,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">b&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> {                            \
+        <a class="code" href="structapr__bucket.html">apr_bucket</a> *ap__a = (a), *ap__b = (b);                          \
+        <a class="code" href="group__apr__ring.html#g76f9a04f932b3377073fa4e30d745564">APR_RING_INSERT_BEFORE</a>(ap__a, ap__b, link);                     \
+        <a class="code" href="group___a_p_r___util___bucket___brigades.html#gedaeb3fbe71aac408377471b8a54dc08">APR_BUCKET_CHECK_CONSISTENCY</a>(ap__a);                            \
+    } <span class="keywordflow">while</span> (0)
+</pre></div>Insert a list of buckets before a specified bucket <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>a</em>&nbsp;</td><td>The bucket to insert before </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>b</em>&nbsp;</td><td>The buckets to insert </td></tr>
+  </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g89b225e1c08473766eec719b985ca0d6"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_IS_EOS" ref="g89b225e1c08473766eec719b985ca0d6" args="(e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_IS_EOS          </td>
+          <td>(</td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#g21b10f799879619e86369add3dd2848b">apr_bucket_type_eos</a>)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Determine if a bucket is an EOS bucket <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket to inspect </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>true or false </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g1d54037bb6953c73d5c61f64c311d470"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_IS_FILE" ref="g1d54037bb6953c73d5c61f64c311d470" args="(e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_IS_FILE          </td>
+          <td>(</td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#gaeb5cd89cf6ba890f329bbd656d2824d">apr_bucket_type_file</a>)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Determine if a bucket is a FILE bucket <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket to inspect </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>true or false </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g24105da0bb755a775c4b2a519d7c25f9"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_IS_FLUSH" ref="g24105da0bb755a775c4b2a519d7c25f9" args="(e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_IS_FLUSH          </td>
+          <td>(</td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#g5e315ec48f1dc4b06877fc63518248c9">apr_bucket_type_flush</a>)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Determine if a bucket is a FLUSH bucket <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket to inspect </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>true or false </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g3dee4fbd5b4e16e5188a6cfec40b6961"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_IS_HEAP" ref="g3dee4fbd5b4e16e5188a6cfec40b6961" args="(e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_IS_HEAP          </td>
+          <td>(</td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#ge48a3b98a024d04fd3d11d7b05a3014b">apr_bucket_type_heap</a>)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Determine if a bucket is a HEAP bucket <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket to inspect </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>true or false </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g53f1188c168acf7dcfabfa1ac5a08655"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_IS_IMMORTAL" ref="g53f1188c168acf7dcfabfa1ac5a08655" args="(e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_IS_IMMORTAL          </td>
+          <td>(</td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#gc254c94d966f069f8942a04ec89f54ae">apr_bucket_type_immortal</a>)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Determine if a bucket is a IMMORTAL bucket <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket to inspect </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>true or false </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g506cb29cc1ec1abeb487e01b122bd4d9"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_IS_METADATA" ref="g506cb29cc1ec1abeb487e01b122bd4d9" args="(e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_IS_METADATA          </td>
+          <td>(</td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;((e)-&gt;type-&gt;is_metadata)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Determine if a bucket contains metadata. An empty bucket is safe to arbitrarily remove if and only if this is false. <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket to inspect </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>true or false </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g1693d49aeb0287e3b171c922c6b633d2"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_IS_MMAP" ref="g1693d49aeb0287e3b171c922c6b633d2" args="(e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_IS_MMAP          </td>
+          <td>(</td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#g0e92cccf3ba14bb5cafcb91e1f27879d">apr_bucket_type_mmap</a>)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Determine if a bucket is a MMAP bucket <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket to inspect </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>true or false </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g03e62d86c994d1d1cc9be3eb8b8f6ac6"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_IS_PIPE" ref="g03e62d86c994d1d1cc9be3eb8b8f6ac6" args="(e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_IS_PIPE          </td>
+          <td>(</td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#g010d5dcb116755a68090d573584cd256">apr_bucket_type_pipe</a>)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Determine if a bucket is a PIPE bucket <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket to inspect </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>true or false </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="gdbe80a9016da6a06ab414ba61d6625d0"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_IS_POOL" ref="gdbe80a9016da6a06ab414ba61d6625d0" args="(e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_IS_POOL          </td>
+          <td>(</td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#ga18a611f4fdb03f35ebc29fbfda55d2f">apr_bucket_type_pool</a>)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Determine if a bucket is a POOL bucket <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket to inspect </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>true or false </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g4b8315b498e4eb67efde1c83bdbe8b87"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_IS_SOCKET" ref="g4b8315b498e4eb67efde1c83bdbe8b87" args="(e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_IS_SOCKET          </td>
+          <td>(</td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#g107a7f0eeb8834deae36c2a3acb6ddd0">apr_bucket_type_socket</a>)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Determine if a bucket is a SOCKET bucket <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket to inspect </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>true or false </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g1a7e7ac5fddbab4ce189e8d3007446ff"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_IS_TRANSIENT" ref="g1a7e7ac5fddbab4ce189e8d3007446ff" args="(e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_IS_TRANSIENT          </td>
+          <td>(</td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;((e)-&gt;type == &amp;<a class="el" href="group___a_p_r___util___bucket___brigades.html#g0445b8ae0f59c8348b2b34dae23531f3">apr_bucket_type_transient</a>)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Determine if a bucket is a TRANSIENT bucket <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket to inspect </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>true or false </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g7171f690b203d548a5b6ae0b079068d8"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_NEXT" ref="g7171f690b203d548a5b6ae0b079068d8" args="(e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_NEXT          </td>
+          <td>(</td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;APR_RING_NEXT((e), link)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get the next bucket in the list <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The current bucket </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The next bucket </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="gf229fecd4174efd4d6a9774e3048ae28"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_PREV" ref="gf229fecd4174efd4d6a9774e3048ae28" args="(e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_PREV          </td>
+          <td>(</td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;APR_RING_PREV((e), link)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get the previous bucket in the list <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The current bucket </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The previous bucket </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="ge44ae938c6c60e148430fdb098dcf28f"></a><!-- doxytag: member="apr_buckets.h::apr_bucket_read" ref="ge44ae938c6c60e148430fdb098dcf28f" args="(e, str, len, block)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define apr_bucket_read          </td>
+          <td>(</td>
+          <td class="paramtype">e,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">str,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">len,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">block&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;(e)-&gt;type-&gt;read(e, str, len, block)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Read some data from the bucket.<p>
+The apr_bucket_read function returns a convenient amount of data from the bucket provided, writing the address and length of the data to the pointers provided by the caller. The function tries as hard as possible to avoid a memory copy.<p>
+Buckets are expected to be a member of a brigade at the time they are read.<p>
+In typical application code, buckets are read in a loop, and after each bucket is read and processed, it is moved or deleted from the brigade and the next bucket read.<p>
+The definition of "convenient" depends on the type of bucket that is being read, and is decided by APR. In the case of memory based buckets such as heap and immortal buckets, a pointer will be returned to the location of the buffer containing the complete contents of the bucket.<p>
+Some buckets, such as the socket bucket, might have no concept of length. If an attempt is made to read such a bucket, the apr_bucket_read function will read a convenient amount of data from the socket. The socket bucket is magically morphed into a heap bucket containing the just-read data, and a new socket bucket is inserted just after this heap bucket.<p>
+To understand why apr_bucket_read might do this, consider the loop described above to read and process buckets. The current bucket is magically morphed into a heap bucket and returned to the caller. The caller processes the data, and deletes the heap bucket, moving onto the next bucket, the new socket bucket. This process repeats, giving the illusion of a bucket brigade that contains potentially infinite amounts of data. It is up to the caller to decide at what point to stop reading buckets.<p>
+Some buckets, such as the file bucket, might have a fixed size, but be significantly larger than is practical to store in RAM in one go. As with the socket bucket, if an attempt is made to read from a file bucket, the file bucket is magically morphed into a heap bucket containing a convenient amount of data read from the current offset in the file. During the read, the offset will be moved forward on the file, and a new file bucket will be inserted directly after the current bucket representing the remainder of the file. If the heap bucket was large enough to store the whole remainder of the file, no more file buckets are inserted, and the file bucket will disappear completely.<p>
+The pattern for reading buckets described above does create the illusion that the code is willing to swallow buckets that might be too large for the system to handle in one go. This however is just an illusion: APR will always ensure that large (file) or infinite (socket) buckets are broken into convenient bite sized heap buckets before data is returned to the caller.<p>
+There is a potential gotcha to watch for: if buckets are read in a loop, and aren't deleted after being processed, the potentially large bucket will slowly be converted into RAM resident heap buckets. If the file is larger than available RAM, an out of memory condition could be caused if the application is not careful to manage this.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket to read from </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>str</em>&nbsp;</td><td>The location to store a pointer to the data in </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>len</em>&nbsp;</td><td>The location to store the amount of data read </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>block</em>&nbsp;</td><td>Whether the read function blocks </td></tr>
+  </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g2c46a1b717a87b68bd98b425e0c64977"></a><!-- doxytag: member="apr_buckets.h::APR_BUCKET_REMOVE" ref="g2c46a1b717a87b68bd98b425e0c64977" args="(e)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APR_BUCKET_REMOVE          </td>
+          <td>(</td>
+          <td class="paramtype">e&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;APR_RING_REMOVE((e), link)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Remove a bucket from its bucket brigade <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket to remove </td></tr>
+  </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="gb00941ffd472982693eb415a964de7af"></a><!-- doxytag: member="apr_buckets.h::apr_bucket_setaside" ref="gb00941ffd472982693eb415a964de7af" args="(e, p)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define apr_bucket_setaside          </td>
+          <td>(</td>
+          <td class="paramtype">e,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">p&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;(e)-&gt;type-&gt;setaside(e,p)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Setaside data so that stack data is not destroyed on returning from the function <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket to setaside </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>p</em>&nbsp;</td><td>The pool to setaside into </td></tr>
+  </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g5bb8827a8dd1baa6ac32682e13e9d8c2"></a><!-- doxytag: member="apr_buckets.h::apr_bucket_split" ref="g5bb8827a8dd1baa6ac32682e13e9d8c2" args="(e, point)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define apr_bucket_split          </td>
+          <td>(</td>
+          <td class="paramtype">e,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">point&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td>&nbsp;&nbsp;&nbsp;(e)-&gt;type-&gt;split(e, point)</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Split one bucket in two at the point provided.<p>
+Once split, the original bucket becomes the first of the two new buckets.<p>
+(It is assumed that the bucket is a member of a brigade when this function is called). <dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The bucket to split </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>point</em>&nbsp;</td><td>The offset to split the bucket at </td></tr>
+  </table>
+</dl>
+
+</div>
+</div><p>
+<hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="gcdf6dc9d4c81c64834e5e509281f7f16"></a><!-- doxytag: member="apr_buckets.h::apr_brigade_flush" ref="gcdf6dc9d4c81c64834e5e509281f7f16" args=")(apr_bucket_brigade *bb, void *ctx)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef <a class="el" href="group__apr__errno.html#gf76ee4543247e9fb3f3546203e590a6c">apr_status_t</a>(* <a class="el" href="group___a_p_r___util___bucket___brigades.html#gcdf6dc9d4c81c64834e5e509281f7f16">apr_brigade_flush</a>)(<a class="el" href="structapr__bucket__brigade.html">apr_bucket_brigade</a> *bb, void *ctx)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Function called when a brigade should be flushed 
+</div>
+</div><p>
+<a class="anchor" name="ga17a456120961b1c5af0525f4900a457"></a><!-- doxytag: member="apr_buckets.h::apr_bucket" ref="ga17a456120961b1c5af0525f4900a457" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structapr__bucket.html">apr_bucket</a> <a class="el" href="structapr__bucket.html">apr_bucket</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="structapr__bucket.html">apr_bucket</a> </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g9a30babfeb6e290db124d8f9b69e49e4"></a><!-- doxytag: member="apr_buckets.h::apr_bucket_alloc_t" ref="g9a30babfeb6e290db124d8f9b69e49e4" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="group___a_p_r___util___bucket___brigades.html#g9a30babfeb6e290db124d8f9b69e49e4">apr_bucket_alloc_t</a> <a class="el" href="group___a_p_r___util___bucket___brigades.html#g9a30babfeb6e290db124d8f9b69e49e4">apr_bucket_alloc_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group___a_p_r___util___bucket___brigades.html#g9a30babfeb6e290db124d8f9b69e49e4">apr_bucket_alloc_t</a> </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g9f50254e85c7aad79ca289a0ba069025"></a><!-- doxytag: member="apr_buckets.h::apr_bucket_brigade" ref="g9f50254e85c7aad79ca289a0ba069025" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>

[... 1535 lines stripped ...]


Mime
View raw message