Sophie

Sophie

distrib > Mandriva > current > i586 > media > main-updates > by-pkgid > 7c859c6f61469ed11e2ab179848b0178 > files > 166

libapr-util-devel-1.4.1-0.1mdv2010.2.i586.rpm

<!-- This comment will put IE 6, 7 and 8 in quirks mode -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>Apache Portable Runtime Utility Library: Hook Functions</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javaScript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body onload='searchBox.OnSelectItem(0);'>
<!-- Generated by Doxygen 1.6.3 -->
<script type="text/javascript"><!--
var searchBox = new SearchBox("searchBox", "search",false,'Search');
--></script>
<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>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <img id="MSearchSelect" src="search/search.png"
             onmouseover="return searchBox.OnSearchSelectShow()"
             onmouseout="return searchBox.OnSearchSelectHide()"
             alt=""/>
        <input type="text" id="MSearchField" value="Search" accesskey="S"
             onfocus="searchBox.OnSearchFieldFocus(true)" 
             onblur="searchBox.OnSearchFieldFocus(false)" 
             onkeyup="searchBox.OnSearchFieldChange(event)"/>
        <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
        </div>
      </li>
    </ul>
  </div>
</div>
<div class="contents">
<h1>Hook Functions<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 colspan="2"><h2>Modules</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__apr__hook__probes.html">Hook probe capability</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___o_p_t___h_o_o_k.html">Optional Hook Functions</a></td></tr>
<tr><td colspan="2"><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#ga832a6d3b73a43b3f7c58c5702ddccce9">APR_IMPLEMENT_HOOK_GET_PROTO</a>(ns, link, name)&nbsp;&nbsp;&nbsp;link##_DECLARE(apr_array_header_t *) ns##_hook_get_##name(void)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#ga69298243d3c4ffb4627fd3d04b522f44">APR_DECLARE_EXTERNAL_HOOK</a>(ns, link, ret, name, args)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#gaa936f5a0d1164d301aa157de6023fae5">APR_HOOK_STRUCT</a>(members)&nbsp;&nbsp;&nbsp;static struct { members } _hooks;</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#ga5699f73166bae88b6f6ac0bf7618b0f6">APR_HOOK_LINK</a>(name)&nbsp;&nbsp;&nbsp;apr_array_header_t *link_##name;</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#ga2500abadaa54b3a9d6ec25ff33a6b0cc">APR_IMPLEMENT_EXTERNAL_HOOK_BASE</a>(ns, link, name)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#ga2d11a43b6431ec568cc1647da4a2079c">APR_IMPLEMENT_EXTERNAL_HOOK_VOID</a>(ns, link, name, args_decl, args_use)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#gab466280bdabe0cc2ee5880cbb512fa3d">APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL</a>(ns, link, ret, name, args_decl, args_use, ok, decline)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#ga0420a2aa9ca6b3c1638bdb76025ecc57">APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST</a>(ns, link, ret, name, args_decl, args_use, decline)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#gab004dcbfff32997deb15040e48f07e92">APR_HOOK_REALLY_FIRST</a>&nbsp;&nbsp;&nbsp;(-10)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#ga564dea4803813674cb6b742f65a3d2b2">APR_HOOK_FIRST</a>&nbsp;&nbsp;&nbsp;0</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#gab9a5d50c3478c4d640deccec6b0ce879">APR_HOOK_MIDDLE</a>&nbsp;&nbsp;&nbsp;10</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#gaa610a95f03d7b4aee922c28b0919f028">APR_HOOK_LAST</a>&nbsp;&nbsp;&nbsp;20</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#gae3c7d2cf35e8c89828dfff7a85b0ed77">APR_HOOK_REALLY_LAST</a>&nbsp;&nbsp;&nbsp;30</td></tr>
<tr><td colspan="2"><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#ga04843fe00dc3c08c23130fef3ba1260c">apr_hook_sort_register</a> (const char *szHookName, apr_array_header_t **aHooks)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#ga1e0b6cf91dac5417c1b9cbd1b46b8991">apr_hook_sort_all</a> (void)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#ga1de31557683f53c2a07f73990962c585">apr_hook_debug_show</a> (const char *szName, const char *const *aszPre, const char *const *aszSucc)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#ga5d20451da75574c8433feb1bd5b2ce10">apr_hook_deregister_all</a> (void)</td></tr>
<tr><td colspan="2"><h2>Variables</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">apr_pool_t *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#ga8911bb699a5f03ad3c36d579ca0eca23">apr_hook_global_pool</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#ga59309caeb9b47d921727530494f264be">apr_hook_debug_enabled</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#ga37be3c217439ceddbda16054b020a658">apr_hook_debug_current</a></td></tr>
</table>
<hr/><h2>Define Documentation</h2>
<a class="anchor" id="ga69298243d3c4ffb4627fd3d04b522f44"></a><!-- doxytag: member="apr_hooks.h::APR_DECLARE_EXTERNAL_HOOK" ref="ga69298243d3c4ffb4627fd3d04b522f44" args="(ns, link, ret, name, args)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define APR_DECLARE_EXTERNAL_HOOK</td>
          <td>(</td>
          <td class="paramtype">ns, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">link, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ret, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">name, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">args&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">typedef</span> ret ns##_HOOK_##name##_t args; \
link##_DECLARE(<span class="keywordtype">void</span>) ns<span class="preprocessor">##_hook_##name(ns##_HOOK_##name##_t *pf, \</span>
<span class="preprocessor">                                      const char * const *aszPre, \</span>
<span class="preprocessor">                                      const char * const *aszSucc, int nOrder); \</span>
<span class="preprocessor">link##_DECLARE(ret) ns##_run_##name args; \</span>
<span class="preprocessor">APR_IMPLEMENT_HOOK_GET_PROTO(ns,link,name); \</span>
<span class="preprocessor">typedef struct ns##_LINK_##name##_t \</span>
<span class="preprocessor">    { \</span>
<span class="preprocessor">    ns##_HOOK_##name##_t *pFunc; \</span>
<span class="preprocessor">    const char *szName; \</span>
<span class="preprocessor">    const char * const *aszPredecessors; \</span>
<span class="preprocessor">    const char * const *aszSuccessors; \</span>
<span class="preprocessor">    int nOrder; \</span>
<span class="preprocessor">    } ns##_LINK_##name##_t;</span>
</pre></div><p>macro to declare the hook correctly </p>

</div>
</div>
<a class="anchor" id="ga564dea4803813674cb6b742f65a3d2b2"></a><!-- doxytag: member="apr_hooks.h::APR_HOOK_FIRST" ref="ga564dea4803813674cb6b742f65a3d2b2" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define APR_HOOK_FIRST&nbsp;&nbsp;&nbsp;0</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>run this hook first </p>

</div>
</div>
<a class="anchor" id="gaa610a95f03d7b4aee922c28b0919f028"></a><!-- doxytag: member="apr_hooks.h::APR_HOOK_LAST" ref="gaa610a95f03d7b4aee922c28b0919f028" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define APR_HOOK_LAST&nbsp;&nbsp;&nbsp;20</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>run this hook after every other hook which is defined </p>

</div>
</div>
<a class="anchor" id="ga5699f73166bae88b6f6ac0bf7618b0f6"></a><!-- doxytag: member="apr_hooks.h::APR_HOOK_LINK" ref="ga5699f73166bae88b6f6ac0bf7618b0f6" args="(name)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define APR_HOOK_LINK</td>
          <td>(</td>
          <td class="paramtype">name&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td>&nbsp;&nbsp;&nbsp;apr_array_header_t *link_##name;</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>macro to link the hook structure </p>

</div>
</div>
<a class="anchor" id="gab9a5d50c3478c4d640deccec6b0ce879"></a><!-- doxytag: member="apr_hooks.h::APR_HOOK_MIDDLE" ref="gab9a5d50c3478c4d640deccec6b0ce879" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define APR_HOOK_MIDDLE&nbsp;&nbsp;&nbsp;10</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>run this hook somewhere </p>

</div>
</div>
<a class="anchor" id="gab004dcbfff32997deb15040e48f07e92"></a><!-- doxytag: member="apr_hooks.h::APR_HOOK_REALLY_FIRST" ref="gab004dcbfff32997deb15040e48f07e92" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define APR_HOOK_REALLY_FIRST&nbsp;&nbsp;&nbsp;(-10)</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>run this hook first, before ANYTHING </p>

</div>
</div>
<a class="anchor" id="gae3c7d2cf35e8c89828dfff7a85b0ed77"></a><!-- doxytag: member="apr_hooks.h::APR_HOOK_REALLY_LAST" ref="gae3c7d2cf35e8c89828dfff7a85b0ed77" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define APR_HOOK_REALLY_LAST&nbsp;&nbsp;&nbsp;30</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>run this hook last, after EVERYTHING </p>

</div>
</div>
<a class="anchor" id="gaa936f5a0d1164d301aa157de6023fae5"></a><!-- doxytag: member="apr_hooks.h::APR_HOOK_STRUCT" ref="gaa936f5a0d1164d301aa157de6023fae5" args="(members)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define APR_HOOK_STRUCT</td>
          <td>(</td>
          <td class="paramtype">members&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td>&nbsp;&nbsp;&nbsp;static struct { members } _hooks;</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>macro to declare the hook structure </p>

</div>
</div>
<a class="anchor" id="ga2500abadaa54b3a9d6ec25ff33a6b0cc"></a><!-- doxytag: member="apr_hooks.h::APR_IMPLEMENT_EXTERNAL_HOOK_BASE" ref="ga2500abadaa54b3a9d6ec25ff33a6b0cc" args="(ns, link, name)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define APR_IMPLEMENT_EXTERNAL_HOOK_BASE</td>
          <td>(</td>
          <td class="paramtype">ns, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">link, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">name&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">link##_DECLARE(<span class="keywordtype">void</span>) ns<span class="preprocessor">##_hook_##name(ns##_HOOK_##name##_t *pf,const char * const *aszPre, \</span>
<span class="preprocessor">                                      const char * const *aszSucc,int nOrder) \</span>
<span class="preprocessor">    { \</span>
<span class="preprocessor">    ns##_LINK_##name##_t *pHook; \</span>
<span class="preprocessor">    if(!_hooks.link_##name) \</span>
<span class="preprocessor">        { \</span>
<span class="preprocessor">        _hooks.link_##name=apr_array_make(apr_hook_global_pool,1,sizeof(ns##_LINK_##name##_t)); \</span>
<span class="preprocessor">        apr_hook_sort_register(#name,&amp;_hooks.link_##name); \</span>
<span class="preprocessor">        } \</span>
<span class="preprocessor">    pHook=apr_array_push(_hooks.link_##name); \</span>
<span class="preprocessor">    pHook-&gt;pFunc=pf; \</span>
<span class="preprocessor">    pHook-&gt;aszPredecessors=aszPre; \</span>
<span class="preprocessor">    pHook-&gt;aszSuccessors=aszSucc; \</span>
<span class="preprocessor">    pHook-&gt;nOrder=nOrder; \</span>
<span class="preprocessor">    pHook-&gt;szName=apr_hook_debug_current; \</span>
<span class="preprocessor">    if(apr_hook_debug_enabled) \</span>
<span class="preprocessor">        apr_hook_debug_show(#name,aszPre,aszSucc); \</span>
<span class="preprocessor">    } \</span>
<span class="preprocessor">    APR_IMPLEMENT_HOOK_GET_PROTO(ns,link,name) \</span>
<span class="preprocessor">    { \</span>
<span class="preprocessor">        return _hooks.link_##name; \</span>
<span class="preprocessor">    }</span>
</pre></div><p>macro to implement the hook </p>

</div>
</div>
<a class="anchor" id="gab466280bdabe0cc2ee5880cbb512fa3d"></a><!-- doxytag: member="apr_hooks.h::APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL" ref="gab466280bdabe0cc2ee5880cbb512fa3d" args="(ns, link, ret, name, args_decl, args_use, ok, decline)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL</td>
          <td>(</td>
          <td class="paramtype">ns, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">link, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ret, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">name, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">args_decl, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">args_use, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ok, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">decline&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="group___a_p_r___util___hook.html#ga2500abadaa54b3a9d6ec25ff33a6b0cc">APR_IMPLEMENT_EXTERNAL_HOOK_BASE</a>(ns,link,name) \
link##_DECLARE(ret) ns<span class="preprocessor">##_run_##name args_decl \</span>
<span class="preprocessor">    { \</span>
<span class="preprocessor">    ns##_LINK_##name##_t *pHook; \</span>
<span class="preprocessor">    int n; \</span>
<span class="preprocessor">    ret rv = ok; \</span>
<span class="preprocessor">    APR_HOOK_INT_DCL_UD; \</span>
<span class="preprocessor">\</span>
<span class="preprocessor">    APR_HOOK_PROBE_ENTRY(ud, ns, name, args_use); \</span>
<span class="preprocessor">\</span>
<span class="preprocessor">    if(_hooks.link_##name) \</span>
<span class="preprocessor">        { \</span>
<span class="preprocessor">        pHook=(ns##_LINK_##name##_t *)_hooks.link_##name-&gt;elts; \</span>
<span class="preprocessor">        for(n=0 ; n &lt; _hooks.link_##name-&gt;nelts ; ++n) \</span>
<span class="preprocessor">            { \</span>
<span class="preprocessor">            APR_HOOK_PROBE_INVOKE(ud, ns, name, (char *)pHook[n].szName, args_use); \</span>
<span class="preprocessor">            rv=pHook[n].pFunc args_use; \</span>
<span class="preprocessor">            APR_HOOK_PROBE_COMPLETE(ud, ns, name, (char *)pHook[n].szName, rv, args_use); \</span>
<span class="preprocessor">            if(rv != ok &amp;&amp; rv != decline) \</span>
<span class="preprocessor">                break; \</span>
<span class="preprocessor">            rv = ok; \</span>
<span class="preprocessor">            } \</span>
<span class="preprocessor">        } \</span>
<span class="preprocessor">\</span>
<span class="preprocessor">    APR_HOOK_PROBE_RETURN(ud, ns, name, rv, args_use); \</span>
<span class="preprocessor">\</span>
<span class="preprocessor">    return rv; \</span>
<span class="preprocessor">    }</span>
</pre></div><p>Implement a hook that runs until one of the functions returns something other than OK or DECLINE </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>ns</em>&nbsp;</td><td>The namespace prefix of the hook functions </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>link</em>&nbsp;</td><td>The linkage declaration prefix of the hook </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ret</em>&nbsp;</td><td>Type to return </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>The name of the hook </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>args_decl</em>&nbsp;</td><td>The declaration of the arguments for the hook </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>args_use</em>&nbsp;</td><td>The names for the arguments for the hook </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ok</em>&nbsp;</td><td>Success value </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>decline</em>&nbsp;</td><td>Decline value </td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>Note:</b></dt><dd>The link prefix FOO corresponds to FOO_DECLARE() macros, which provide export linkage from the module that IMPLEMENTs the hook, and import linkage from external modules that link to the hook's module. </dd></dl>

</div>
</div>
<a class="anchor" id="ga0420a2aa9ca6b3c1638bdb76025ecc57"></a><!-- doxytag: member="apr_hooks.h::APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST" ref="ga0420a2aa9ca6b3c1638bdb76025ecc57" args="(ns, link, ret, name, args_decl, args_use, decline)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST</td>
          <td>(</td>
          <td class="paramtype">ns, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">link, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ret, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">name, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">args_decl, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">args_use, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">decline&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="group___a_p_r___util___hook.html#ga2500abadaa54b3a9d6ec25ff33a6b0cc">APR_IMPLEMENT_EXTERNAL_HOOK_BASE</a>(ns,link,name) \
link##_DECLARE(ret) ns<span class="preprocessor">##_run_##name args_decl \</span>
<span class="preprocessor">    { \</span>
<span class="preprocessor">    ns##_LINK_##name##_t *pHook; \</span>
<span class="preprocessor">    int n; \</span>
<span class="preprocessor">    ret rv = decline; \</span>
<span class="preprocessor">    APR_HOOK_INT_DCL_UD; \</span>
<span class="preprocessor">\</span>
<span class="preprocessor">    APR_HOOK_PROBE_ENTRY(ud, ns, name, args_use); \</span>
<span class="preprocessor">\</span>
<span class="preprocessor">    if(_hooks.link_##name) \</span>
<span class="preprocessor">        { \</span>
<span class="preprocessor">        pHook=(ns##_LINK_##name##_t *)_hooks.link_##name-&gt;elts; \</span>
<span class="preprocessor">        for(n=0 ; n &lt; _hooks.link_##name-&gt;nelts ; ++n) \</span>
<span class="preprocessor">            { \</span>
<span class="preprocessor">            APR_HOOK_PROBE_INVOKE(ud, ns, name, (char *)pHook[n].szName, args_use); \</span>
<span class="preprocessor">            rv=pHook[n].pFunc args_use; \</span>
<span class="preprocessor">            APR_HOOK_PROBE_COMPLETE(ud, ns, name, (char *)pHook[n].szName, rv, args_use); \</span>
<span class="preprocessor">\</span>
<span class="preprocessor">            if(rv != decline) \</span>
<span class="preprocessor">                break; \</span>
<span class="preprocessor">            } \</span>
<span class="preprocessor">        } \</span>
<span class="preprocessor">\</span>
<span class="preprocessor">    APR_HOOK_PROBE_RETURN(ud, ns, name, rv, args_use); \</span>
<span class="preprocessor">\</span>
<span class="preprocessor">    return rv; \</span>
<span class="preprocessor">    }</span>
</pre></div><p>Implement a hook that runs until the first function returns something other than the value of decline </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>ns</em>&nbsp;</td><td>The namespace prefix of the hook functions </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>link</em>&nbsp;</td><td>The linkage declaration prefix of the hook </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>The name of the hook </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ret</em>&nbsp;</td><td>Type to return </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>args_decl</em>&nbsp;</td><td>The declaration of the arguments for the hook </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>args_use</em>&nbsp;</td><td>The names for the arguments for the hook </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>decline</em>&nbsp;</td><td>Decline value </td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>Note:</b></dt><dd>The link prefix FOO corresponds to FOO_DECLARE() macros, which provide export linkage from the module that IMPLEMENTs the hook, and import linkage from external modules that link to the hook's module. </dd></dl>

</div>
</div>
<a class="anchor" id="ga2d11a43b6431ec568cc1647da4a2079c"></a><!-- doxytag: member="apr_hooks.h::APR_IMPLEMENT_EXTERNAL_HOOK_VOID" ref="ga2d11a43b6431ec568cc1647da4a2079c" args="(ns, link, name, args_decl, args_use)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define APR_IMPLEMENT_EXTERNAL_HOOK_VOID</td>
          <td>(</td>
          <td class="paramtype">ns, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">link, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">name, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">args_decl, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">args_use&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="group___a_p_r___util___hook.html#ga2500abadaa54b3a9d6ec25ff33a6b0cc">APR_IMPLEMENT_EXTERNAL_HOOK_BASE</a>(ns,link,name) \
link##_DECLARE(<span class="keywordtype">void</span>) ns<span class="preprocessor">##_run_##name args_decl \</span>
<span class="preprocessor">    { \</span>
<span class="preprocessor">    ns##_LINK_##name##_t *pHook; \</span>
<span class="preprocessor">    int n; \</span>
<span class="preprocessor">    APR_HOOK_INT_DCL_UD; \</span>
<span class="preprocessor">\</span>
<span class="preprocessor">    APR_HOOK_PROBE_ENTRY(ud, ns, name, args_use); \</span>
<span class="preprocessor">\</span>
<span class="preprocessor">    if(_hooks.link_##name) \</span>
<span class="preprocessor">        { \</span>
<span class="preprocessor">        pHook=(ns##_LINK_##name##_t *)_hooks.link_##name-&gt;elts; \</span>
<span class="preprocessor">        for(n=0 ; n &lt; _hooks.link_##name-&gt;nelts ; ++n) \</span>
<span class="preprocessor">            { \</span>
<span class="preprocessor">            APR_HOOK_PROBE_INVOKE(ud, ns, name, (char *)pHook[n].szName, args_use); \</span>
<span class="preprocessor">            pHook[n].pFunc args_use; \</span>
<span class="preprocessor">            APR_HOOK_PROBE_COMPLETE(ud, ns, name, (char *)pHook[n].szName, 0, args_use); \</span>
<span class="preprocessor">            } \</span>
<span class="preprocessor">        } \</span>
<span class="preprocessor">\</span>
<span class="preprocessor">    APR_HOOK_PROBE_RETURN(ud, ns, name, 0, args_use); \</span>
<span class="preprocessor">\</span>
<span class="preprocessor">    }</span>
</pre></div><p>Implement a hook that has no return code, and therefore runs all of the registered functions </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>ns</em>&nbsp;</td><td>The namespace prefix of the hook functions </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>link</em>&nbsp;</td><td>The linkage declaration prefix of the hook </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>The name of the hook </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>args_decl</em>&nbsp;</td><td>The declaration of the arguments for the hook </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>args_use</em>&nbsp;</td><td>The names for the arguments for the hook </td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>Note:</b></dt><dd>The link prefix FOO corresponds to FOO_DECLARE() macros, which provide export linkage from the module that IMPLEMENTs the hook, and import linkage from external modules that link to the hook's module. </dd></dl>

</div>
</div>
<a class="anchor" id="ga832a6d3b73a43b3f7c58c5702ddccce9"></a><!-- doxytag: member="apr_hooks.h::APR_IMPLEMENT_HOOK_GET_PROTO" ref="ga832a6d3b73a43b3f7c58c5702ddccce9" args="(ns, link, name)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define APR_IMPLEMENT_HOOK_GET_PROTO</td>
          <td>(</td>
          <td class="paramtype">ns, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">link, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">name&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td>&nbsp;&nbsp;&nbsp;link##_DECLARE(apr_array_header_t *) ns##_hook_get_##name(void)</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>macro to return the prototype of the hook function </p>

</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="ga1de31557683f53c2a07f73990962c585"></a><!-- doxytag: member="apr_hooks.h::apr_hook_debug_show" ref="ga1de31557683f53c2a07f73990962c585" args="(const char *szName, const char *const *aszPre, const char *const *aszSucc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void apr_hook_debug_show </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>szName</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *const *&nbsp;</td>
          <td class="paramname"> <em>aszPre</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *const *&nbsp;</td>
          <td class="paramname"> <em>aszSucc</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Print all of the information about the current hook. This is used for debugging purposes. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>szName</em>&nbsp;</td><td>The name of the hook </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>aszPre</em>&nbsp;</td><td>All of the functions in the predecessor array </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>aszSucc</em>&nbsp;</td><td>All of the functions in the successor array </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ga5d20451da75574c8433feb1bd5b2ce10"></a><!-- doxytag: member="apr_hooks.h::apr_hook_deregister_all" ref="ga5d20451da75574c8433feb1bd5b2ce10" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void apr_hook_deregister_all </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Remove all currently registered functions. </p>

</div>
</div>
<a class="anchor" id="ga1e0b6cf91dac5417c1b9cbd1b46b8991"></a><!-- doxytag: member="apr_hooks.h::apr_hook_sort_all" ref="ga1e0b6cf91dac5417c1b9cbd1b46b8991" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void apr_hook_sort_all </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Sort all of the registerd functions for a given hook </p>

</div>
</div>
<a class="anchor" id="ga04843fe00dc3c08c23130fef3ba1260c"></a><!-- doxytag: member="apr_hooks.h::apr_hook_sort_register" ref="ga04843fe00dc3c08c23130fef3ba1260c" args="(const char *szHookName, apr_array_header_t **aHooks)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void apr_hook_sort_register </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>szHookName</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">apr_array_header_t **&nbsp;</td>
          <td class="paramname"> <em>aHooks</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Register a hook function to be sorted </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>szHookName</em>&nbsp;</td><td>The name of the Hook the function is registered for </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>aHooks</em>&nbsp;</td><td>The array which stores all of the functions for this hook </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<hr/><h2>Variable Documentation</h2>
<a class="anchor" id="ga37be3c217439ceddbda16054b020a658"></a><!-- doxytag: member="apr_hooks.h::apr_hook_debug_current" ref="ga37be3c217439ceddbda16054b020a658" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const char* <a class="el" href="group___a_p_r___util___hook.html#ga37be3c217439ceddbda16054b020a658">apr_hook_debug_current</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>The name of the module that is currently registering a function </p>

</div>
</div>
<a class="anchor" id="ga59309caeb9b47d921727530494f264be"></a><!-- doxytag: member="apr_hooks.h::apr_hook_debug_enabled" ref="ga59309caeb9b47d921727530494f264be" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="group___a_p_r___util___hook.html#ga59309caeb9b47d921727530494f264be">apr_hook_debug_enabled</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>A global variable to determine if debugging information about the hooks functions should be printed </p>

</div>
</div>
<a class="anchor" id="ga8911bb699a5f03ad3c36d579ca0eca23"></a><!-- doxytag: member="apr_hooks.h::apr_hook_global_pool" ref="ga8911bb699a5f03ad3c36d579ca0eca23" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">apr_pool_t* <a class="el" href="group___a_p_r___util___hook.html#ga8911bb699a5f03ad3c36d579ca0eca23">apr_hook_global_pool</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>The global pool used to allocate any memory needed by the hooks. </p>

</div>
</div>
</div>
<!--- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&nbsp;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&nbsp;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&nbsp;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&nbsp;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&nbsp;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&nbsp;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&nbsp;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&nbsp;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&nbsp;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&nbsp;</span>Defines</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<hr class="footer"/><address style="text-align: right;"><small>Generated on Wed Feb 1 12:19:48 2012 for Apache Portable Runtime Utility Library by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.3 </small></address>
</body>
</html>