apr-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From r..@apache.org
Subject cvs commit: apr-site/docs/apr-util APR-UTIL_DBM_library.html Apache_XML_library.html Apache_hooks_functions.html Base64_Encoding.html Bucket_Brigades.html General.html Rings.html SHA1_library.html index.html master.html packages.html to-do.html
Date Mon, 09 Apr 2001 22:06:40 GMT
rbb         01/04/09 15:06:40

  Added:       docs/apr APR_File_handling.html
                        APR_I18N_translation_library.html
                        APR_MD5_Library.html APR_MMAP_library.html
                        APR_Network_library.html APR_Process_library.html
                        APR_Random_Functions.html APR_Table_library.html
                        APR_Thread_library.html APR_Time_library.html
                        APR_UUID_Handling.html APR_command_arguments.html
                        APR_general-purpose_library.html
                        APR_lock_library.html APR_portability_Routines.html
                        APR_signal_handling.html APR_strings_library.html
                        APR_user_id_services.html
                        Dynamic_Object_Handling.html Fnmatch_functions.html
                        General.html Hash_Tables.html
                        Shared_Memory_library.html canonical_filenames.html
                        index.html master.html packages.html to-do.html
               docs/apr-util APR-UTIL_DBM_library.html
                        Apache_XML_library.html Apache_hooks_functions.html
                        Base64_Encoding.html Bucket_Brigades.html
                        General.html Rings.html SHA1_library.html
                        index.html master.html packages.html to-do.html
  Log:
  Add updated docs for both APR and APR-util
  
  Revision  Changes    Path
  1.1                  apr-site/docs/apr/APR_File_handling.html
  
  Index: APR_File_handling.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- APR File handling</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: APR File handling</h2>
    <b>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="APR_File_handling.html#apr_finfo_t">struct apr_finfo_t</h3></a>
    <ul>
  <li><a href="APR_File_handling.html#apr_finfo_t-atime">atime</a>
  <li><a href="APR_File_handling.html#apr_finfo_t-cntxt">cntxt</a>
  <li><a href="APR_File_handling.html#apr_finfo_t-csize">csize</a>
  <li><a href="APR_File_handling.html#apr_finfo_t-ctime">ctime</a>
  <li><a href="APR_File_handling.html#apr_finfo_t-device">device</a>
  <li><a href="APR_File_handling.html#apr_finfo_t-filetype">filetype</a>
  <li><a href="APR_File_handling.html#apr_finfo_t-fname">fname</a>
  <li><a href="APR_File_handling.html#apr_finfo_t-group">group</a>
  <li><a href="APR_File_handling.html#apr_finfo_t-inode">inode</a>
  <li><a href="APR_File_handling.html#apr_finfo_t-mtime">mtime</a>
  <li><a href="APR_File_handling.html#apr_finfo_t-name">name</a>
  <li><a href="APR_File_handling.html#apr_finfo_t-nlink">nlink</a>
  <li><a href="APR_File_handling.html#apr_finfo_t-protection">protection</a>
  <li><a href="APR_File_handling.html#apr_finfo_t-size">size</a>
  <li><a href="APR_File_handling.html#apr_finfo_t-user">user</a>
  <li><a href="APR_File_handling.html#apr_finfo_t-valid">valid</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="APR_File_handling.html#apr_finfo_t-apr_file_t">struct apr_file_t</h3></a>
    <ul>
  </ul>
  
  </b>
  <hr size="4">
    <a name="apr_finfo_t"></a>
    <h1>struct apr_finfo_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_file_info.h</td></tr></tr>
  </table>
  <p>
  The file information structure.  This is analogous to the POSIX
  stat structure.<h2>Member Index</h2>
  <ul><li><a href="APR_File_handling.html#apr_finfo_t-atime">    apr_time_t atime</a>
  	<li><a href="APR_File_handling.html#apr_finfo_t-cntxt">    apr_pool_t *cntxt</a>
  	<li><a href="APR_File_handling.html#apr_finfo_t-csize">    apr_off_t csize</a>
  	<li><a href="APR_File_handling.html#apr_finfo_t-ctime">    apr_time_t ctime</a>
  	<li><a href="APR_File_handling.html#apr_finfo_t-device">    apr_dev_t device</a>
  	<li><a href="APR_File_handling.html#apr_finfo_t-filetype">    apr_filetype_e filetype</a>
  	<li><a href="APR_File_handling.html#apr_finfo_t-fname">    const char *fname</a>
  	<li><a href="APR_File_handling.html#apr_finfo_t-group">    apr_gid_t group</a>
  	<li><a href="APR_File_handling.html#apr_finfo_t-inode">    apr_ino_t inode</a>
  	<li><a href="APR_File_handling.html#apr_finfo_t-mtime">    apr_time_t mtime</a>
  	<li><a href="APR_File_handling.html#apr_finfo_t-name">    const char *name</a>
  	<li><a href="APR_File_handling.html#apr_finfo_t-nlink">    apr_int32_t nlink</a>
  	<li><a href="APR_File_handling.html#apr_finfo_t-protection">    apr_fileperms_t protection</a>
  	<li><a href="APR_File_handling.html#apr_finfo_t-size">    apr_off_t size</a>
  	<li><a href="APR_File_handling.html#apr_finfo_t-user">    apr_uid_t user</a>
  	<li><a href="APR_File_handling.html#apr_finfo_t-valid">    apr_int32_t valid</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="atime"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_time_t atime;</b>
  <dd>
  The time the file was last accessed
  <p><dl>
  </dl></dl>
  
    <a name="cntxt"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_pool_t *cntxt;</b>
  <dd>
  Allocates memory and closes lingering handles in the specified pool
  <p><dl>
  </dl></dl>
  
    <a name="csize"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_off_t csize;</b>
  <dd>
  The storage size consumed by the file
  <p><dl>
  </dl></dl>
  
    <a name="ctime"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_time_t ctime;</b>
  <dd>
  The time the file was last changed
  <p><dl>
  </dl></dl>
  
    <a name="device"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_dev_t device;</b>
  <dd>
  The id of the device the file is on.
  <p><dl>
  </dl></dl>
  
    <a name="filetype"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_filetype_e filetype;</b>
  <dd>
  The type of file.  One of APR_NOFILE, APR_REG, APR_DIR, APR_CHR, 
   APR_BLK, APR_PIPE, APR_LNK, APR_SOCK
  <p><dl>
  </dl></dl>
  
    <a name="fname"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    const char *fname;</b>
  <dd>
  The full pathname of the file
  <p><dl>
  </dl></dl>
  
    <a name="group"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_gid_t group;</b>
  <dd>
  The group id that owns the file
  <p><dl>
  </dl></dl>
  
    <a name="inode"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_ino_t inode;</b>
  <dd>
  The inode of the file.
  <p><dl>
  </dl></dl>
  
    <a name="mtime"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_time_t mtime;</b>
  <dd>
  The time the file was last modified
  <p><dl>
  </dl></dl>
  
    <a name="name"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    const char *name;</b>
  <dd>
  The file's name (no path) in filesystem case
  <p><dl>
  </dl></dl>
  
    <a name="nlink"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_int32_t nlink;</b>
  <dd>
  The number of hard links to the file.
  <p><dl>
  </dl></dl>
  
    <a name="protection"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_fileperms_t protection;</b>
  <dd>
  The access permissions of the file.  Mimics Unix access rights.
  <p><dl>
  </dl></dl>
  
    <a name="size"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_off_t size;</b>
  <dd>
  The size of the file
  <p><dl>
  </dl></dl>
  
    <a name="user"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_uid_t user;</b>
  <dd>
  The user id that owns the file
  <p><dl>
  </dl></dl>
  
    <a name="valid"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_int32_t valid;</b>
  <dd>
  The bitmask describing valid fields of this apr_finfo_t structure 
   including all available 'wanted' fields and potentially more
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="apr_finfo_t-apr_file_t"></a>
    <h1>struct apr_file_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_file_info.h</td></tr></tr>
  </table>
  <p>
  The file's handle, if accessed (can be submitted to apr_duphandle)<h2>Global Variables</h2>
    <blockquote>
  
    <a name="apr_dev_t"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_dev_t ;</b>
  <dd>
  Structure for determining the device the file is on.
  <p><dl>
  </dl></dl>
  
    <a name="apr_dir_t"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_dir_t ;</b>
  <dd>
  Structure for referencing directories.
  <p><dl>
  </dl></dl>
  
    <a name="apr_file_t"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_file_t ;</b>
  <dd>
  Structure for referencing files.
  <p><dl>
  </dl></dl>
  
    <a name="apr_fileperms_t"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_fileperms_t ;</b>
  <dd>
  Structure for determining file permissions.
  <p><dl>
  </dl></dl>
  
    <a name="apr_ino_t"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_ino_t ;</b>
  <dd>
  Structure for determining the inode of the file.
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name=""></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  <p><img src="../images//tip.gif"> This function is depreciated, it's equivilant to calling apr_stat with 
  the wanted flag value APR_FINFO_LINK
  <p><dl>
  </dl></dl>
  
  <a name="-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  <p><img src="../images//tip.gif"> on return, filepath now points to the character following the root.
  In the simplest example, given a filepath of "/foo", returns the rootpath
  of "/" and filepath points at "foo".  This is far more complex on other 
  platforms, which even changes alternate format of rootpath to canonical
  form.  The function returns APR_ERELATIVE if filepath isn't rooted (an
  error), APR_EINCOMPLETE if the root path is ambigious (but potentially
  legitimate, e.g. "/" on Windows is incomplete because it doesn't specify
  the drive letter), or APR_EBADPATH if the root is simply invalid.
  APR_SUCCESS is returned if filepath is an absolute path.
  <p><dl>
  </dl></dl>
  
  <a name="-3"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  <p><img src="../images//tip.gif"> If perm is APR_OS_DEFAULT and the file is being created, appropriate 
       default permissions will be used.  *arg1 must point to a valid file_t, 
       or NULL (in which case it will be allocated)
  <p><dl>
  </dl></dl>
  
  <a name="-4"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  <p><img src="../images//tip.gif"> If the file is open, it won't be removed until all instances are closed.
  <p><dl>
  </dl></dl>
  
  <a name="apr_pool_t"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_pool_t apr_file_pool_get(apr_file_t *f);</b>
    <dd>
  Get the pool used by the file.
  <p><dl>
  <dt><b>Return Value</b>
    <dd>apr_pool_t the pool<p></dl></dl>
  
  <a name="apr_status_t-10"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_dir_close(apr_dir_t *thedir);</b>
    <dd>
  close the specified directory.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thedir</th><td>the directory descriptor to close.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-11"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_dir_read(apr_finfo_t *finfo, apr_int32_t wanted, apr_dir_t *thedir);</b>
    <dd>
  Read the next entry from the specified directory. 
  <p><img src="../images//tip.gif"> All systems return . and .. as the first two files.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	finfo</th><td>the file info structure and filled in by apr_dir_read
  </td></tr>
  <tr valign=top><th align=right>
  	wanted</th><td>The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ values
  </td></tr>
  <tr valign=top><th align=right>
  	thedir</th><td>the directory descriptor returned from apr_dir_open</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-12"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_dir_rewind(apr_dir_t *thedir);</b>
    <dd>
  Rewind the directory to the first entry.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thedir</th><td>the directory descriptor to rewind.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-13"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_filepath_root(const char **rootpath, const char **inpath, apr_pool_t *p);</b>
    <dd>
  Extract the rootpath from the given filepath
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	rootpath</th><td>the root file path returned with APR_SUCCESS or APR_EINCOMPLETE
  </td></tr>
  <tr valign=top><th align=right>
  	filepath</th><td>the pathname to parse for it's root component
  </td></tr>
  <tr valign=top><th align=right>
  	p</th><td>the pool to allocate the new path string from</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-14"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_filepath_merge(char **newpath, const char *rootpath, const char *addpath, apr_int32_t flags, apr_pool_t *p);</b>
    <dd>
  Merge additional file path onto the previously processed rootpath
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	newpath</th><td>the merged paths returned
  </td></tr>
  <tr valign=top><th align=right>
  	rootpath</th><td>the root file path (NULL uses the current working path)
  </td></tr>
  <tr valign=top><th align=right>
  	addpath</th><td>the path to add to the root path
  </td></tr>
  <tr valign=top><th align=right>
  	flags</th><td>the desired APR_FILEPATH_ rules to apply when merging
  </td></tr>
  <tr valign=top><th align=right>
  	p</th><td>the pool to allocate the new path string from</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-15"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_filepath_get(char **path, apr_pool_t *p);</b>
    <dd>
  Return the default file path (for relative file names)
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	path</th><td>the default path string returned
  </td></tr>
  <tr valign=top><th align=right>
  	p</th><td>the pool to allocate the default path string from</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-16"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_filepath_get(char **defpath, apr_pool_t *p);</b>
    <dd>
  Set the default file path (for relative file names)
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	path</th><td>the default path returned
  </td></tr>
  <tr valign=top><th align=right>
  	p</th><td>the pool to allocate any working storage</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-17"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_open(apr_file_t **new_file, const char *fname, apr_int32_t flag, apr_fileperms_t perm, apr_pool_t *cont);</b>
    <dd>
  Open the specified file.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	new_file</th><td>The opened file descriptor.
  </td></tr>
  <tr valign=top><th align=right>
  	fname</th><td>The full path to the file (using / on all systems)
  </td></tr>
  <tr valign=top><th align=right>
  	flag</th><td>Or'ed value of:
  &lt;PRE&gt;
            APR_READ             open for reading
            APR_WRITE            open for writing
            APR_CREATE           create the file if not there
            APR_APPEND           file ptr is set to end prior to all writes
            APR_TRUNCATE         set length to zero if file exists
            APR_BINARY           not a text file (This flag is ignored on 
                                 UNIX because it has no meaning)
            APR_BUFFERED         buffer the data.  Default is non-buffered
            APR_EXCL             return error if APR_CREATE and file exists
            APR_DELONCLOSE       delete the file after closing.
  &lt;/PRE&gt;
  </td></tr>
  <tr valign=top><th align=right>
  	perm</th><td>Access permissions for file.
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to use.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-18"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_close(apr_file_t *file);</b>
    <dd>
  Close the specified file.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	file</th><td>The file descriptor to close.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-19"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_remove(const char *path, apr_pool_t *cont);</b>
    <dd>
  delete the specified file.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	path</th><td>The full path to the file (using / on all systems)
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to use.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-20"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_rename(const char *from_path, const char *to_path, apr_pool_t *pool);</b>
    <dd>
  rename the specified file.
  <p><img src="../images//tip.gif"> If a file exists at the new location, then it will be overwritten.  
       Moving files or directories across devices may not be possible.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	from_path</th><td>The full path to the original file (using / on all systems)
  </td></tr>
  <tr valign=top><th align=right>
  	to_path</th><td>The full path to the new file (using / on all systems)
  </td></tr>
  <tr valign=top><th align=right>
  	pool</th><td>The pool to use.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-21"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_eof(apr_file_t *fptr);</b>
    <dd>
  Are we at the end of the file
  <p><img src="../images//tip.gif"> Returns APR_EOF if we are at the end of file, APR_SUCCESS otherwise.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	fptr</th><td>The apr file we are testing.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-22"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_open_stderr(apr_file_t **thefile, apr_pool_t *cont);</b>
    <dd>
  open standard error as an apr file pointer.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thefile</th><td>The apr file to use as stderr.
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to allocate the file out of.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-23"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_open_stdout(apr_file_t **thefile, apr_pool_t *cont);</b>
    <dd>
  open standard output as an apr file pointer.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thefile</th><td>The apr file to use as stdout.
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to allocate the file out of.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-24"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_read(apr_file_t *thefile, void *buf, apr_size_t *nbytes);</b>
    <dd>
  Read data from the specified file.
  <p><img src="../images//tip.gif"> apr_file_read will read up to the specified number of bytes, but never 
       more.  If there isn't enough data to fill that number of bytes, all 
       of the available data is read.  The third argument is modified to 
       reflect the number of bytes read.  If a char was put back into the 
       stream via ungetc, it will be the first character returned. 
       It is possible for both bytes to be read and an APR_EOF or other 
       error to be returned.
       APR_EINTR is never returned.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thefile</th><td>The file descriptor to read from.
  </td></tr>
  <tr valign=top><th align=right>
  	buf</th><td>The buffer to store the data to.
  </td></tr>
  <tr valign=top><th align=right>
  	nbytes</th><td>On entry, the number of bytes to read; on exit, the number of bytes read.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-25"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_write(apr_file_t *thefile, const void *buf, apr_size_t *nbytes);</b>
    <dd>
  Write data to the specified file.
  <p><img src="../images//tip.gif"> apr_file_write will write up to the specified number of bytes, but never 
       more.  If the OS cannot write that many bytes, it will write as many 
       as it can.  The third argument is modified to reflect the * number 
       of bytes written. 
       It is possible for both bytes to be written and an error to be returned.
       APR_EINTR is never returned.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thefile</th><td>The file descriptor to write to.
  </td></tr>
  <tr valign=top><th align=right>
  	buf</th><td>The buffer which contains the data.
  </td></tr>
  <tr valign=top><th align=right>
  	nbytes</th><td>On entry, the number of bytes to write; on exit, the number 
                of bytes written.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-26"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_writev(apr_file_t *thefile, const struct iovec *vec, apr_size_t nvec, apr_size_t *nbytes);</b>
    <dd>
  Write data from iovec array to the specified file.
  <p><img src="../images//tip.gif"> It is possible for both bytes to be written and an error to be returned.
       APR_EINTR is never returned.
       apr_file_writev is available even if the underlying operating system 
       doesn't provide writev().
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thefile</th><td>The file descriptor to write to.
  </td></tr>
  <tr valign=top><th align=right>
  	vec</th><td>The array from which to get the data to write to the file.
  </td></tr>
  <tr valign=top><th align=right>
  	nvec</th><td>The number of elements in the struct iovec array. This must 
              be smaller than APR_MAX_IOVEC_SIZE.  If it isn't, the function 
              will fail with APR_EINVAL.
  </td></tr>
  <tr valign=top><th align=right>
  	nbytes</th><td>The number of bytes written.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-27"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_read_full(apr_file_t *thefile, void *buf, apr_size_t nbytes, apr_size_t *bytes_read);</b>
    <dd>
  Read data from the specified file, ensuring that the buffer is filled
  before returning.
  <p><img src="../images//tip.gif"> apr_file_read will read up to the specified number of bytes, but never 
       more.  If there isn't enough data to fill that number of bytes, 
       then the process/thread will block until it is available or EOF 
       is reached.  If a char was put back into the stream via ungetc, 
       it will be the first character returned. 
       It is possible for both bytes to be read and an APR_EOF or other 
       error to be returned.
       APR_EINTR is never returned.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thefile</th><td>The file descriptor to read from.
  </td></tr>
  <tr valign=top><th align=right>
  	buf</th><td>The buffer to store the data to.
  </td></tr>
  <tr valign=top><th align=right>
  	nbytes</th><td>The number of bytes to read.
  </td></tr>
  <tr valign=top><th align=right>
  	bytes_read</th><td>If non-NULL, this will contain the number of bytes read.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-28"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_write_full(apr_file_t *thefile, const void *buf, apr_size_t nbytes, apr_size_t *bytes_written);</b>
    <dd>
  Write data to the specified file, ensuring that all of the data is
  written before returning.
  <p><img src="../images//tip.gif"> apr_file_write will write up to the specified number of bytes, but never 
       more.  If the OS cannot write that many bytes, the process/thread 
       will block until they can be written. Exceptional error such as 
       "out of space" or "pipe closed" will terminate with an error.
       It is possible for both bytes to be written and an error to be returned.
       APR_EINTR is never returned.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thefile</th><td>The file descriptor to write to.
  </td></tr>
  <tr valign=top><th align=right>
  	buf</th><td>The buffer which contains the data.
  </td></tr>
  <tr valign=top><th align=right>
  	nbytes</th><td>The number of bytes to write.
  </td></tr>
  <tr valign=top><th align=right>
  	bytes_written</th><td>If non-NULL, this will contain the number of bytes written.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-29"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_putc(char ch, apr_file_t *thefile);</b>
    <dd>
  put a character into the specified file.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ch</th><td>The character to write.
  </td></tr>
  <tr valign=top><th align=right>
  	thefile</th><td>The file descriptor to write to</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-30"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_getc(char *ch, apr_file_t *thefile);</b>
    <dd>
  get a character from the specified file.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ch</th><td>The character to write.
  </td></tr>
  <tr valign=top><th align=right>
  	thefile</th><td>The file descriptor to write to</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-31"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_ungetc(char ch, apr_file_t *thefile);</b>
    <dd>
  put a character back onto a specified stream.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ch</th><td>The character to write.
  </td></tr>
  <tr valign=top><th align=right>
  	thefile</th><td>The file descriptor to write to</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-32"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_gets(char *str, int len, apr_file_t *thefile);</b>
    <dd>
  Get a string from a specified file.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	str</th><td>The buffer to store the string in.
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>The length of the string
  </td></tr>
  <tr valign=top><th align=right>
  	thefile</th><td>The file descriptor to read from</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-33"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_puts(const char *str, apr_file_t *thefile);</b>
    <dd>
  Put the string into a specified file.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	str</th><td>The string to write.
  </td></tr>
  <tr valign=top><th align=right>
  	thefile</th><td>The file descriptor to write to</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-34"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_flush(apr_file_t *thefile);</b>
    <dd>
  Flush the file's buffer.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thefile</th><td>The file descriptor to flush</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-35"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_dup(apr_file_t **new_file, apr_file_t *old_file, apr_pool_t *p);</b>
    <dd>
  duplicate the specified file descriptor.
  <p><img src="../images//tip.gif"> *arg1 must point to a valid apr_file_t, or point to NULL
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	new_file</th><td>The structure to duplicate into.
  </td></tr>
  <tr valign=top><th align=right>
  	old_file</th><td>The file to duplicate.
  </td></tr>
  <tr valign=top><th align=right>
  	p</th><td>The pool to use for the new file.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-36"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_seek(apr_file_t *thefile, apr_seek_where_t where, apr_off_t *offset);</b>
    <dd>
  Move the read/write file offset to a specified byte within a file.
  <p><img src="../images//tip.gif"> The third argument is modified to be the offset the pointer
            was actually moved to.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thefile</th><td>The file descriptor
  </td></tr>
  <tr valign=top><th align=right>
  	where</th><td>How to move the pointer, one of:
  &lt;PRE&gt;
             APR_SET  --  set the offset to offset
             APR_CUR  --  add the offset to the current position 
             APR_END  --  add the offset to the current file size 
  &lt;/PRE&gt;
  </td></tr>
  <tr valign=top><th align=right>
  	offset</th><td>The offset to move the pointer to.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-37"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_pipe_create(apr_file_t **in, apr_file_t **out, apr_pool_t *cont);</b>
    <dd>
  Create an anonymous pipe.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	in</th><td>The file descriptor to use as input to the pipe.
  </td></tr>
  <tr valign=top><th align=right>
  	out</th><td>The file descriptor to use as output from the pipe.
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to operate on.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-38"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_namedpipe_create(const char *filename, apr_fileperms_t perm, apr_pool_t *cont);</b>
    <dd>
  Create a named pipe.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	filename</th><td>The filename of the named pipe
  </td></tr>
  <tr valign=top><th align=right>
  	perm</th><td>The permissions for the newly created pipe.
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to operate on.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-39"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_pipe_timeout_get(apr_file_t *thepipe, apr_interval_time_t *timeout);</b>
    <dd>
  Get the timeout value for a pipe or manipulate the blocking state.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thepipe</th><td>The pipe we are getting a timeout for.
  </td></tr>
  <tr valign=top><th align=right>
  	timeout</th><td>The current timeout value in microseconds.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-40"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_pipe_timeout_set(apr_file_t *thepipe, apr_interval_time_t timeout);</b>
    <dd>
  Set the timeout value for a pipe or manipulate the blocking state.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thepipe</th><td>The pipe we are setting a timeout on.
  </td></tr>
  <tr valign=top><th align=right>
  	timeout</th><td>The timeout value in microseconds.  Values &lt; 0 mean wait 
         forever, 0 means do not wait at all.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-41"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_lock(apr_file_t *thefile, int type);</b>
    <dd>
  file (un)locking functions. Establish a lock on the specified, open file. The lock may be advisory
  or mandatory, at the discretion of the platform. The lock applies to
  the file as a whole, rather than a specific range. Locks are established
  on a per-thread/process basis; a second lock by the same thread will not
  block.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thefile</th><td>The file to lock.
  </td></tr>
  <tr valign=top><th align=right>
  	type</th><td>The type of lock to establish on the file.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-42"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_unlock(apr_file_t *thefile);</b>
    <dd>
  Remove any outstanding locks on the file.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thefile</th><td>The file to unlock.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-43"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_name_get(const char **new_path, apr_file_t *thefile);</b>
    <dd>
  return the file name of the current file.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	new_path</th><td>The path of the file.
  </td></tr>
  <tr valign=top><th align=right>
  	thefile</th><td>The currently open file.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-44"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_data_get(void **data, const char *key, apr_file_t *file);</b>
    <dd>
  Return the data associated with the current file.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The user data associated with the file.
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key to use for retreiving data associated with this file.
  </td></tr>
  <tr valign=top><th align=right>
  	file</th><td>The currently open file.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-45"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_data_set(apr_file_t *file, void *data, const char *key, apr_status_t (*cleanup)(void *));</b>
    <dd>
  Set the data associated with the current file.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	file</th><td>The currently open file.
  </td></tr>
  <tr valign=top><th align=right>
  	data</th><td>The user data to associate with the file.
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key to use for assocaiteing data with the file.
  </td></tr>
  <tr valign=top><th align=right>
  	cleanup</th><td>The cleanup routine to use when the file is destroyed.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-46"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_perms_set(const char *fname, apr_fileperms_t perms);</b>
    <dd>
  set the specified file's permission bits.
  <p><img src="../images//tip.gif"> Some platforms may not be able to apply all of the available 
       permission bits; APR_INCOMPLETE will be returned if some permissions 
       are specified which could not be set.
       Platforms which do not implement this feature will return APR_ENOTIMPL.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	fname</th><td>The file (name) to apply the permissions to.
  </td></tr>
  <tr valign=top><th align=right>
  	perms</th><td>The permission bits to apply to the file.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-47"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_dir_make(const char *path, apr_fileperms_t perm, apr_pool_t *cont);</b>
    <dd>
  Create a new directory on the file system.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	path</th><td>the path for the directory to be created.  (use / on all systems)
  </td></tr>
  <tr valign=top><th align=right>
  	perm</th><td>Permissions for the new direcoty.
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>the pool to use.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-48"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_dir_remove(const char *path, apr_pool_t *cont);</b>
    <dd>
  Remove directory from the file system.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	path</th><td>the path for the directory to be removed.  (use / on all systems)
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>the pool to use.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-49"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_file_info_get(apr_finfo_t *finfo, apr_int32_t wanted, apr_file_t *thefile);</b>
    <dd>
  get the specified file's stats.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	finfo</th><td>Where to store the information about the file.
  </td></tr>
  <tr valign=top><th align=right>
  	wanted</th><td>The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ values
  </td></tr>
  <tr valign=top><th align=right>
  	thefile</th><td>The file to get information about.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-7"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_stat(apr_finfo_t *finfo, const char *fname, apr_int32_t wanted, apr_pool_t *cont);</b>
    <dd>
  get the specified file's stats.  The file is specified by filename, 
  instead of using a pre-opened file.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	finfo</th><td>Where to store the information about the file, which is
  never touched if the call fails.
  </td></tr>
  <tr valign=top><th align=right>
  	fname</th><td>The name of the file to stat.
  </td></tr>
  <tr valign=top><th align=right>
  	wanted</th><td>The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ values
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>the pool to use to allocate the new file.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-8"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_lstat(apr_finfo_t *finfo, const char *fname, apr_int32_t wanted, apr_pool_t *cont);</b>
    <dd>
  get the specified file's stats.  The file is specified by filename, 
  instead of using a pre-opened file.  If the file is a symlink, this function
  will get the stats for the symlink not the file the symlink refers to.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	finfo</th><td>Where to store the information about the file, which is
  never touched if the call fails.
  </td></tr>
  <tr valign=top><th align=right>
  	fname</th><td>The name of the file to stat.
  </td></tr>
  <tr valign=top><th align=right>
  	wanted</th><td>The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ values
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>the pool to use to allocate the new file.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-9"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_dir_open(apr_dir_t **new_dir, const char *dirname, apr_pool_t *cont);</b>
    <dd>
  Open the specified directory.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	new_dir</th><td>The opened directory descriptor.
  </td></tr>
  <tr valign=top><th align=right>
  	dirname</th><td>The full path to the directory (use / on all systems)
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to use.</td></tr>
  </table>
    </dl></dl>
  
  <a name="int-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_file_printf(apr_file_t *fptr, const char *format, ...);</b>
    <dd>
  Write a string to a file using a printf format.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	fptr</th><td>The file to write to.
  </td></tr>
  <tr valign=top><th align=right>
  	format</th><td>The format string
  ... The values to substitute in the format string</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The number of bytes written<p></dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/APR_I18N_translation_library.html
  
  Index: APR_I18N_translation_library.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- APR I18N translation library</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: APR I18N translation library</h2>
    <b>
  
  </b>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="-45"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  <p><img src="../images//tip.gif">
  &lt;PRE&gt;
   Specify APR_DEFAULT_CHARSET for one of the charset
   names to indicate the charset of the source code at
   compile time.  This is useful if there are literal
   strings in the source code which must be translated
   according to the charset of the source code.
   APR_DEFAULT_CHARSET is not useful if the source code
   of the caller was not encoded in the same charset as
   APR at compile time.
   Specify APR_LOCALE_CHARSET for one of the charset
   names to indicate the charset of the current locale.
  &lt;/PRE&gt;
  <p><dl>
  </dl></dl>
  
  <a name="-46"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_int32_t);</b>
    <dd>
  <p><img src="../images//tip.gif"> This only works when converting between single-byte character sets.
       -1 will be returned if the conversion can't be performed.
  <p><dl>
  </dl></dl>
  
  <a name="apr_int32_t"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_int32_t apr_xlate_conv_byte(apr_xlate_t *convset, unsigned char inchar);</b>
    <dd>
  Convert a single-byte character from one charset to another.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	convset</th><td>The handle allocated by apr_xlate_open, specifying the 
                 parameters of conversion
  </td></tr>
  <tr valign=top><th align=right>
  	inchar</th><td>The single-byte character to convert.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-175"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_xlate_open(apr_xlate_t **convset, const char *topage, const char *frompage, apr_pool_t *pool);</b>
    <dd>
  Set up for converting text from one charset to another.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	convset</th><td>The handle to be filled in by this function
  </td></tr>
  <tr valign=top><th align=right>
  	topage</th><td>The name of the target charset
  </td></tr>
  <tr valign=top><th align=right>
  	frompage</th><td>The name of the source charset
  </td></tr>
  <tr valign=top><th align=right>
  	pool</th><td>The pool to use</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-176"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_xlate_get_sb(apr_xlate_t *convset, int *onoff);</b>
    <dd>
  Find out whether or not the specified conversion is single-byte-only.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	convset</th><td>The handle allocated by apr_xlate_open, specifying the 
                 parameters of conversion
  </td></tr>
  <tr valign=top><th align=right>
  	onoff</th><td>Output: whether or not the conversion is single-byte-only</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-177"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_xlate_conv_buffer(apr_xlate_t *convset, const char *inbuf, apr_size_t *inbytes_left, char *outbuf, apr_size_t *outbytes_left);</b>
    <dd>
  Convert a buffer of text from one codepage to another.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	convset</th><td>The handle allocated by apr_xlate_open, specifying 
                 the parameters of conversion
  </td></tr>
  <tr valign=top><th align=right>
  	inbuf</th><td>The address of the source buffer
  </td></tr>
  <tr valign=top><th align=right>
  	inbytes_left</th><td>Input: the amount of input data to be translated
                      Output: the amount of input data not yet translated
  </td></tr>
  <tr valign=top><th align=right>
  	outbuf</th><td>The address of the destination buffer
  </td></tr>
  <tr valign=top><th align=right>
  	outbytes_left</th><td>Input: the size of the output buffer
                       Output: the amount of the output buffer not yet used</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-178"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_xlate_conv_char(apr_xlate_t *convset, char inchar, char outchar);</b>
    <dd>
  The purpose of apr_xlate_conv_char is to translate one character
  at a time.  This needs to be written carefully so that it works
  with double-byte character sets.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	convset</th><td>The handle allocated by apr_xlate_open, specifying the
                 parameters of conversion
  </td></tr>
  <tr valign=top><th align=right>
  	inchar</th><td>The character to convert
  </td></tr>
  <tr valign=top><th align=right>
  	outchar</th><td>The converted character</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-179"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_xlate_close(apr_xlate_t *convset);</b>
    <dd>
  Close a codepage translation handle.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	convset</th><td>The codepage translation handle to close</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/APR_MD5_Library.html
  
  Index: APR_MD5_Library.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- APR MD5 Library</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: APR MD5 Library</h2>
    <b>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="APR_MD5_Library.html#apr_md5_ctx_t">struct apr_md5_ctx_t</h3></a>
    <ul>
  <li><a href="APR_MD5_Library.html#apr_md5_ctx_t-buffer">buffer[64]</a>
  <li><a href="APR_MD5_Library.html#apr_md5_ctx_t-count">count[2]</a>
  <li><a href="APR_MD5_Library.html#apr_md5_ctx_t-state">state[4]</a>
  <li><a href="APR_MD5_Library.html#apr_md5_ctx_t-xlate">xlate</a>
  </ul>
  
  </b>
  <hr size="4">
    <a name="apr_md5_ctx_t"></a>
    <h1>struct apr_md5_ctx_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_md5.h</td></tr></tr>
  </table>
  <p>
  MD5 context.<h2>Member Index</h2>
  <ul><li><a href="APR_MD5_Library.html#apr_md5_ctx_t-buffer">    unsigned char buffer[64]</a>
  	<li><a href="APR_MD5_Library.html#apr_md5_ctx_t-count">    UINT4 count[2]</a>
  	<li><a href="APR_MD5_Library.html#apr_md5_ctx_t-state">    UINT4 state[4]</a>
  	<li><a href="APR_MD5_Library.html#apr_md5_ctx_t-xlate">    apr_xlate_t *xlate</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="buffer"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    unsigned char buffer[64];</b>
  <dd>
  input buffer
  <p><dl>
  </dl></dl>
  
    <a name="count"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    UINT4 count[2];</b>
  <dd>
  number of bits, modulo 2^64 (lsb first)
  <p><dl>
  </dl></dl>
  
    <a name="state"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    UINT4 state[4];</b>
  <dd>
  state (ABCD)
  <p><dl>
  </dl></dl>
  
    <a name="xlate"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_xlate_t *xlate;</b>
  <dd>
  translation handle
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="apr_status_t-66"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_md5_init(apr_md5_ctx_t *context);</b>
    <dd>
  MD5 Initialize.  Begins an MD5 operation, writing a new context.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	context</th><td>The MD5 context to initialize.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-67"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_md5_set_xlate(apr_md5_ctx_t *context, apr_xlate_t *xlate);</b>
    <dd>
  MD5 translation setup.  Provides the APR translation handle to be used 
  for translating the content before calculating the digest.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	context</th><td>The MD5 content to set the translation for.
  </td></tr>
  <tr valign=top><th align=right>
  	xlate</th><td>The translation handle to use for this MD5 context</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-68"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_md5_update(apr_md5_ctx_t *context, const unsigned char *input, unsigned int inputLen);</b>
    <dd>
  MD5 block update operation.  Continue an MD5 message-digest operation, 
  processing another message block, and updating the context.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	context</th><td>The MD5 content to update.
  </td></tr>
  <tr valign=top><th align=right>
  	input</th><td>next message block to update
  </td></tr>
  <tr valign=top><th align=right>
  	inputLen</th><td>The length of the next message block</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-69"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_md5_final(unsigned char digest[MD5_DIGESTSIZE], apr_md5_ctx_t *context);</b>
    <dd>
  MD5 finalization.  Ends an MD5 message-digest operation, writing the 
  message digest and zeroing the context
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	digest</th><td>The final MD5 digest
  </td></tr>
  <tr valign=top><th align=right>
  	context</th><td>The MD5 content we are finalizing.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-70"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_md5_encode(const char *password, const char *salt, char *result, size_t nbytes);</b>
    <dd>
  Encode a password using an MD5 algorithm
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	password</th><td>The password to encode
  </td></tr>
  <tr valign=top><th align=right>
  	salt</th><td>The salt to use for the encoding
  </td></tr>
  <tr valign=top><th align=right>
  	result</th><td>The string to store the encoded password in
  </td></tr>
  <tr valign=top><th align=right>
  	nbytes</th><td>The length of the string</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/APR_MMAP_library.html
  
  Index: APR_MMAP_library.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- APR MMAP library</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: APR MMAP library</h2>
    <b>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="APR_MMAP_library.html#apr_mmap_t">struct apr_mmap_t</h3></a>
    <ul>
  <li><a href="APR_MMAP_library.html#apr_mmap_t-area">area</a>
  <li><a href="APR_MMAP_library.html#apr_mmap_t-cntxt">cntxt</a>
  <li><a href="APR_MMAP_library.html#apr_mmap_t-mhandle">mhandle</a>
  <li><a href="APR_MMAP_library.html#apr_mmap_t-mm">mm</a>
  <li><a href="APR_MMAP_library.html#apr_mmap_t-mv">mv</a>
  <li><a href="APR_MMAP_library.html#apr_mmap_t-pstart">pstart</a>
  <li><a href="APR_MMAP_library.html#apr_mmap_t-size">size</a>
  </ul>
  
  </b>
  <hr size="4">
    <a name="apr_mmap_t"></a>
    <h1>struct apr_mmap_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_mmap.h</td></tr></tr>
  </table>
  <p>
  The MMAP structure<h2>Member Index</h2>
  <ul><li><a href="APR_MMAP_library.html#apr_mmap_t-area">    area_id area</a>
  	<li><a href="APR_MMAP_library.html#apr_mmap_t-cntxt">    apr_pool_t *cntxt</a>
  	<li><a href="APR_MMAP_library.html#apr_mmap_t-mhandle">    HANDLE mhandle</a>
  	<li><a href="APR_MMAP_library.html#apr_mmap_t-mm">    void *mm</a>
  	<li><a href="APR_MMAP_library.html#apr_mmap_t-mv">    void *mv</a>
  	<li><a href="APR_MMAP_library.html#apr_mmap_t-pstart">    apr_off_t pstart</a>
  	<li><a href="APR_MMAP_library.html#apr_mmap_t-size">    apr_off_t size</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="area"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    area_id area;</b>
  <dd>
  An area ID.  Only valid on BeOS
  <p><dl>
  </dl></dl>
  
    <a name="cntxt"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_pool_t *cntxt;</b>
  <dd>
  The pool the mmap structure was allocated out of.
  <p><dl>
  </dl></dl>
  
    <a name="mhandle"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    HANDLE mhandle;</b>
  <dd>
  The handle of the file mapping
  <p><dl>
  </dl></dl>
  
    <a name="mm"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    void *mm;</b>
  <dd>
  The start of the memory mapped area
  <p><dl>
  </dl></dl>
  
    <a name="mv"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    void *mv;</b>
  <dd>
  The start of the real memory page area (mapped view)
  <p><dl>
  </dl></dl>
  
    <a name="pstart"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_off_t pstart;</b>
  <dd>
  The physical start, size and offset
  <p><dl>
  </dl></dl>
  
    <a name="size"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_off_t size;</b>
  <dd>
  The amount of data in the mmap
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="apr_status_t-71"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_mmap_create(apr_mmap_t **newmmap, apr_file_t *file, apr_off_t offset, apr_size_t size, apr_int32_t flag, apr_pool_t *cntxt);</b>
    <dd>
  Create a new mmap'ed file out of an existing APR file.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	newmmap</th><td>The newly created mmap'ed file.
  </td></tr>
  <tr valign=top><th align=right>
  	file</th><td>The file turn into an mmap.
  </td></tr>
  <tr valign=top><th align=right>
  	offset</th><td>The offset into the file to start the data pointer at.
  </td></tr>
  <tr valign=top><th align=right>
  	size</th><td>The size of the file
  </td></tr>
  <tr valign=top><th align=right>
  	flag</th><td>bit-wise or of:
  &lt;PRE&gt;
           APR_MMAP_READ       MMap opened for reading
           APR_MMAP_WRITE      MMap opened for writing
  &lt;/PRE&gt;
  </td></tr>
  <tr valign=top><th align=right>
  	cntxt</th><td>The pool to use when creating the mmap.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-72"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_mmap_delete(apr_mmap_t *mmap);</b>
    <dd>
  Remove a mmap'ed.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	mmap</th><td>The mmap'ed file.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-73"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_mmap_offset(void **addr, apr_mmap_t *mmap, apr_off_t offset);</b>
    <dd>
  Move the pointer into the mmap'ed file to the specified offset.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	addr</th><td>The pointer to the offset specified.
  </td></tr>
  <tr valign=top><th align=right>
  	mmap</th><td>The mmap'ed file.
  </td></tr>
  <tr valign=top><th align=right>
  	offset</th><td>The offset to move to.</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/APR_Network_library.html
  
  Index: APR_Network_library.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- APR Network library</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: APR Network library</h2>
    <b>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="APR_Network_library.html#apr_hdtr_t">struct apr_hdtr_t</h3></a>
    <ul>
  <li><a href="APR_Network_library.html#apr_hdtr_t-iovec">iovec</a>
  <li><a href="APR_Network_library.html#apr_hdtr_t-iovec-2">iovec</a>
  <li><a href="APR_Network_library.html#apr_hdtr_t-numheaders">numheaders</a>
  <li><a href="APR_Network_library.html#apr_hdtr_t-numtrailers">numtrailers</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="APR_Network_library.html#apr_ipsubnet_t">struct apr_ipsubnet_t</h3></a>
    <ul>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="APR_Network_library.html#apr_sockaddr_t">struct apr_sockaddr_t</h3></a>
    <ul>
  <li><a href="APR_Network_library.html#apr_sockaddr_t-addr_str_len">addr_str_len</a>
  <li><a href="APR_Network_library.html#apr_sockaddr_t-hostname">hostname</a>
  <li><a href="APR_Network_library.html#apr_sockaddr_t-ipaddr_len">ipaddr_len</a>
  <li><a href="APR_Network_library.html#apr_sockaddr_t-ipaddr_ptr">ipaddr_ptr</a>
  <li><a href="APR_Network_library.html#apr_sockaddr_t-next">next</a>
  <li><a href="APR_Network_library.html#apr_sockaddr_t-pool">pool</a>
  <li><a href="APR_Network_library.html#apr_sockaddr_t-port">port</a>
  <li><a href="APR_Network_library.html#apr_sockaddr_t-salen">salen</a>
  <li><a href="APR_Network_library.html#apr_sockaddr_t-servname">servname</a>
  </ul>
  
  </b>
  <hr size="4">
    <a name="apr_hdtr_t"></a>
    <h1>struct apr_hdtr_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_network_io.h</td></tr></tr>
  </table>
  <p>
  A structure to encapsulate headers and trailers for apr_sendfile<h2>Member Index</h2>
  <ul><li><a href="APR_Network_library.html#apr_hdtr_t-iovec">iovec *headers </a>
  	<li><a href="APR_Network_library.html#apr_hdtr_t-iovec-2">iovec *trailers </a>
  	<li><a href="APR_Network_library.html#apr_hdtr_t-numheaders">    int numheaders</a>
  	<li><a href="APR_Network_library.html#apr_hdtr_t-numtrailers">    int numtrailers</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="iovec"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>iovec *headers ;</b>
  <dd>
  An iovec to store the headers sent before the file.
  <p><dl>
  </dl></dl>
  
    <a name="iovec"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>iovec *trailers ;</b>
  <dd>
  An iovec to store the trailers sent before the file.
  <p><dl>
  </dl></dl>
  
    <a name="numheaders"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int numheaders;</b>
  <dd>
  number of headers in the iovec
  <p><dl>
  </dl></dl>
  
    <a name="numtrailers"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int numtrailers;</b>
  <dd>
  number of trailers in the iovec
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="apr_ipsubnet_t"></a>
    <h1>struct apr_ipsubnet_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_network_io.h</td></tr></tr>
  </table>
  <p>
  A structure to represent an IP subnet<hr size="4">
    <a name="apr_sockaddr_t"></a>
    <h1>struct apr_sockaddr_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_network_io.h</td></tr></tr>
  </table>
  <p>
  APRs socket address type, used to ensure protocol independence<h2>Member Index</h2>
  <ul><li><a href="APR_Network_library.html#apr_sockaddr_t-addr_str_len">    int addr_str_len</a>
  	<li><a href="APR_Network_library.html#apr_sockaddr_t-hostname">    char *hostname</a>
  	<li><a href="APR_Network_library.html#apr_sockaddr_t-ipaddr_len">    int ipaddr_len</a>
  	<li><a href="APR_Network_library.html#apr_sockaddr_t-ipaddr_ptr">    void *ipaddr_ptr</a>
  	<li><a href="APR_Network_library.html#apr_sockaddr_t-next">    apr_sockaddr_t *next</a>
  	<li><a href="APR_Network_library.html#apr_sockaddr_t-pool">    apr_pool_t *pool</a>
  	<li><a href="APR_Network_library.html#apr_sockaddr_t-port">    apr_port_t port</a>
  	<li><a href="APR_Network_library.html#apr_sockaddr_t-salen">    apr_socklen_t salen</a>
  	<li><a href="APR_Network_library.html#apr_sockaddr_t-servname">    char *servname</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="addr_str_len"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int addr_str_len;</b>
  <dd>
  How big should the address buffer be?  16 for v4 or 46 for v6
   used in inet_ntop...
  <p><dl>
  </dl></dl>
  
    <a name="hostname"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    char *hostname;</b>
  <dd>
  The hostname
  <p><dl>
  </dl></dl>
  
    <a name="ipaddr_len"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int ipaddr_len;</b>
  <dd>
  How big is the ip address structure we're using?
  <p><dl>
  </dl></dl>
  
    <a name="ipaddr_ptr"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    void *ipaddr_ptr;</b>
  <dd>
  This points to the IP address structure within the appropriate
   sockaddr structure.
  <p><dl>
  </dl></dl>
  
    <a name="next"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_sockaddr_t *next;</b>
  <dd>
  If multiple addresses were found by apr_sockaddr_info_get(), this 
   points to a representation of the next address.
  <p><dl>
  </dl></dl>
  
    <a name="pool"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_pool_t *pool;</b>
  <dd>
  The pool to use...
  <p><dl>
  </dl></dl>
  
    <a name="port"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_port_t port;</b>
  <dd>
  The numeric port
  <p><dl>
  </dl></dl>
  
    <a name="salen"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_socklen_t salen;</b>
  <dd>
  How big is the sockaddr we're using?
  <p><dl>
  </dl></dl>
  
    <a name="servname"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    char *servname;</b>
  <dd>
  Either a string of the port number or the service name for the port
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="-10"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	from</th><td>The apr_sockaddr_t to fill in the recipient info
  </td></tr>
  <tr valign=top><th align=right>
  	sock</th><td>The socket to use
  </td></tr>
  <tr valign=top><th align=right>
  	buf</th><td>The buffer to use
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>The length of the available buffer</td></tr>
  </table>
    </dl></dl>
  
  <a name="-11"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  <p><img src="../images//tip.gif"> This functions acts like a blocking write by default.  To change 
       this behavior, use apr_setsocketopt with the APR_SO_TIMEOUT option.
       The number of bytes actually sent is stored in argument 5.
  <p><dl>
  </dl></dl>
  
  <a name="-12"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  <p><img src="../images//tip.gif">
  &lt;PRE&gt;
  This functions acts like a blocking read by default.  To change 
  this behavior, use apr_setsocketopt with the APR_SO_TIMEOUT option.
  The number of bytes actually sent is stored in argument 3.
  It is possible for both bytes to be received and an APR_EOF or
  other error to be returned.
  APR_EINTR is never returned.
  &lt;/PRE&gt;
  <p><dl>
  </dl></dl>
  
  <a name="-13"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  <p><img src="../images//warning.gif" align=left> This is not available on all platforms.  Platforms that have the
       ability to poll files for data to be read/written/exceptions will
       have the APR_FILES_AS_SOCKETS macro defined as true.
  <p><dl>
  </dl></dl>
  
  <a name="-14"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  Build an ip-subnet representation from an IP address and optional netmask or
  number-of-bits.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ipsub</th><td>The new ip-subnet representation
  </td></tr>
  <tr valign=top><th align=right>
  	ipstr</th><td>The input IP address string
  </td></tr>
  <tr valign=top><th align=right>
  	mask_or_numbits</th><td>The input netmask or number-of-bits string, or NULL
  </td></tr>
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate from</td></tr>
  </table>
    </dl></dl>
  
  <a name="-15"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(int);</b>
    <dd>
  Test the IP address in an apr_sockaddr_t against a pre-built ip-subnet
  representation.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ipsub</th><td>The ip-subnet representation
  </td></tr>
  <tr valign=top><th align=right>
  	sa</th><td>The socket address to test</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>non-zero if the socket address is within the subnet, 0 otherwise<p></dl></dl>
  
  <a name="-6"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  <p><img src="../images//tip.gif"> This does not actually close the socket descriptor, it just
       controls which calls are still valid on the socket.
  <p><dl>
  </dl></dl>
  
  <a name="-7"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  <p><img src="../images//tip.gif">
  &lt;PRE&gt;
  This functions acts like a blocking write by default.  To change 
  this behavior, use apr_setsocketopt with the APR_SO_TIMEOUT option.
  It is possible for both bytes to be sent and an error to be returned.
  APR_EINTR is never returned.
  &lt;/PRE&gt;
  <p><dl>
  </dl></dl>
  
  <a name="-8"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  <p><img src="../images//tip.gif">
  &lt;PRE&gt;
  This functions acts like a blocking write by default.  To change 
  this behavior, use apr_setsocketopt with the APR_SO_TIMEOUT option.
  The number of bytes actually sent is stored in argument 3.
  It is possible for both bytes to be sent and an error to be returned.
  APR_EINTR is never returned.
  &lt;/PRE&gt;
  <p><dl>
  </dl></dl>
  
  <a name="-9"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	sock</th><td>The socket to send from
  </td></tr>
  <tr valign=top><th align=right>
  	where</th><td>The apr_sockaddr_t describing where to send the data
  </td></tr>
  <tr valign=top><th align=right>
  	data</th><td>The data to send
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>The length of the data to send</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_socket_accept_filter"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_socket_accept_filter(apr_socket_t *sock, char name[16], char args[256 - 16]);</b>
    <dd>
  Set an OS level accept filter.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	sock</th><td>The socket to put the accept filter on.
  </td></tr>
  <tr valign=top><th align=right>
  	name</th><td>The accept filter
  </td></tr>
  <tr valign=top><th align=right>
  	args</th><td>Any extra args to the accept filter.  Passing NULL here removes
              the accept filter.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-100"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_poll_socket_add(apr_pollfd_t *aprset, apr_socket_t *sock, apr_int16_t event);</b>
    <dd>
  Add a socket to the poll structure.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	aprset</th><td>The poll structure we will be using.
  </td></tr>
  <tr valign=top><th align=right>
  	socket</th><td>The socket to add to the current poll structure.
  </td></tr>
  <tr valign=top><th align=right>
  	event</th><td>The events to look for when we do the poll.  One of:
  &lt;PRE&gt;
             APR_POLLIN       signal if read will not block
             APR_POLLPRI      signal if prioirty data is availble to be read
             APR_POLLOUT      signal if write will not block
  &lt;/PRE&gt;</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-101"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_poll_socket_mask(apr_pollfd_t *aprset, apr_socket_t *sock, apr_int16_t events);</b>
    <dd>
  Modify a socket in the poll structure with mask.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	aprset</th><td>The poll structure we will be using.
  </td></tr>
  <tr valign=top><th align=right>
  	sock</th><td>The socket to modify in poll structure.
  </td></tr>
  <tr valign=top><th align=right>
  	events</th><td>The events to stop looking for during the poll.  One of:
  &lt;PRE&gt;
             APR_POLLIN       signal if read will not block
             APR_POLLPRI      signal if prioirty data is availble to be read
             APR_POLLOUT      signal if write will not block
  &lt;/PRE&gt;</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-102"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_poll_socket_remove(apr_pollfd_t *aprset, apr_socket_t *sock);</b>
    <dd>
  Remove a socket from the poll structure.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	aprset</th><td>The poll structure we will be using.
  </td></tr>
  <tr valign=top><th align=right>
  	sock</th><td>The socket to remove from the current poll structure.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-103"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_poll_socket_clear(apr_pollfd_t *aprset, apr_int16_t events);</b>
    <dd>
  Remove all sockets from the poll structure.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	aprset</th><td>The poll structure we will be using.
  </td></tr>
  <tr valign=top><th align=right>
  	events</th><td>The events to clear from all sockets.  One of:
  &lt;PRE&gt;
             APR_POLLIN       signal if read will not block
             APR_POLLPRI      signal if prioirty data is availble to be read
             APR_POLLOUT      signal if write will not block
  &lt;/PRE&gt;</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-104"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_poll_revents_get(apr_int16_t *event, apr_socket_t *sock, apr_pollfd_t *aprset);</b>
    <dd>
  Get the return events for the specified socket.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	event</th><td>The returned events for the socket.  One of:
  &lt;PRE&gt;
             APR_POLLIN       Data is available to be read 
             APR_POLLPRI      Prioirty data is availble to be read
             APR_POLLOUT      Write will succeed
             APR_POLLERR      An error occurred on the socket
             APR_POLLHUP      The connection has been terminated
             APR_POLLNVAL     This is an invalid socket to poll on.
                              Socket not open.
  &lt;/PRE&gt;
  </td></tr>
  <tr valign=top><th align=right>
  	sock</th><td>The socket we wish to get information about.
  </td></tr>
  <tr valign=top><th align=right>
  	aprset</th><td>The poll structure we will be using.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-105"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_poll_data_get(apr_pollfd_t *pollfd, const char *key, void *data);</b>
    <dd>
  Return the data associated with the current poll.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	pollfd</th><td>The currently open pollfd.
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key to use for retreiving data associated with a poll struct.
  </td></tr>
  <tr valign=top><th align=right>
  	data</th><td>The user data associated with the pollfd.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-106"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_poll_data_set(apr_pollfd_t *pollfd, void *data, const char *key, apr_status_t (*cleanup)(void *));</b>
    <dd>
  Set the data associated with the current poll.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	pollfd</th><td>The currently open pollfd.
  </td></tr>
  <tr valign=top><th align=right>
  	data</th><td>The key to associate with the data.
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The user data to associate with the pollfd.
  </td></tr>
  <tr valign=top><th align=right>
  	cleanup</th><td>The cleanup function</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-107"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_socket_from_file(apr_socket_t **newsock, apr_file_t *file);</b>
    <dd>
  Convert a File type to a socket so that it can be used in a poll operation.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	newsock</th><td>the newly created socket which represents a file.
  </td></tr>
  <tr valign=top><th align=right>
  	file</th><td>the file to mask as a socket.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-108"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_getservbyname(apr_sockaddr_t *sockaddr, const char *servname);</b>
    <dd>
  Given an apr_sockaddr_t and a service name, set the port for the service
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	sockaddr</th><td>The apr_sockaddr_t that will have it's port set
  </td></tr>
  <tr valign=top><th align=right>
  	servname</th><td>The name of the service you wish to use</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-74"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_socket_create(apr_socket_t **new_sock, int family, int type, apr_pool_t *cont);</b>
    <dd>
  Create a socket.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	new_sock</th><td>The new socket that has been set up.
  </td></tr>
  <tr valign=top><th align=right>
  	family</th><td>The address family of the socket (e.g., APR_INET).
  </td></tr>
  <tr valign=top><th align=right>
  	type</th><td>The type of the socket (e.g., SOCK_STREAM).
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to use</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-75"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_shutdown(apr_socket_t *thesocket, apr_shutdown_how_e how);</b>
    <dd>
  Shutdown either reading, writing, or both sides of a tcp socket.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thesocket</th><td>The socket to close
  </td></tr>
  <tr valign=top><th align=right>
  	how</th><td>How to shutdown the socket.  One of:
  &lt;PRE&gt;
             APR_SHUTDOWN_READ         no longer allow read requests
             APR_SHUTDOWN_WRITE        no longer allow write requests
             APR_SHUTDOWN_READWRITE    no longer allow read or write requests 
  &lt;/PRE&gt;</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-76"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_socket_close(apr_socket_t *thesocket);</b>
    <dd>
  Close a tcp socket.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thesocket</th><td>The socket to close</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-77"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_bind(apr_socket_t *sock, apr_sockaddr_t *sa);</b>
    <dd>
  Bind the socket to its associated port
  <p><img src="../images//tip.gif"> This may be where we will find out if there is any other process
       using the selected port.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	sock</th><td>The socket to bind
  </td></tr>
  <tr valign=top><th align=right>
  	sa</th><td>The socket address to bind to</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-78"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_listen(apr_socket_t *sock, apr_int32_t backlog);</b>
    <dd>
  Listen to a bound socket for connections.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	sock</th><td>The socket to listen on
  </td></tr>
  <tr valign=top><th align=right>
  	backlog</th><td>The number of outstanding connections allowed in the sockets
                 listen queue.  If this value is less than zero, the listen
                 queue size is set to zero.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-79"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_accept(apr_socket_t **new_sock, apr_socket_t *sock, apr_pool_t *connection_pool);</b>
    <dd>
  Accept a new connection request
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	new_sock</th><td>A copy of the socket that is connected to the socket that
                  made the connection request.  This is the socket which should
                  be used for all future communication.
  </td></tr>
  <tr valign=top><th align=right>
  	sock</th><td>The socket we are listening on.
  </td></tr>
  <tr valign=top><th align=right>
  	connection_pool</th><td>The pool for the new socket.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-80"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_connect(apr_socket_t *sock, apr_sockaddr_t *sa);</b>
    <dd>
  Issue a connection request to a socket either on the same machine 
  or a different one.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	sock</th><td>The socket we wish to use for our side of the connection
  </td></tr>
  <tr valign=top><th align=right>
  	sa</th><td>The address of the machine we wish to connect to.  If NULL,
            APR assumes that the sockaddr_in in the apr_socket is 
            completely filled out.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-81"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_sockaddr_info_get(apr_sockaddr_t **sa, const char *hostname, apr_int32_t family, apr_port_t port, apr_int32_t flags, apr_pool_t *p);</b>
    <dd>
  Create apr_sockaddr_t from hostname, address family, and port.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	sa</th><td>The new apr_sockaddr_t.
  </td></tr>
  <tr valign=top><th align=right>
  	hostname</th><td>The hostname or numeric address string to resolve/parse.
  </td></tr>
  <tr valign=top><th align=right>
  	family</th><td>The address family to use, or APR_UNSPEC if the system should 
                decide.
  </td></tr>
  <tr valign=top><th align=right>
  	port</th><td>The port number.
  </td></tr>
  <tr valign=top><th align=right>
  	flags</th><td>Special processing flags.
  </td></tr>
  <tr valign=top><th align=right>
  	p</th><td>The pool for the apr_sockaddr_t and associated storage.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-82"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_getnameinfo(char **hostname, apr_sockaddr_t *sa, apr_int32_t flags);</b>
    <dd>
  Look up the host name from an apr_sockaddr_t.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	hostname</th><td>The hostname.
  </td></tr>
  <tr valign=top><th align=right>
  	sa</th><td>The apr_sockaddr_t.
  </td></tr>
  <tr valign=top><th align=right>
  	flags</th><td>Special processing flags.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-83"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_parse_addr_port(char **addr, char **scope_id, apr_port_t *port, const char *str, apr_pool_t *p);</b>
    <dd>
  Parse hostname/IP address with scope id and port.
  Any of the following strings are accepted:
    8080                  (just the port number)
    www.apache.org        (just the hostname)
    www.apache.org:8080   (hostname and port number)
    [fe80::1]:80          (IPv6 numeric address string only)
    [fe80::1%eth0]        (IPv6 numeric address string and scope id)
  Invalid strings:
                          (empty string)
    [abc]                 (not valid IPv6 numeric address string)
    abc:65536             (invalid port number)
  <p><img src="../images//tip.gif"> If scope id shouldn't be allowed, check for scope_id != NULL in addition 
       to checking the return code.  If addr/hostname should be required, check 
       for addr == NULL in addition to checking the return code.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	addr</th><td>The new buffer containing just the hostname.  On output, *addr 
              will be NULL if no hostname/IP address was specfied.
  </td></tr>
  <tr valign=top><th align=right>
  	scope_id</th><td>The new buffer containing just the scope id.  On output, 
                  *scope_id will be NULL if no scope id was specified.
  </td></tr>
  <tr valign=top><th align=right>
  	port</th><td>The port number.  On output, *port will be 0 if no port was 
              specified.
  </td></tr>
  <tr valign=top><th align=right>
  	str</th><td>The input string to be parsed.
  </td></tr>
  <tr valign=top><th align=right>
  	p</th><td>The pool from which *addr and *scope_id are allocated.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-84"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_gethostname(char *buf, int len, apr_pool_t *cont);</b>
    <dd>
  Get name of the current machine
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	buf</th><td>A buffer to store the hostname in.
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>The maximum length of the hostname that can be stored in the
             buffer provided.
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to use.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-85"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_socket_data_get(void **data, const char *key, apr_socket_t *sock);</b>
    <dd>
  Return the data associated with the current socket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The user data associated with the socket.
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key to associate with the user data.
  </td></tr>
  <tr valign=top><th align=right>
  	sock</th><td>The currently open socket.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-86"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_socket_data_set(apr_socket_t *sock, void *data, const char *key, apr_status_t (*cleanup)(void*));</b>
    <dd>
  Set the data associated with the current socket.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	sock</th><td>The currently open socket.
  </td></tr>
  <tr valign=top><th align=right>
  	data</th><td>The user data to associate with the socket.
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key to associate with the data.
  </td></tr>
  <tr valign=top><th align=right>
  	cleanup</th><td>The cleanup to call when the socket is destroyed.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-87"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_send(apr_socket_t *sock, const char *buf, apr_size_t *len);</b>
    <dd>
  Send data over a network.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	sock</th><td>The socket to send the data over.
  </td></tr>
  <tr valign=top><th align=right>
  	buf</th><td>The buffer which contains the data to be sent.
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>On entry, the number of bytes to send; on exit, the number
             of bytes sent.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-88"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_sendv(apr_socket_t *sock, const struct iovec *vec, apr_int32_t nvec, apr_size_t *len);</b>
    <dd>
  Send multiple packets of data over a network.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	sock</th><td>The socket to send the data over.
  </td></tr>
  <tr valign=top><th align=right>
  	vec</th><td>The array of iovec structs containing the data to send
  </td></tr>
  <tr valign=top><th align=right>
  	nvec</th><td>The number of iovec structs in the array
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>Receives the number of bytes actually written</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-89"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_sendfile(apr_socket_t *sock, apr_file_t *file, apr_hdtr_t *hdtr, apr_off_t *offset, apr_size_t *len, apr_int32_t flags);</b>
    <dd>
  Send a file from an open file descriptor to a socket, along with 
  optional headers and trailers
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	sock</th><td>The socket to which we're writing
  </td></tr>
  <tr valign=top><th align=right>
  	file</th><td>The open file from which to read
  </td></tr>
  <tr valign=top><th align=right>
  	hdtr</th><td>A structure containing the headers and trailers to send
  </td></tr>
  <tr valign=top><th align=right>
  	offset</th><td>Offset into the file where we should begin writing
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>(input)  - Number of bytes to send from the file 
             (output) - Number of bytes actually sent, 
                        including headers, file, and trailers
  </td></tr>
  <tr valign=top><th align=right>
  	flags</th><td>APR flags that are mapped to OS specific flags</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-90"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_recv(apr_socket_t *sock, char *buf, apr_size_t *len);</b>
    <dd>
  Read data from a network.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	sock</th><td>The socket to read the data from.
  </td></tr>
  <tr valign=top><th align=right>
  	buf</th><td>The buffer to store the data in.
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>On entry, the number of bytes to receive; on exit, the number
             of bytes received.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-91"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_setsocketopt(apr_socket_t *sock, apr_int32_t opt, apr_int32_t on);</b>
    <dd>
  Setup socket options for the specified socket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	sock</th><td>The socket to set up.
  </td></tr>
  <tr valign=top><th align=right>
  	opt</th><td>The option we would like to configure.  One of:
  &lt;PRE&gt;
             APR_SO_DEBUG      --  turn on debugging information 
             APR_SO_KEEPALIVE  --  keep connections active
             APR_SO_LINGER     --  lingers on close if data is present
             APR_SO_NONBLOCK   --  Turns blocking on/off for socket
             APR_SO_REUSEADDR  --  The rules used in validating addresses
                                   supplied to bind should allow reuse
                                   of local addresses.
             APR_SO_TIMEOUT    --  Set the timeout value in microseconds.
                                   values &lt; 0 mean wait forever.  0 means
                                   don't wait at all.
             APR_SO_SNDBUF     --  Set the SendBufferSize
             APR_SO_RCVBUF     --  Set the ReceiveBufferSize
  &lt;/PRE&gt;
  </td></tr>
  <tr valign=top><th align=right>
  	on</th><td>Value for the option.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-92"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_getsocketopt(apr_socket_t *sock, apr_int32_t opt, apr_int32_t *on);</b>
    <dd>
  Query socket options for the specified socket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	sock</th><td>The socket to query
  </td></tr>
  <tr valign=top><th align=right>
  	opt</th><td>The option we would like to query.  One of:
  &lt;PRE&gt;
             APR_SO_DEBUG      --  turn on debugging information 
             APR_SO_KEEPALIVE  --  keep connections active
             APR_SO_LINGER     --  lingers on close if data is present
             APR_SO_NONBLOCK   --  Turns blocking on/off for socket
             APR_SO_REUSEADDR  --  The rules used in validating addresses
                                   supplied to bind should allow reuse
                                   of local addresses.
             APR_SO_TIMEOUT    --  Set the timeout value in microseconds.
                                   values &lt; 0 mean wait forever.  0 means
                                   don't wait at all.
             APR_SO_SNDBUF     --  Set the SendBufferSize
             APR_SO_RCVBUF     --  Set the ReceiveBufferSize
             APR_SO_DISCONNECTED -- Query the disconnected state of the socket.
                                   (Currently only used on Windows)
  &lt;/PRE&gt;
  </td></tr>
  <tr valign=top><th align=right>
  	on</th><td>Socket option returned on the call.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-93"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_socket_addr_get(apr_sockaddr_t **sa, apr_interface_e which, apr_socket_t *sock);</b>
    <dd>
  Return an apr_sockaddr_t from an apr_socket_t
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	sa</th><td>The returned apr_sockaddr_t.
  </td></tr>
  <tr valign=top><th align=right>
  	which</th><td>Which interface do we want the apr_sockaddr_t for?
  </td></tr>
  <tr valign=top><th align=right>
  	sock</th><td>The socket to use</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-94"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_sockaddr_port_set(apr_sockaddr_t *sockaddr, apr_port_t port);</b>
    <dd>
  Set the port in an APR socket address.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	sockaddr</th><td>The socket address to set.
  </td></tr>
  <tr valign=top><th align=right>
  	port</th><td>The port to be stored in the socket address.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-95"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_sockaddr_port_get(apr_port_t *port, apr_sockaddr_t *sockaddr);</b>
    <dd>
  Return the port in an APR socket address.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	port</th><td>The port from the socket address.
  </td></tr>
  <tr valign=top><th align=right>
  	sockaddr</th><td>The socket address to reference.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-96"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_sockaddr_ip_set(apr_sockaddr_t *sockaddr, const char *addr);</b>
    <dd>
  Set the IP address in an APR socket address.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	sockaddr</th><td>The socket address to use
  </td></tr>
  <tr valign=top><th align=right>
  	addr</th><td>The IP address to attach to the socket.
              Use APR_ANYADDR to use any IP addr on the machine.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-97"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_sockaddr_ip_get(char **addr, apr_sockaddr_t *sockaddr);</b>
    <dd>
  Return the IP address (in numeric address string format) in
  an APR socket address.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	addr</th><td>The IP address.
  </td></tr>
  <tr valign=top><th align=right>
  	sockaddr</th><td>The socket address to reference.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-98"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_poll_setup(apr_pollfd_t **new_poll, apr_int32_t num, apr_pool_t *cont);</b>
    <dd>
  Setup the memory required for poll to operate properly
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	new_poll</th><td>The poll structure to be used.
  </td></tr>
  <tr valign=top><th align=right>
  	num</th><td>The number of socket descriptors to be polled.
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to operate on.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-99"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_poll(apr_pollfd_t *aprset, apr_int32_t *nsds, apr_interval_time_t timeout);</b>
    <dd>
  Poll the sockets in the poll structure
  <p><img src="../images//tip.gif">
  &lt;PRE&gt;
  The number of sockets signalled is returned in the second argument. 
         This is a blocking call, and it will not return until either a 
         socket has been signalled, or the timeout has expired. 
  &lt;/PRE&gt;
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	aprset</th><td>The poll structure we will be using.
  </td></tr>
  <tr valign=top><th align=right>
  	nsds</th><td>The number of sockets we are polling.
  </td></tr>
  <tr valign=top><th align=right>
  	timeout</th><td>The amount of time in microseconds to wait.  This is 
                 a maximum, not a minimum.  If a socket is signalled, we 
                 will wake up before this time.  A negative number means 
                 wait until a socket is signalled.</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/APR_Process_library.html
  
  Index: APR_Process_library.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- APR Process library</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: APR Process library</h2>
    <b>
  
  </b>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="-39"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  <p><img src="../images//tip.gif">  This is NOT a required initializer function. This is
        useful if you have already opened a pipe (or multiple files)
        that you wish to use, perhaps persistently across multiple
        process invocations - such as a log file. You can save some 
        extra function calls by not creating your own pipe since this
        creates one in the process space for you.
  <p><dl>
  </dl></dl>
  
  <a name="-40"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  <p><img src="../images//tip.gif"> This is NOT a required initializer function. This is
       useful if you have already opened a pipe (or multiple files)
       that you wish to use, perhaps persistently across multiple
       process invocations - such as a log file.
  <p><dl>
  </dl></dl>
  
  <a name="-41"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  <p><img src="../images//tip.gif"> This is NOT a required initializer function. This is
       useful if you have already opened a pipe (or multiple files)
       that you wish to use, perhaps persistently across multiple
       process invocations - such as a log file.
  <p><dl>
  </dl></dl>
  
  <a name="-42"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  <p><img src="../images//tip.gif"> The childs status is in the return code to this process.  It is one of:
  &lt;PRE&gt;
             APR_CHILD_DONE     -- child is no longer running.
             APR_CHILD_NOTDONE  -- child is still running.
  &lt;/PRE&gt;
  <p><dl>
  </dl></dl>
  
  <a name="-43"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(void);</b>
    <dd>
  <p><img src="../images//tip.gif"> Since this can be called by a maintenance function while we're
       scanning the other_children list, all scanners should protect 
       themself by loading ocr-&gt;next before calling any maintenance 
       function.
  <p><dl>
  </dl></dl>
  
  <a name="apr_proc_detach"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_proc_detach(void);</b>
    <dd>
  Detach the process from the controlling terminal.
  <p><dl>
  </dl></dl>
  
  <a name="apr_status_t-149"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_procattr_create(apr_procattr_t **new_attr, apr_pool_t *cont);</b>
    <dd>
  Create and initialize a new procattr variable
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	new_attr</th><td>The newly created procattr.
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to use</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-150"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_procattr_io_set(apr_procattr_t *attr, apr_int32_t in, apr_int32_t out, apr_int32_t err);</b>
    <dd>
  Determine if any of stdin, stdout, or stderr should be linked to pipes 
  when starting a child process.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	attr</th><td>The procattr we care about.
  </td></tr>
  <tr valign=top><th align=right>
  	in</th><td>Should stdin be a pipe back to the parent?
  </td></tr>
  <tr valign=top><th align=right>
  	out</th><td>Should stdout be a pipe back to the parent?
  </td></tr>
  <tr valign=top><th align=right>
  	err</th><td>Should stderr be a pipe back to the parent?</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-151"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_procattr_child_in_set(struct apr_procattr_t *attr, apr_file_t *child_in, apr_file_t *parent_in);</b>
    <dd>
  Set the child_in and/or parent_in values to existing apr_file_t values.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	attr</th><td>The procattr we care about.
  </td></tr>
  <tr valign=top><th align=right>
  	child_in</th><td>apr_file_t value to use as child_in. Must be a valid file.
  </td></tr>
  <tr valign=top><th align=right>
  	parent_in</th><td>apr_file_t value to use as parent_in. Must be a valid file.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-152"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_procattr_child_out_set(struct apr_procattr_t *attr, apr_file_t *child_out, apr_file_t *parent_out);</b>
    <dd>
  Set the child_out and parent_out values to existing apr_file_t values.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	attr</th><td>The procattr we care about.
  </td></tr>
  <tr valign=top><th align=right>
  	child_out</th><td>apr_file_t value to use as child_out. Must be a valid file.
  </td></tr>
  <tr valign=top><th align=right>
  	parent_out</th><td>apr_file_t value to use as parent_out. Must be a valid file.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-153"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_procattr_child_err_set(struct apr_procattr_t *attr, apr_file_t *child_err, apr_file_t *parent_err);</b>
    <dd>
  Set the child_err and parent_err values to existing apr_file_t values.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	attr</th><td>The procattr we care about.
  </td></tr>
  <tr valign=top><th align=right>
  	child_err</th><td>apr_file_t value to use as child_err. Must be a valid file.
  </td></tr>
  <tr valign=top><th align=right>
  	parent_err</th><td>apr_file_t value to use as parent_err. Must be a valid file.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-154"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_procattr_dir_set(apr_procattr_t *attr, const char *dir);</b>
    <dd>
  Set which directory the child process should start executing in.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	attr</th><td>The procattr we care about.
  </td></tr>
  <tr valign=top><th align=right>
  	dir</th><td>Which dir to start in.  By default, this is the same dir as
             the parent currently resides in, when the createprocess call
             is made.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-155"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_procattr_cmdtype_set(apr_procattr_t *attr, apr_cmdtype_e cmd);</b>
    <dd>
  Set what type of command the child process will call.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	attr</th><td>The procattr we care about.
  </td></tr>
  <tr valign=top><th align=right>
  	cmd</th><td>The type of command.  One of:
  &lt;PRE&gt;
             APR_SHELLCMD --  Shell script
             APR_PROGRAM  --  Executable program   (default) 
  &lt;/PRE&gt;</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-156"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_procattr_detach_set(apr_procattr_t *attr, apr_int32_t detach);</b>
    <dd>
  Determine if the chlid should start in detached state.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	attr</th><td>The procattr we care about.
  </td></tr>
  <tr valign=top><th align=right>
  	detach</th><td>Should the child start in detached state?  Default is no.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-157"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_procattr_limit_set(apr_procattr_t *attr, apr_int32_t what, apr_int32_t what, struct rlimit *limit);</b>
    <dd>
  Set the Resource Utilization limits when starting a new process.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	attr</th><td>The procattr we care about.
  </td></tr>
  <tr valign=top><th align=right>
  	what</th><td>Which limit to set, one of:
  &lt;PRE&gt;
                  APR_LIMIT_CPU
                  APR_LIMIT_MEM
                  APR_LIMIT_NPROC
  &lt;/PRE&gt;
  </td></tr>
  <tr valign=top><th align=right>
  	limit</th><td>Value to set the limit to.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-158"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_proc_fork(apr_proc_t *proc, apr_pool_t *cont);</b>
    <dd>
  This is currently the only non-portable call in APR.  This executes 
  a standard unix fork.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	proc</th><td>The resulting process handle.
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to use.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-159"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_proc_create(apr_proc_t *new_proc, const char *progname, const char * const *args, const char * const *env, apr_procattr_t *attr, apr_pool_t *cont);</b>
    <dd>
  Create a new process and execute a new program within that process.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	new_proc</th><td>The resulting process handle.
  </td></tr>
  <tr valign=top><th align=right>
  	progname</th><td>The program to run
  </td></tr>
  <tr valign=top><th align=right>
  	const_args</th><td>the arguments to pass to the new program.  The first 
                    one should be the program name.
  </td></tr>
  <tr valign=top><th align=right>
  	env</th><td>The new environment table for the new process.  This 
             should be a list of NULL-terminated strings.
  </td></tr>
  <tr valign=top><th align=right>
  	attr</th><td>the procattr we should use to determine how to create the new
          process
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to use.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-160"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_proc_wait(apr_proc_t *proc, apr_wait_how_e waithow);</b>
    <dd>
  Wait for a child process to die
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	proc</th><td>The process handle that corresponds to the desired child process
  </td></tr>
  <tr valign=top><th align=right>
  	waithow</th><td>How should we wait.  One of:
  &lt;PRE&gt;
             APR_WAIT   -- block until the child process dies.
             APR_NOWAIT -- return immediately regardless of if the 
                           child is dead or not.
  &lt;/PRE&gt;</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-161"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_proc_wait_all_procs(apr_proc_t *proc, apr_wait_t *status, apr_wait_how_e waithow, apr_pool_t *p);</b>
    <dd>
  Wait for any current child process to die and return information 
  about that child.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	proc</th><td>Pointer to NULL on entry, will be filled out with child's 
              information
  </td></tr>
  <tr valign=top><th align=right>
  	status</th><td>The returned exit status of the child, if a child process dies
                On platforms that don't support obtaining this information, 
                the status parameter will be returned as APR_ENOTIMPL.
  </td></tr>
  <tr valign=top><th align=right>
  	waithow</th><td>How should we wait.  One of:
  &lt;PRE&gt;
             APR_WAIT   -- block until the child process dies.
             APR_NOWAIT -- return immediately regardless of if the 
                           child is dead or not.
  &lt;/PRE&gt;
  </td></tr>
  <tr valign=top><th align=right>
  	p</th><td>Pool to allocate child information out of.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-162"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_proc_other_child_read(apr_proc_t *pid, int status);;</b>
    <dd>
  Check on the specified process.  If it is gone, call the maintenance 
  function.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	pid</th><td>The process to check.
  </td></tr>
  <tr valign=top><th align=right>
  	status</th><td>The status to pass to the maintenance function.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-163"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_proc_kill(apr_proc_t *proc, int sig);</b>
    <dd>
  Terminate a process.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	proc</th><td>The process to terminate.
  </td></tr>
  <tr valign=top><th align=right>
  	sig</th><td>How to kill the process.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-164"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_setup_signal_thread(void);</b>
    <dd>
  Setup the process for a single thread to be used for all signal handling.
  @warn This must be called before any threads are created
  <p><dl>
  </dl></dl>
  
  <a name="apr_status_t-165"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_create_signal_thread(apr_thread_t **td, apr_threadattr_t *tattr, int (*signal_handler)(int signum), apr_pool_t *p);</b>
    <dd>
  Create a thread that will listen for signals.  The thread will loop
  forever, calling a provided function whenever it receives a signal.  That
  functions should return 1 if the signal has been handled, 0 otherwise.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	td</th><td>The newly created thread
  </td></tr>
  <tr valign=top><th align=right>
  	tattr</th><td>The threadattr to use when creating the thread
  </td></tr>
  <tr valign=top><th align=right>
  	signal_handler</th><td>The function to call when a signal is received
  </td></tr>
  <tr valign=top><th align=right>
  	p</th><td>The pool to use when creating the thread</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-22"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_proc_other_child_register(apr_proc_t *pid, void (*maintenance) (int reason, void *, int status), void *data, apr_file_t *write_fd, apr_pool_t *p);</b>
    <dd>
  Register an other_child -- a child which must be kept track of so 
  that the program knows when it has dies or disappeared.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	pid</th><td>pid is the pid of the child.
  </td></tr>
  <tr valign=top><th align=right>
  	maintenance</th><td>maintenance is a function that is invoked with a 
                     reason and the data pointer passed here.
  </td></tr>
  <tr valign=top><th align=right>
  	data</th><td>The data to pass to the maintenance function.
  </td></tr>
  <tr valign=top><th align=right>
  	write_fd</th><td>An fd that is probed for writing.  If it is ever unwritable
                  then the maintenance is invoked with reason 
                  OC_REASON_UNWRITABLE.
  </td></tr>
  <tr valign=top><th align=right>
  	p</th><td>The pool to use for allocating memory.</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-23"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_proc_other_child_unregister(void *data);</b>
    <dd>
  Stop watching the specified process.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The data to pass to the maintenance function.  This is
              used to find the process to unregister.</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-24"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_proc_other_child_check();;</b>
    <dd>
  Loop through all registered other_children and call the appropriate 
  maintenance function when necessary.
  <p><dl>
  </dl></dl>
  
  <a name="void-25"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_proc_probe_writable_fds();</b>
    <dd>
  Ensure all the registered write_fds are still writable, otherwise 
  invoke the maintenance functions as appropriate.
  <p><dl>
  </dl></dl>
  
  <a name="void-26"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_pool_note_subprocess(struct apr_pool_t *a, apr_proc_t *pid, enum kill_conditions how);</b>
    <dd>
  Register a process to be killed when a pool dies.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	a</th><td>The pool to use to define the processes lifetime
  </td></tr>
  <tr valign=top><th align=right>
  	pid</th><td>The process to register
  </td></tr>
  <tr valign=top><th align=right>
  	how</th><td>How to kill the process, one of:
  &lt;PRE&gt;
          kill_never          -- process is never sent any signals
          kill_always     -- process is sent SIGKILL on apr_pool_t cleanup 
          kill_after_timeout -- SIGTERM, wait 3 seconds, SIGKILL
          just_wait          -- wait forever for the process to complete
          kill_only_once     -- send SIGTERM and then wait
  &lt;/PRE&gt;</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/APR_Random_Functions.html
  
  Index: APR_Random_Functions.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- APR Random Functions</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: APR Random Functions</h2>
    <b>
  
  </b>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="apr_status_t-51"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_generate_random_bytes(unsigned char * buf, int length);</b>
    <dd>
  Generate a string of random bytes.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	buf</th><td>Random bytes go here
  </td></tr>
  <tr valign=top><th align=right>
  	length</th><td>size of the buffer</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-52"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_initialize(void);</b>
    <dd>
  Setup any APR internal data structures.  This MUST be the first function 
  called for any APR program.
  <p><dl>
  </dl></dl>
  
  <a name="apr_status_t-53"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_set_abort(int (*apr_abort)(int retcode), apr_pool_t *cont);</b>
    <dd>
  Set the APR_ABORT function.
  <p><img src="../images//tip.gif"> This is in for backwards compatability.  If the program using
       APR wants APR to exit on a memory allocation error, then this
       function should be called to set the function to use in order
       to actually exit the program.  If this function is not called,
       then APR will return an error and expect the calling program to
       deal with the error accordingly.
  <p><dl>
  </dl></dl>
  
  <a name="void-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_terminate(void);</b>
    <dd>
  Tear down any APR internal data structures which aren't torn down 
  automatically.
  <p><img src="../images//tip.gif"> An APR program must call this function at termination once it 
       has stopped using APR services.  The APR developers suggest using
       atexit to ensure this is called.
  <p><dl>
  </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/APR_Table_library.html
  
  Index: APR_Table_library.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- APR Table library</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: APR Table library</h2>
    <b>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="APR_Table_library.html#apr_array_header_t">struct apr_array_header_t</h3></a>
    <ul>
  <li><a href="APR_Table_library.html#apr_array_header_t-cont">cont</a>
  <li><a href="APR_Table_library.html#apr_array_header_t-elt_size">elt_size</a>
  <li><a href="APR_Table_library.html#apr_array_header_t-elts">elts</a>
  <li><a href="APR_Table_library.html#apr_array_header_t-nalloc">nalloc</a>
  <li><a href="APR_Table_library.html#apr_array_header_t-nelts">nelts</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="APR_Table_library.html#apr_table_entry_t">struct apr_table_entry_t</h3></a>
    <ul>
  <li><a href="APR_Table_library.html#apr_table_entry_t-key">key</a>
  <li><a href="APR_Table_library.html#apr_table_entry_t-val">val</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="APR_Table_library.html#apr_table_t">struct apr_table_t</h3></a>
    <ul>
  <li><a href="APR_Table_library.html#apr_table_t-a">a</a>
  <li><a href="APR_Table_library.html#apr_table_t-creator">creator</a>
  </ul>
  
  </b>
  <hr size="4">
    <a name="apr_array_header_t"></a>
    <h1>struct apr_array_header_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_tables.h</td></tr></tr>
  </table>
  <p>
  An opaque array type<h2>Member Index</h2>
  <ul><li><a href="APR_Table_library.html#apr_array_header_t-cont">    apr_pool_t *cont</a>
  	<li><a href="APR_Table_library.html#apr_array_header_t-elt_size">    int elt_size</a>
  	<li><a href="APR_Table_library.html#apr_array_header_t-elts">    char *elts</a>
  	<li><a href="APR_Table_library.html#apr_array_header_t-nalloc">    int nalloc</a>
  	<li><a href="APR_Table_library.html#apr_array_header_t-nelts">    int nelts</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="cont"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_pool_t *cont;</b>
  <dd>
  The pool the array is allocated out of
  <p><dl>
  </dl></dl>
  
    <a name="elt_size"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int elt_size;</b>
  <dd>
  The amount of memory allocated for each element of the array
  <p><dl>
  </dl></dl>
  
    <a name="elts"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    char *elts;</b>
  <dd>
  The elements in the array
  <p><dl>
  </dl></dl>
  
    <a name="nalloc"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int nalloc;</b>
  <dd>
  The number of elements allocated in the array
  <p><dl>
  </dl></dl>
  
    <a name="nelts"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int nelts;</b>
  <dd>
  The number of active elements in the array
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="apr_table_entry_t"></a>
    <h1>struct apr_table_entry_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_tables.h</td></tr></tr>
  </table>
  <p>
  The (opaque) structure for string-content tables.
   The type for each entry in a string-content table<h2>Member Index</h2>
  <ul><li><a href="APR_Table_library.html#apr_table_entry_t-key">    char *key</a>
  	<li><a href="APR_Table_library.html#apr_table_entry_t-val">    char *val</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="key"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    char *key;</b>
  <dd>
  The key for the current table entry
  <p><dl>
  </dl></dl>
  
    <a name="val"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    char *val;</b>
  <dd>
  The value for the current table entry
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="apr_table_t"></a>
    <h1>struct apr_table_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_tables.h</td></tr></tr>
  </table>
  <p>
  The opaque string-content table type<h2>Member Index</h2>
  <ul><li><a href="APR_Table_library.html#apr_table_t-a">    apr_array_header_t a</a>
  	<li><a href="APR_Table_library.html#apr_table_t-creator">    void *creator</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="a"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_array_header_t a;</b>
  <dd>
  The underlying array for the table
  <p><dl>
  </dl></dl>
  
    <a name="creator"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    void *creator;</b>
  <dd>
  Who created the array.
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="-37"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_array_header_t *);</b>
    <dd>
  <p><img src="../images//tip.gif"> The alternate apr_array_copy_hdr copies only the header, and arranges 
  for the elements to be copied if (and only if) the code subsequently does 
  a push or arraycat.
  <p><dl>
  </dl></dl>
  
  <a name="-38"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_array_header_t *);</b>
    <dd>
  <p><img src="../images//tip.gif"> The alternate apr_array_copy copies the *entire* array.
  <p><dl>
  </dl></dl>
  
  <a name="apr_array_header_t"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_array_header_t *apr_table_elts(apr_table_t *t);</b>
    <dd>
  Get the elements from a table
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	t</th><td>The table</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>An array containing the contents of the table<p></dl></dl>
  
  <a name="apr_array_header_t-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_array_header_t *apr_array_make(struct apr_pool_t *p, int nelts, int elt_size);</b>
    <dd>
  Create an array
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate the memory out of
  </td></tr>
  <tr valign=top><th align=right>
  	nelts</th><td>the number of elements in the initial array
  </td></tr>
  <tr valign=top><th align=right>
  	elt_size</th><td>The size of each element in the array.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new array<p></dl></dl>
  
  <a name="apr_array_header_t-3"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_array_header_t *apr_array_copy(apr_pool_t *p, const apr_array_header_t *arr);</b>
    <dd>
  Copy the entire array
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate the copy of the array out of
  </td></tr>
  <tr valign=top><th align=right>
  	arr</th><td>The array to copy</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>An exact copy of the array passed in<p></dl></dl>
  
  <a name="apr_array_header_t-4"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_array_header_t *apr_array_copy_hdr(apr_pool_t *p, const apr_array_header_t *arr);</b>
    <dd>
  Copy the headers of the array, and arrange for the elements to be copied if
  and only if the code subsequently does a push or arraycat.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate the copy of the array out of
  </td></tr>
  <tr valign=top><th align=right>
  	arr</th><td>The array to copy</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>An exact copy of the array passed in<p></dl></dl>
  
  <a name="apr_array_header_t-5"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_array_header_t *apr_array_append(apr_pool_t *p, const apr_array_header_t *first, const apr_array_header_t *second);</b>
    <dd>
  Append one array to the end of another, creating a new array in the process.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate the new array out of
  </td></tr>
  <tr valign=top><th align=right>
  	first</th><td>The array to put first in the new array.
  </td></tr>
  <tr valign=top><th align=right>
  	second</th><td>The array to put second in the new array.
  </td></tr>
  <tr valign=top><th align=right>
  	return</th><td>A new array containing the data from the two arrays passed in.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_table_t"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_table_t *apr_table_make(apr_pool_t *p, int nelts);</b>
    <dd>
  Make a new table
  <p><img src="../images//warning.gif" align=left> This table can only store text data
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate the pool out of
  </td></tr>
  <tr valign=top><th align=right>
  	nelts</th><td>The number of elements in the initial table.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new table.<p></dl></dl>
  
  <a name="apr_table_t-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_table_t *apr_table_copy(apr_pool_t *p, const apr_table_t *t);</b>
    <dd>
  Create a new table and copy another table into it
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate the new table out of
  </td></tr>
  <tr valign=top><th align=right>
  	t</th><td>The table to copy</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>A copy of the table passed in<p></dl></dl>
  
  <a name="apr_table_t-3"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_table_t *apr_table_overlay(apr_pool_t *p, const apr_table_t *overlay, const apr_table_t *base);;</b>
    <dd>
  Merge two tables into one new table
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to use for the new table
  </td></tr>
  <tr valign=top><th align=right>
  	overlay</th><td>The first table to put in the new table
  </td></tr>
  <tr valign=top><th align=right>
  	base</th><td>The table to add at the end of the new table</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>A new table containing all of the data from the two passed in<p></dl></dl>
  
  <a name="char-9"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>char *apr_array_pstrcat(apr_pool_t *p, const apr_array_header_t *arr, const char sep);</b>
    <dd>
  Generates a new string from the apr_pool_t containing the concatenated 
  sequence of substrings referenced as elements within the array.  The string 
  will be empty if all substrings are empty or null, or if there are no 
  elements in the array.  If sep is non-NUL, it will be inserted between 
  elements as a separator.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate the string out of
  </td></tr>
  <tr valign=top><th align=right>
  	arr</th><td>The array to generate the string from
  </td></tr>
  <tr valign=top><th align=right>
  	sep</th><td>The separator to use</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>A string containing all of the data in the array.<p></dl></dl>
  
  <a name="const-4"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>const char *apr_table_get(const apr_table_t *t, const char *key);</b>
    <dd>
  Get the value associated with a given key from the table.  After this call,
  The data is still in the table
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	t</th><td>The table to search for the key
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key to search for</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The value associated with the key<p></dl></dl>
  
  <a name="int-10"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_is_empty_table(apr_table_t *t);</b>
    <dd>
  Determine if the table is empty
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	t</th><td>The table to check</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>True if empty, Falso otherwise<p></dl></dl>
  
  <a name="void-10"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_array_cat(apr_array_header_t *dst, const apr_array_header_t *src);</b>
    <dd>
  Concatenate two arrays together
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	dst</th><td>The destination array, and the one to go first in the combined 
             array
  </td></tr>
  <tr valign=top><th align=right>
  	src</th><td>The source array to add to the destination array</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-11"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_table_clear(apr_table_t *t);</b>
    <dd>
  Delete all of the elements from a table
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	t</th><td>The table to clear</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-12"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_table_set(apr_table_t *t, const char *key, const char *val);</b>
    <dd>
  Add a key/value pair to a table, if another element already exists with the
  same key, this will over-write the old data.
  <p><img src="../images//tip.gif"> When adding data, this function makes a copy of both the key and the
       value.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	t</th><td>The table to add the data to.
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key fo use
  </td></tr>
  <tr valign=top><th align=right>
  	val</th><td>The value to add</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-13"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_table_setn(apr_table_t *t, const char *key, const char *val);</b>
    <dd>
  Add a key/value pair to a table, if another element already exists with the
  same key, this will over-write the old data.
  <p><img src="../images//tip.gif"> When adding data, this function does not make a copy of the key or the
       value, so care should be taken to ensure that the values will not 
       change after they have been added..
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	t</th><td>The table to add the data to.
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key fo use
  </td></tr>
  <tr valign=top><th align=right>
  	val</th><td>The value to add</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-14"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_table_unset(apr_table_t *t, const char *key);</b>
    <dd>
  Remove data from the table
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	t</th><td>The table to remove data from
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key of the data being removed</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-15"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_table_merge(apr_table_t *t, const char *key, const char *val);</b>
    <dd>
  Add data to a table by merging the value with data that has already been 
  stored
  <p><img src="../images//tip.gif"> If the key is not found, then this function acts like apr_table_add
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	t</th><td>The table to search for the data
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key to merge data for
  </td></tr>
  <tr valign=top><th align=right>
  	val</th><td>The data to add</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-16"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_table_mergen(apr_table_t *t, const char *key, const char *val);</b>
    <dd>
  Add data to a table by merging the value with data that has already been 
  stored
  <p><img src="../images//tip.gif"> If the key is not found, then this function acts like apr_table_addn
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	t</th><td>The table to search for the data
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key to merge data for
  </td></tr>
  <tr valign=top><th align=right>
  	val</th><td>The data to add</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-17"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_table_add(apr_table_t *t, const char *key, const char *val);</b>
    <dd>
  Add data to a table, regardless of whether there is another element with the
  same key.
  <p><img src="../images//tip.gif"> When adding data, this function makes a copy of both the key and the
       value.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	t</th><td>The table to add to
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key to use
  </td></tr>
  <tr valign=top><th align=right>
  	val</th><td>The value to add.</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-18"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_table_addn(apr_table_t *t, const char *key, const char *val);</b>
    <dd>
  Add data to a table, regardless of whether there is another element with the
  same key.
  <p><img src="../images//tip.gif"> When adding data, this function does not make a copy of the key or the
       value, so care should be taken to ensure that the values will not 
       change after they have been added..
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	t</th><td>The table to add to
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key to use
  </td></tr>
  <tr valign=top><th align=right>
  	val</th><td>The value to add.</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-19"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_table_do(int (*comp) (void *, const char *, const char *), void *rec, const apr_table_t *t, ...);</b>
    <dd>
  Iterate over a table running the provided function once for every
  element in the table.  If there is data passed in as a vararg, then the 
  function is only run on those element's whose key matches something in 
  the vararg.  If the vararg is NULL, then every element is run through the
  function.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	comp</th><td>The function to run
  </td></tr>
  <tr valign=top><th align=right>
  	rec</th><td>The data to pass as the first argument to the function
  </td></tr>
  <tr valign=top><th align=right>
  	t</th><td>The table to iterate over
  ... The vararg.  If this is NULL, then all elements in the table are
             run through the function, otherwise only those whose key matches
             are run.</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-20"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_table_vdo(int (*comp) (void *, const char *, const char *), void *rec, const apr_table_t *t, va_list vp);</b>
    <dd>
  Iterate over a table running the provided function once for every
  element in the table.  If there is data passed in as a vararg, then the 
  function is only run on those element's whose key matches something in 
  the vararg.  If the vararg is NULL, then every element is run through the
  function.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	comp</th><td>The function to run
  </td></tr>
  <tr valign=top><th align=right>
  	rec</th><td>The data to pass as the first argument to the function
  </td></tr>
  <tr valign=top><th align=right>
  	t</th><td>The table to iterate over
  </td></tr>
  <tr valign=top><th align=right>
  	vp</th><td>The vararg table.  If this is NULL, then all elements in the 
                 table are run through the function, otherwise only those 
                 whose key matches are run.</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-21"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_table_overlap(apr_table_t *a, const apr_table_t *b, unsigned flags);</b>
    <dd>
  For each element in table b, either use setn or mergen to add the data
  to table a.  Which method is used is determined by the flags passed in.
  <p><img src="../images//tip.gif"> This function is highly optimized, and uses less memory and CPU cycles
       than a function that just loops through table b calling other functions.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	a</th><td>The table to add the data to.
  </td></tr>
  <tr valign=top><th align=right>
  	b</th><td>The table to iterate over, adding it's data to table a
  </td></tr>
  <tr valign=top><th align=right>
  	flags</th><td>How to add the table to table a.  One of:
           APR_OVERLAP_TABLES_SET        Use apr_table_setn
           APR_OVERLAP_TABLES_MERGE      Use apr_table_mergen</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-9"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void *apr_array_push(apr_array_header_t *arr);</b>
    <dd>
  Add a new element to an array
  <p><img src="../images//tip.gif"> If there are no free spots in the array, then this function will
       allocate new space for the new element.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	arr</th><td>The array to add an element to.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>Location for the new element in the array.<p></dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/APR_Thread_library.html
  
  Index: APR_Thread_library.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- APR Thread library</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: APR Thread library</h2>
    <b>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="APR_Thread_library.html#apr_proc_t">struct apr_proc_t</h3></a>
    <ul>
  <li><a href="APR_Thread_library.html#apr_proc_t-in">in</a>
  <li><a href="APR_Thread_library.html#apr_proc_t-out">out</a>
  <li><a href="APR_Thread_library.html#apr_proc_t-pid">pid</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="APR_Thread_library.html#process_chain">struct process_chain</h3></a>
    <ul>
  <li><a href="APR_Thread_library.html#process_chain-pid">pid</a>
  <li><a href="APR_Thread_library.html#process_chain-process_chain">process_chain</a>
  </ul>
  
  </b>
  <hr size="4">
    <a name="apr_proc_t"></a>
    <h1>struct apr_proc_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_thread_proc.h</td></tr></tr>
  </table>
  <p>
  The APR process type<h2>Member Index</h2>
  <ul><li><a href="APR_Thread_library.html#apr_proc_t-in">    apr_file_t *in</a>
  	<li><a href="APR_Thread_library.html#apr_proc_t-out">    apr_file_t *out</a>
  	<li><a href="APR_Thread_library.html#apr_proc_t-pid">    pid_t pid</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="in"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_file_t *in;</b>
  <dd>
  Parent's side of pipe to child's stdin
  <p><dl>
  </dl></dl>
  
    <a name="out"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_file_t *out;</b>
  <dd>
  Parent's side of pipe to child's stdout
  <p><dl>
  </dl></dl>
  
    <a name="pid"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    pid_t pid;</b>
  <dd>
  The process ID
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="process_chain"></a>
    <h1>struct process_chain</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_thread_proc.h</td></tr></tr>
  </table>
  <p>
  A list of processes<h2>Member Index</h2>
  <ul><li><a href="APR_Thread_library.html#process_chain-pid">    apr_proc_t *pid</a>
  	<li><a href="APR_Thread_library.html#process_chain-process_chain">process_chain *next </a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="pid"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_proc_t *pid;</b>
  <dd>
  The process ID
  <p><dl>
  </dl></dl>
  
    <a name="process_chain"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>process_chain *next ;</b>
  <dd>
  When the process should be sent a signal. &lt;PRE&gt;
            kill_never   -- process is never sent any signals
            kill_always  -- process is sent SIGKILL on apr_pool_t cleanup
            kill_after_timeout -- SIGTERM, wait 3 seconds, SIGKILL
            just_wait    -- wait forever for the process to complete
            kill_only_once -- send SIGTERM and then wait &lt;/PRE&gt;
       The next process in the list
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="apr_status_t-134"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_threadattr_create(apr_threadattr_t **new_attr, apr_pool_t *cont);</b>
    <dd>
  Create and initialize a new threadattr variable
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	new_attr</th><td>The newly created threadattr.
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to use</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-135"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_threadattr_detach_get(apr_threadattr_t *attr, apr_int32_t on);</b>
    <dd>
  Set if newly created threads should be created in detach mode.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	attr</th><td>The threadattr to affect
  </td></tr>
  <tr valign=top><th align=right>
  	on</th><td>Thread detach state on or off</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-136"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_threadattr_detach_set(apr_threadattr_t *attr);</b>
    <dd>
  Get the detach mode for this threadattr.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	attr</th><td>The threadattr to reference</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-137"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_thread_create(apr_thread_t **new_thread, apr_threadattr_t *attr, apr_thread_start_t func, void *data, apr_pool_t *cont);</b>
    <dd>
  Create a new thread of execution
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	new_thread</th><td>The newly created thread handle.
  </td></tr>
  <tr valign=top><th align=right>
  	attr</th><td>The threadattr to use to determine how to create the thread
  </td></tr>
  <tr valign=top><th align=right>
  	func</th><td>The function to start the new thread in
  </td></tr>
  <tr valign=top><th align=right>
  	data</th><td>Any data to be passed to the starting function
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to use</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-138"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_thread_exit(apr_thread_t *thd, apr_status_t *retval);</b>
    <dd>
  stop the current thread
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thd</th><td>The thread to stop
  </td></tr>
  <tr valign=top><th align=right>
  	retval</th><td>The return value to pass back to any thread that cares</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-139"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_thread_join(apr_status_t *retval, apr_thread_t *thd);;</b>
    <dd>
  block until the desired thread stops executing.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	retval</th><td>The return value from the dead thread.
  </td></tr>
  <tr valign=top><th align=right>
  	thd</th><td>The thread to join</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-140"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_thread_detach(apr_thread_t *thd);</b>
    <dd>
  detach a thread
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thd</th><td>The thread to detach</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-141"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_thread_data_get(void **data, const char *key, apr_thread_t *thread);</b>
    <dd>
  Return the pool associated with the current thread.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The user data associated with the thread.
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key to associate with the data
  </td></tr>
  <tr valign=top><th align=right>
  	thread</th><td>The currently open thread.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-142"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_thread_data_set(void *data, const char *key, apr_status_t (*cleanup) (void *), apr_thread_t *thread);</b>
    <dd>
  Return the pool associated with the current thread.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The user data to associate with the thread.
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key to use for associating the data with the tread
  </td></tr>
  <tr valign=top><th align=right>
  	cleanup</th><td>The cleanup routine to use when the thread is destroyed.
  </td></tr>
  <tr valign=top><th align=right>
  	thread</th><td>The currently open thread.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-143"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_threadkey_private_create(apr_threadkey_t **key, void (*dest)(void *), apr_pool_t *cont);</b>
    <dd>
  Create and initialize a new thread private address space
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	key</th><td>The thread private handle.
  </td></tr>
  <tr valign=top><th align=right>
  	dest</th><td>The destructor to use when freeing the private memory.
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to use</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-144"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_threadkey_private_get(void **new_mem, apr_threadkey_t *key);</b>
    <dd>
  Get a pointer to the thread private memory
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	new_mem</th><td>The data stored in private memory
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The handle for the desired thread private memory</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-145"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_threadkey_private_set(void *priv, apr_threadkey_t *key);</b>
    <dd>
  Set the data to be stored in thread private memory
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	priv</th><td>The data to be stored in private memory
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The handle for the desired thread private memory</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-146"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_threadkey_private_delete(apr_threadkey_t *key);</b>
    <dd>
  Free the thread private memory
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	key</th><td>The handle for the desired thread private memory</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-147"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_threadkey_data_get(void **data, const char *key, apr_threadkey_t *threadkey);</b>
    <dd>
  Return the pool associated with the current threadkey.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The user data associated with the threadkey.
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key associated with the data
  </td></tr>
  <tr valign=top><th align=right>
  	threadkey</th><td>The currently open threadkey.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-148"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_threadkey_data_set(void *data, const char *key, apr_status_t (*cleanup) (void *), apr_threadkey_t *threadkey);</b>
    <dd>
  Return the pool associated with the current threadkey.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The data to set.
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key to associate with the data.
  </td></tr>
  <tr valign=top><th align=right>
  	cleanup</th><td>The cleanup routine to use when the file is destroyed.
  </td></tr>
  <tr valign=top><th align=right>
  	threadkey</th><td>The currently open threadkey.</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/APR_Time_library.html
  
  Index: APR_Time_library.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- APR Time library</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: APR Time library</h2>
    <b>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="APR_Time_library.html#apr_exploded_time_t">struct apr_exploded_time_t</h3></a>
    <ul>
  <li><a href="APR_Time_library.html#apr_exploded_time_t-tm_gmtoff">tm_gmtoff</a>
  <li><a href="APR_Time_library.html#apr_exploded_time_t-tm_hour">tm_hour</a>
  <li><a href="APR_Time_library.html#apr_exploded_time_t-tm_isdst">tm_isdst</a>
  <li><a href="APR_Time_library.html#apr_exploded_time_t-tm_mday">tm_mday</a>
  <li><a href="APR_Time_library.html#apr_exploded_time_t-tm_min">tm_min</a>
  <li><a href="APR_Time_library.html#apr_exploded_time_t-tm_mon">tm_mon</a>
  <li><a href="APR_Time_library.html#apr_exploded_time_t-tm_sec">tm_sec</a>
  <li><a href="APR_Time_library.html#apr_exploded_time_t-tm_usec">tm_usec</a>
  <li><a href="APR_Time_library.html#apr_exploded_time_t-tm_wday">tm_wday</a>
  <li><a href="APR_Time_library.html#apr_exploded_time_t-tm_yday">tm_yday</a>
  <li><a href="APR_Time_library.html#apr_exploded_time_t-tm_year">tm_year</a>
  </ul>
  
  </b>
  <hr size="4">
    <a name="apr_exploded_time_t"></a>
    <h1>struct apr_exploded_time_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_time.h</td></tr></tr>
  </table>
  <p>
  a structure similar to ANSI struct tm with the following differences:
   - tm_usec isn't an ANSI field
   - tm_gmtoff isn't an ANSI field (it's a bsdism)<h2>Member Index</h2>
  <ul><li><a href="APR_Time_library.html#apr_exploded_time_t-tm_gmtoff">    apr_int32_t tm_gmtoff</a>
  	<li><a href="APR_Time_library.html#apr_exploded_time_t-tm_hour">    apr_int32_t tm_hour</a>
  	<li><a href="APR_Time_library.html#apr_exploded_time_t-tm_isdst">    apr_int32_t tm_isdst</a>
  	<li><a href="APR_Time_library.html#apr_exploded_time_t-tm_mday">    apr_int32_t tm_mday</a>
  	<li><a href="APR_Time_library.html#apr_exploded_time_t-tm_min">    apr_int32_t tm_min</a>
  	<li><a href="APR_Time_library.html#apr_exploded_time_t-tm_mon">    apr_int32_t tm_mon</a>
  	<li><a href="APR_Time_library.html#apr_exploded_time_t-tm_sec">    apr_int32_t tm_sec</a>
  	<li><a href="APR_Time_library.html#apr_exploded_time_t-tm_usec">    apr_int32_t tm_usec</a>
  	<li><a href="APR_Time_library.html#apr_exploded_time_t-tm_wday">    apr_int32_t tm_wday</a>
  	<li><a href="APR_Time_library.html#apr_exploded_time_t-tm_yday">    apr_int32_t tm_yday</a>
  	<li><a href="APR_Time_library.html#apr_exploded_time_t-tm_year">    apr_int32_t tm_year</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="tm_gmtoff"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_int32_t tm_gmtoff;</b>
  <dd>
  seconds east of UTC
  <p><dl>
  </dl></dl>
  
    <a name="tm_hour"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_int32_t tm_hour;</b>
  <dd>
  (0-23) hours past midnight
  <p><dl>
  </dl></dl>
  
    <a name="tm_isdst"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_int32_t tm_isdst;</b>
  <dd>
  daylight saving time
  <p><dl>
  </dl></dl>
  
    <a name="tm_mday"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_int32_t tm_mday;</b>
  <dd>
  (1-31) day of the month
  <p><dl>
  </dl></dl>
  
    <a name="tm_min"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_int32_t tm_min;</b>
  <dd>
  (0-59) minutes past tm_hour
  <p><dl>
  </dl></dl>
  
    <a name="tm_mon"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_int32_t tm_mon;</b>
  <dd>
  (0-11) month of the year
  <p><dl>
  </dl></dl>
  
    <a name="tm_sec"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_int32_t tm_sec;</b>
  <dd>
  (0-61) seconds past tm_min
  <p><dl>
  </dl></dl>
  
    <a name="tm_usec"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_int32_t tm_usec;</b>
  <dd>
  microseconds past tm_sec
  <p><dl>
  </dl></dl>
  
    <a name="tm_wday"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_int32_t tm_wday;</b>
  <dd>
  (0-6) days since sunday
  <p><dl>
  </dl></dl>
  
    <a name="tm_yday"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_int32_t tm_yday;</b>
  <dd>
  (0-365) days since jan 1
  <p><dl>
  </dl></dl>
  
    <a name="tm_year"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_int32_t tm_year;</b>
  <dd>
  year since 1900
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="-44"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(void);</b>
    <dd>
  <p><img src="../images//tip.gif"> May sleep for longer than the specified time.
  <p><dl>
  </dl></dl>
  
  <a name="apr_status_t-166"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_ansi_time_to_apr_time(apr_time_t *result, time_t input);</b>
    <dd>
  convert an ansi time_t to an apr_time_t
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	result</th><td>the resulting apr_time_t
  </td></tr>
  <tr valign=top><th align=right>
  	input</th><td>the time_t to convert</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-167"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_explode_gmt(apr_exploded_time_t *result, apr_time_t input);</b>
    <dd>
  convert a time to its human readable components in GMT timezone
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	result</th><td>the exploded time
  </td></tr>
  <tr valign=top><th align=right>
  	input</th><td>the time to explode</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-168"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_explode_localtime(apr_exploded_time_t *result, apr_time_t input);</b>
    <dd>
  convert a time to its human readable components in local timezone
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	result</th><td>the exploded time
  </td></tr>
  <tr valign=top><th align=right>
  	input</th><td>the time to explode</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-169"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_implode_time(apr_time_t *result, apr_exploded_time_t *input);</b>
    <dd>
  Convert time value from human readable format to a numeric apr_time_t 
  e.g. elapsed usec since epoch
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	result</th><td>the resulting imploded time
  </td></tr>
  <tr valign=top><th align=right>
  	input</th><td>the input exploded time</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-170"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_rfc822_date(char *date_str, apr_time_t t);</b>
    <dd>
  apr_rfc822_date formats dates in the RFC822
  format in an efficient manner.  it is a fixed length
  format and requires the indicated amount of storage
  including trailing \0
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	date_str</th><td>String to write to.
  </td></tr>
  <tr valign=top><th align=right>
  	t</th><td>the time to convert</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-171"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_ctime(char *date_str, apr_time_t t);</b>
    <dd>
  apr_ctime formats dates in the ctime() format
  in an efficient manner.  it is a fixed length format
  and requires the indicated amount of storage
  including trailing \0
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	date_str</th><td>String to write to.
  </td></tr>
  <tr valign=top><th align=right>
  	t</th><td>the time to convert</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-172"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_strftime(char *s, apr_size_t *retsize, apr_size_t max, const char *format, apr_exploded_time_t *tm);</b>
    <dd>
  formats the exploded time according to the format specified
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	s</th><td>string to write to
  </td></tr>
  <tr valign=top><th align=right>
  	retsize</th><td>The length of the returned string
  </td></tr>
  <tr valign=top><th align=right>
  	max</th><td>The maximum length of the string
  </td></tr>
  <tr valign=top><th align=right>
  	format</th><td>The format for the time string
  </td></tr>
  <tr valign=top><th align=right>
  	tm</th><td>The time to convert</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_time_t"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_time_t apr_time_now(void);</b>
    <dd>
  return the current time
  <p><dl>
  </dl></dl>
  
  <a name="void-27"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_sleep(apr_interval_time_t t);</b>
    <dd>
  Sleep for the specified number of micro-seconds.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	t</th><td>desired amount of time to sleep.</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/APR_UUID_Handling.html
  
  Index: APR_UUID_Handling.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- APR UUID Handling</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: APR UUID Handling</h2>
    <b>
  
  </b>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="apr_status_t-174"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_uuid_parse(apr_uuid_t *uuid, const char *uuid_str);</b>
    <dd>
  Parse a standard-format string into a UUID
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	uuid</th><td>The resulting UUID
  </td></tr>
  <tr valign=top><th align=right>
  	uuid_str</th><td>The formatted UUID</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-28"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_uuid_get(apr_uuid_t *uuid);</b>
    <dd>
  Generate and return a (new) UUID
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	uuid</th><td>The resulting UUID</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-29"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_uuid_format(char *buffer, const apr_uuid_t *uuid);</b>
    <dd>
  Format a UUID into a string, following the standard format
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	buffer</th><td>The buffer to place the formatted UUID string into. It must
                be at least APR_UUID_FORMATTED_LENGTH + 1 bytes long to hold
                the formatted UUID and a null terminator
  </td></tr>
  <tr valign=top><th align=right>
  	uuid</th><td>The UUID to format</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/APR_command_arguments.html
  
  Index: APR_command_arguments.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- APR command arguments</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: APR command arguments</h2>
    <b>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="APR_command_arguments.html#apr_getopt_option_t">struct apr_getopt_option_t</h3></a>
    <ul>
  <li><a href="APR_command_arguments.html#apr_getopt_option_t-has_arg">has_arg</a>
  <li><a href="APR_command_arguments.html#apr_getopt_option_t-name">name</a>
  <li><a href="APR_command_arguments.html#apr_getopt_option_t-optch">optch</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="APR_command_arguments.html#apr_getopt_t">struct apr_getopt_t</h3></a>
    <ul>
  <li><a href="APR_command_arguments.html#apr_getopt_t-argc">argc</a>
  <li><a href="APR_command_arguments.html#apr_getopt_t-argv">argv</a>
  <li><a href="APR_command_arguments.html#apr_getopt_t-cont">cont</a>
  <li><a href="APR_command_arguments.html#apr_getopt_t-err">err</a>
  <li><a href="APR_command_arguments.html#apr_getopt_t-ind">ind</a>
  <li><a href="APR_command_arguments.html#apr_getopt_t-interleave">interleave</a>
  <li><a href="APR_command_arguments.html#apr_getopt_t-opt">opt</a>
  <li><a href="APR_command_arguments.html#apr_getopt_t-place">place</a>
  <li><a href="APR_command_arguments.html#apr_getopt_t-reset">reset</a>
  <li><a href="APR_command_arguments.html#apr_getopt_t-skip_end">skip_end</a>
  <li><a href="APR_command_arguments.html#apr_getopt_t-skip_start">skip_start</a>
  </ul>
  
  </b>
  <hr size="4">
    <a name="apr_getopt_option_t"></a>
    <h1>struct apr_getopt_option_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_getopt.h</td></tr></tr>
  </table>
  <p>
  Structure used to describe options that getopt should search for.<h2>Member Index</h2>
  <ul><li><a href="APR_command_arguments.html#apr_getopt_option_t-has_arg">    int has_arg</a>
  	<li><a href="APR_command_arguments.html#apr_getopt_option_t-name">    const char *name</a>
  	<li><a href="APR_command_arguments.html#apr_getopt_option_t-optch">    int optch</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="has_arg"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int has_arg;</b>
  <dd>
  nonzero if option takes an argument
  <p><dl>
  </dl></dl>
  
    <a name="name"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    const char *name;</b>
  <dd>
  long option name, or NULL if option has no long name
  <p><dl>
  </dl></dl>
  
    <a name="optch"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int optch;</b>
  <dd>
  option letter, or a value greater than 255 if option has no letter
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="apr_getopt_t"></a>
    <h1>struct apr_getopt_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_getopt.h</td></tr></tr>
  </table>
  <p>
  Structure to store command line argument information.<h2>Member Index</h2>
  <ul><li><a href="APR_command_arguments.html#apr_getopt_t-argc">    int argc</a>
  	<li><a href="APR_command_arguments.html#apr_getopt_t-argv">    const char **argv</a>
  	<li><a href="APR_command_arguments.html#apr_getopt_t-cont">    apr_pool_t *cont</a>
  	<li><a href="APR_command_arguments.html#apr_getopt_t-err">    int err</a>
  	<li><a href="APR_command_arguments.html#apr_getopt_t-ind">    int ind</a>
  	<li><a href="APR_command_arguments.html#apr_getopt_t-interleave">    int interleave</a>
  	<li><a href="APR_command_arguments.html#apr_getopt_t-opt">    int opt</a>
  	<li><a href="APR_command_arguments.html#apr_getopt_t-place">    char const* place</a>
  	<li><a href="APR_command_arguments.html#apr_getopt_t-reset">    int reset</a>
  	<li><a href="APR_command_arguments.html#apr_getopt_t-skip_end">    int skip_end</a>
  	<li><a href="APR_command_arguments.html#apr_getopt_t-skip_start">    int skip_start</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="argc"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int argc;</b>
  <dd>
  count of arguments
  <p><dl>
  </dl></dl>
  
    <a name="argv"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    const char **argv;</b>
  <dd>
  array of pointers to arguments
  <p><dl>
  </dl></dl>
  
    <a name="cont"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_pool_t *cont;</b>
  <dd>
  context for processing
  <p><dl>
  </dl></dl>
  
    <a name="err"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int err;</b>
  <dd>
  if error message should be printed
  <p><dl>
  </dl></dl>
  
    <a name="ind"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int ind;</b>
  <dd>
  index into parent argv vector
  <p><dl>
  </dl></dl>
  
    <a name="interleave"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int interleave;</b>
  <dd>
  set to nonzero to support interleaving options with regular args
  <p><dl>
  </dl></dl>
  
    <a name="opt"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int opt;</b>
  <dd>
  character checked for validity
  <p><dl>
  </dl></dl>
  
    <a name="place"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    char const* place;</b>
  <dd>
  argument associated with option
  <p><dl>
  </dl></dl>
  
    <a name="reset"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int reset;</b>
  <dd>
  reset getopt
  <p><dl>
  </dl></dl>
  
    <a name="skip_end"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int skip_end;</b>
  <dd>
  end of non-option arguments skipped for interleaving
  <p><dl>
  </dl></dl>
  
    <a name="skip_start"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int skip_start;</b>
  <dd>
  start of non-option arguments skipped for interleaving
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="apr_status_t-54"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_getopt_init(apr_getopt_t **os, apr_pool_t *cont,int argc, char *const *argv);</b>
    <dd>
  Initialize the arguments for parsing by apr_getopt().
  <p><img src="../images//tip.gif"> Arguments 2 and 3 are most commonly argc and argv from main(argc, argv)
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	os</th><td>The options structure created for apr_getopt()
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to operate on
  </td></tr>
  <tr valign=top><th align=right>
  	argc</th><td>The number of arguments to parse
  </td></tr>
  <tr valign=top><th align=right>
  	argv</th><td>The array of arguments to parse</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-55"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_getopt(apr_getopt_t *os, const char *opts, char *optch, const char **optarg);</b>
    <dd>
  Parse the options initialized by apr_getopt_init().
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	os</th><td>The apr_opt_t structure returned by apr_getopt_init()
  </td></tr>
  <tr valign=top><th align=right>
  	opts</th><td>A string of characters that are acceptable options to the 
                program.  Characters followed by ":" are required to have an 
                option associated
  </td></tr>
  <tr valign=top><th align=right>
  	optch</th><td>The next option character parsed
  </td></tr>
  <tr valign=top><th align=right>
  	optarg</th><td>The argument following the option character:</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>There are four potential status values on exit. They are:
  &lt;PRE&gt;
              APR_EOF      --  No more options to parse
              APR_BADCH    --  Found a bad option character
              APR_BADARG   --  No argument followed @parameter:
              APR_SUCCESS  --  The next option was found.
  &lt;/PRE&gt;<p></dl></dl>
  
  <a name="apr_status_t-56"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_getopt_long(apr_getopt_t *os, const apr_getopt_option_t *opts, int *optch, const char **optarg);</b>
    <dd>
  Parse the options initialized by apr_getopt_init(), accepting long
  options beginning with "--" in addition to single-character
  options beginning with "-".
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	os</th><td>The apr_getopt_t structure created by apr_getopt_init()
  </td></tr>
  <tr valign=top><th align=right>
  	opts</th><td>A pointer to a list of apr_getopt_option_t structures, which
                can be initialized with { "name", optch, has_args }.  has_args
                is nonzero if the option requires an argument.  A structure
                with an optch value of 0 terminates the list.
  </td></tr>
  <tr valign=top><th align=right>
  	optch</th><td>Receives the value of "optch" from the apr_getopt_option_t
                structure corresponding to the next option matched.
  </td></tr>
  <tr valign=top><th align=right>
  	optarg</th><td>Receives the argument following the option, if any.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>There are four potential status values on exit.   They are:
  &lt;PRE&gt;
              APR_EOF      --  No more options to parse
              APR_BADCH    --  Found a bad option character
              APR_BADARG   --  No argument followed @parameter:
              APR_SUCCESS  --  The next option was found.
  &lt;/PRE&gt;
  When APR_SUCCESS is returned, os-&gt;ind gives the index of the first
  non-option argument.  On error, a message will be printed to stdout unless
  os-&gt;err is set to 0.  If os-&gt;interleave is set to nonzero, options can come
  after arguments, and os-&gt;argv will be permuted to leave non-option arguments
  at the end (the original argv is unaffected).<p></dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/APR_general-purpose_library.html
  
  Index: APR_general-purpose_library.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- APR general-purpose library</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: APR general-purpose library</h2>
    <b>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="APR_general-purpose_library.html#apr_vformatter_buff_t">struct apr_vformatter_buff_t</h3></a>
    <ul>
  <li><a href="APR_general-purpose_library.html#apr_vformatter_buff_t-curpos">curpos</a>
  <li><a href="APR_general-purpose_library.html#apr_vformatter_buff_t-endpos">endpos</a>
  </ul>
  
  </b>
  <hr size="4">
    <a name="apr_vformatter_buff_t"></a>
    <h1>struct apr_vformatter_buff_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_lib.h</td></tr></tr>
  </table>
  <p>
  Structure used by the variable-formatter routines.<h2>Member Index</h2>
  <ul><li><a href="APR_general-purpose_library.html#apr_vformatter_buff_t-curpos">    char *curpos</a>
  	<li><a href="APR_general-purpose_library.html#apr_vformatter_buff_t-endpos">    char *endpos</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="curpos"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    char *curpos;</b>
  <dd>
  The current position
  <p><dl>
  </dl></dl>
  
    <a name="endpos"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    char *endpos;</b>
  <dd>
  The end position of the format string
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="apr_status_t-57"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_password_validate(const char *passwd, const char *hash);</b>
    <dd>
  Validate any password encypted with any algorithm that APR understands
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	passwd</th><td>The password to validate
  </td></tr>
  <tr valign=top><th align=right>
  	hash</th><td>The password to validate against</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-58"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_password_get(const char *prompt, char *pwbuf, size_t *bufsize);</b>
    <dd>
  Display a prompt and read in the password from stdin.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	prompt</th><td>The prompt to display
  </td></tr>
  <tr valign=top><th align=right>
  	pwbuf</th><td>Buffer to store the password
  </td></tr>
  <tr valign=top><th align=right>
  	bufsize</th><td>The length of the password buffer.</td></tr>
  </table>
    </dl></dl>
  
  <a name="const-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>const char * apr_filename_of_pathname(const char *pathname);</b>
    <dd>
  return the final element of the pathname
  <p><img src="../images//tip.gif"> Examples:  
  &lt;PRE&gt;
                  "/foo/bar/gum"   -&gt; "gum"
                  "/foo/bar/gum/"  -&gt; ""
                  "gum"            -&gt; "gum"
                  "wi\\n32\\stuff" -&gt; "stuff"
  &lt;/PRE&gt;
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	pathname</th><td>The path to get the final element of</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>the final element of the path<p></dl></dl>
  
  <a name="int-5"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_vformatter(int (*flush_func)(apr_vformatter_buff_t *b), apr_vformatter_buff_t *c, const char *fmt, va_list ap);</b>
    <dd>
  apr_vformatter() is a generic printf-style formatting routine
  with some extensions.
  <p><img src="../images//tip.gif"> &lt;PRE&gt;
  The extensions are:
  %pA  takes a struct in_addr *, and prints it as a.b.c.d
  %pI  takes an apr_sockaddr_t * and prints it as a.b.c.d:port or
       [ipv6-address]:port
  %pp  takes a void * and outputs it in hex
  The %p hacks are to force gcc's printf warning code to skip
  over a pointer argument without complaining.  This does
  mean that the ANSI-style %p (output a void * in hex format) won't
  work as expected at all, but that seems to be a fair trade-off
  for the increased robustness of having printf-warnings work.
  Additionally, apr_vformatter allows for arbitrary output methods
  using the apr_vformatter_buff and flush_func.
  The apr_vformatter_buff has two elements curpos and endpos.
  curpos is where apr_vformatter will write the next byte of output.
  It proceeds writing output to curpos, and updating curpos, until
  either the end of output is reached, or curpos == endpos (i.e. the
  buffer is full).
  If the end of output is reached, apr_vformatter returns the
  number of bytes written.
  When the buffer is full, the flush_func is called.  The flush_func
  can return -1 to indicate that no further output should be attempted,
  and apr_vformatter will return immediately with -1.  Otherwise
  the flush_func should flush the buffer in whatever manner is
  appropriate, re apr_pool_t nitialize curpos and endpos, and return 0.
  Note that flush_func is only invoked as a result of attempting to
  write another byte at curpos when curpos &gt;= endpos.  So for
  example, it's possible when the output exactly matches the buffer
  space available that curpos == endpos will be true when
  apr_vformatter returns.
  apr_vformatter does not call out to any other code, it is entirely
  self-contained.  This allows the callers to do things which are
  otherwise "unsafe".  For example, apr_psprintf uses the "scratch"
  space at the unallocated end of a block, and doesn't actually
  complete the allocation until apr_vformatter returns.  apr_psprintf
  would be completely broken if apr_vformatter were to call anything
  that used a apr_pool_t.  Similarly http_bprintf() uses the "scratch"
  space at the end of its output buffer, and doesn't actually note
  that the space is in use until it either has to flush the buffer
  or until apr_vformatter returns.
  &lt;/PRE&gt;
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	flush_func</th><td>The function to call when the buffer is full
  </td></tr>
  <tr valign=top><th align=right>
  	c</th><td>The buffer to write to
  </td></tr>
  <tr valign=top><th align=right>
  	fmt</th><td>The format string
  </td></tr>
  <tr valign=top><th align=right>
  	ap</th><td>The arguments to use to fill out the format string.</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/APR_lock_library.html
  
  Index: APR_lock_library.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- APR lock library</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: APR lock library</h2>
    <b>
  
  </b>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="-5"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  <p><img src="../images//tip.gif">  If the lock is currently active when it is destroyed, it 
        will be unlocked first.
  <p><dl>
  </dl></dl>
  
  <a name="apr_status_t-59"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_lock_create(apr_lock_t **lock, apr_locktype_e type, apr_lockscope_e scope, const char *fname, apr_pool_t *cont);</b>
    <dd>
  Create a new instance of a lock structure.
  <p><img src="../images//tip.gif"> APR_CROSS_PROCESS may lock both processes and threads, but it is
       only guaranteed to lock processes.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	lock</th><td>The newly created lock structure.
  </td></tr>
  <tr valign=top><th align=right>
  	type</th><td>The type of lock to create, one of:
  &lt;PRE&gt;
             APR_MUTEX
             APR_READWRITE
  &lt;/PRE&gt;
  </td></tr>
  <tr valign=top><th align=right>
  	scope</th><td>The scope of the lock to create, one of:
  &lt;PRE&gt;
             APR_CROSS_PROCESS    lock processes from the protected area.
             APR_INTRAPROCESS     lock threads from the protected area.
             APR_LOCKALL          lock processes and threads from the
                                  protected area.
  &lt;/PRE&gt;
  </td></tr>
  <tr valign=top><th align=right>
  	fname</th><td>A file name to use if the lock mechanism requires one.  This
         argument should always be provided.  The lock code itself will
         determine if it should be used.
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to operate on.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-60"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_lock_acquire(apr_lock_t *lock);</b>
    <dd>
  Lock a protected region.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	lock</th><td>The lock to set.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-61"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_lock_release(apr_lock_t *lock);</b>
    <dd>
  Unlock a protected region.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	lock</th><td>The lock to reset.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-62"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_lock_destroy(apr_lock_t *lock);</b>
    <dd>
  Free the memory associated with a lock.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	lock</th><td>The lock to free.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-63"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_lock_child_init(apr_lock_t **lock, const char *fname, apr_pool_t *cont);</b>
    <dd>
  Re-open a lock in a child process.
  <p><img src="../images//tip.gif"> This function doesn't always do something, it depends on the
       locking mechanism chosen for the platform, but it is a good
       idea to call it regardless, because it makes the code more
       portable.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	lock</th><td>The newly re-opened lock structure.
  </td></tr>
  <tr valign=top><th align=right>
  	fname</th><td>A file name to use if the lock mechanism requires one.  This
               argument should always be provided.  The lock code itself will
               determine if it should be used.  This filename should be the 
               same one that was passed to apr_lock_create
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to operate on.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-64"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_lock_data_get(apr_lock_t *lock, const char *key, void *data);</b>
    <dd>
  Return the pool associated with the current lock.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	lock</th><td>The currently open lock.
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key to use when retreiving data associated with this lock
  </td></tr>
  <tr valign=top><th align=right>
  	data</th><td>The user data associated with the lock.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-65"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_lock_data_set(apr_lock_t *lock, void *data, const char *key, apr_status_t (*cleanup)(void *));</b>
    <dd>
  Return the pool associated with the current lock.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	lock</th><td>The currently open lock.
  </td></tr>
  <tr valign=top><th align=right>
  	data</th><td>The user data to associate with the lock.
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key to use when associating data with this lock
  </td></tr>
  <tr valign=top><th align=right>
  	cleanup</th><td>The cleanup to use when the lock is destroyed.</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/APR_portability_Routines.html
  
  Index: APR_portability_Routines.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- APR portability Routines</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: APR portability Routines</h2>
    <b>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="APR_portability_Routines.html#apr_os_sock_info_t">struct apr_os_sock_info_t</h3></a>
    <ul>
  </ul>
  
  </b>
  <hr size="4">
    <a name="apr_os_sock_info_t"></a>
    <h1>struct apr_os_sock_info_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_portable.h</td></tr></tr>
  </table>
  <p>
  everything APR needs to know about an active socket to construct
  an APR socket from it; currently, this is platform-independent<h2>Global Functions</h2>
    <blockquote>
  
  <a name="-34"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  <p><img src="../images//tip.gif"> On Unix, it is only possible to get a file descriptor from 
       an apr file type.
  <p><dl>
  </dl></dl>
  
  <a name="-35"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  <p><img src="../images//tip.gif"> On Unix, it is only possible to put a file descriptor into
       an apr file type.
  <p><dl>
  </dl></dl>
  
  <a name="-36"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  <p><img src="../images//tip.gif"> If you only know the descriptor/handle or if it isn't really
       a true socket, use apr_os_sock_put() instead.
  <p><dl>
  </dl></dl>
  
  <a name="apr_status_t-109"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_os_file_get(apr_os_file_t *thefile, apr_file_t *file);</b>
    <dd>
  convert the file from apr type to os specific type.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thefile</th><td>The os specific file we are converting to
  </td></tr>
  <tr valign=top><th align=right>
  	file</th><td>The apr file to convert.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-110"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_os_dir_get(apr_os_dir_t **thedir, apr_dir_t *dir);</b>
    <dd>
  convert the dir from apr type to os specific type.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thedir</th><td>The os specific dir we are converting to
  </td></tr>
  <tr valign=top><th align=right>
  	dir</th><td>The apr dir to convert.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-111"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_os_sock_get(apr_os_sock_t *thesock, apr_socket_t *sock);</b>
    <dd>
  Convert the socket from an apr type to an OS specific socket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thesock</th><td>The socket to convert.
  </td></tr>
  <tr valign=top><th align=right>
  	sock</th><td>The os specifc equivelant of the apr socket..</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-112"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_os_lock_get(apr_os_lock_t *oslock, apr_lock_t *lock);</b>
    <dd>
  Convert the lock from os specific type to apr type
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	oslock</th><td>The os specific lock we are converting to.
  </td></tr>
  <tr valign=top><th align=right>
  	lock</th><td>The apr lock to convert.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-113"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_os_exp_time_get(apr_os_exp_time_t **ostime, apr_exploded_time_t *aprtime);</b>
    <dd>
  Get the exploded time in the platforms native format.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ostime</th><td>the native time format
  </td></tr>
  <tr valign=top><th align=right>
  	aprtime</th><td>the time to convert</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-114"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_os_imp_time_get(apr_os_imp_time_t **ostime, apr_time_t *aprtime);</b>
    <dd>
  Get the imploded time in the platforms native format.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ostime</th><td>the native time format
  </td></tr>
  <tr valign=top><th align=right>
  	aprtimethe</th><td>time to convert</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-115"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_os_thread_get(apr_os_thread_t **thethd, apr_thread_t *thd);</b>
    <dd>
  convert the thread to os specific type from apr type.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thethd</th><td>The apr thread to convert
  </td></tr>
  <tr valign=top><th align=right>
  	thd</th><td>The os specific thread we are converting to</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-116"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_os_threadkey_get(apr_os_threadkey_t *thekey, apr_threadkey_t *key);</b>
    <dd>
  convert the thread private memory key to os specific type from an apr type.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thekey</th><td>The apr handle we are converting from.
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The os specific handle we are converting to.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-117"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_os_file_put(apr_file_t **file, apr_os_file_t *thefile, apr_pool_t *cont);</b>
    <dd>
  convert the file from os specific type to apr type.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	file</th><td>The apr file we are converting to.
  </td></tr>
  <tr valign=top><th align=right>
  	thefile</th><td>The os specific file to convert
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to use if it is needed.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-118"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_os_dir_put(apr_dir_t **dir, apr_os_dir_t *thedir, apr_pool_t *cont);</b>
    <dd>
  convert the dir from os specific type to apr type.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	dir</th><td>The apr dir we are converting to.
  </td></tr>
  <tr valign=top><th align=right>
  	thedir</th><td>The os specific dir to convert
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to use when creating to apr directory.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-119"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_os_sock_put(apr_socket_t **sock, apr_os_sock_t *thesock, apr_pool_t *cont);</b>
    <dd>
  Convert a socket from the os specific type to the apr type
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	sock</th><td>The pool to use.
  </td></tr>
  <tr valign=top><th align=right>
  	thesock</th><td>The socket to convert to.
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The socket we are converting to an apr type.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-120"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_os_sock_make(apr_socket_t **apr_sock, apr_os_sock_info_t *os_sock_info, apr_pool_t *cont);</b>
    <dd>
  Create a socket from an existing descriptor and local and remote
  socket addresses.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	apr_sock</th><td>The new socket that has been set up
  </td></tr>
  <tr valign=top><th align=right>
  	os_sock_info</th><td>The os representation of the socket handle and
         other characteristics of the socket
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to use</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-121"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_os_lock_put(apr_lock_t **lock, apr_os_lock_t *thelock, apr_pool_t *cont);</b>
    <dd>
  Convert the lock from os specific type to apr type
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	lock</th><td>The apr lock we are converting to.
  </td></tr>
  <tr valign=top><th align=right>
  	thelock</th><td>The os specific lock to convert.
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to use if it is needed.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-122"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_os_imp_time_put(apr_time_t *aprtime, apr_os_imp_time_t **ostime, apr_pool_t *cont);</b>
    <dd>
  Put the imploded time in the APR format.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	aprtime</th><td>the APR time format
  </td></tr>
  <tr valign=top><th align=right>
  	ostime</th><td>the time to convert
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>the pool to use if necessary</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-123"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_os_exp_time_put(apr_exploded_time_t *aprtime, apr_os_exp_time_t **ostime, apr_pool_t *cont);</b>
    <dd>
  Put the exploded time in the APR format.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	aprtime</th><td>the APR time format
  </td></tr>
  <tr valign=top><th align=right>
  	ostime</th><td>the time to convert
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>the pool to use if necessary</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-124"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_os_thread_put(apr_thread_t **thd, apr_os_thread_t *thethd,;</b>
    <dd>
  convert the thread from os specific type to apr type.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thd</th><td>The apr thread we are converting to.
  </td></tr>
  <tr valign=top><th align=right>
  	thethd</th><td>The os specific thread to convert
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to use if it is needed.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-125"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_os_threadkey_put(apr_threadkey_t **key, apr_os_threadkey_t *thekey, apr_pool_t *cont);</b>
    <dd>
  convert the thread private memory key from os specific type to apr type.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	key</th><td>The apr handle we are converting to.
  </td></tr>
  <tr valign=top><th align=right>
  	thekey</th><td>The os specific handle to convert
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to use if it is needed.</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/APR_signal_handling.html
  
  Index: APR_signal_handling.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- APR signal handling</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: APR signal handling</h2>
    <b>
  
  </b>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="apr_signal_init(apr_pool_t"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_signal_init(apr_pool_t *pglobal);</b>
    <dd>
  APR-private function for initializing the signal package
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	pglobal</th><td>The internal, global pool</td></tr>
  </table>
    </dl></dl>
  
  <a name="const-3"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>const char *apr_signal_get_description(int signum);</b>
    <dd>
  Get the description for a specific signal number
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	signum</th><td>The signal number</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The description of the signal<p></dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/APR_strings_library.html
  
  Index: APR_strings_library.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- APR strings library</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: APR strings library</h2>
    <b>
  
  </b>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="apr_status_t-133"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_tokenize_to_argv(const char *arg_str, char ***argv_out, apr_pool_t *token_context);;</b>
    <dd>
  Convert the arguments to a program from one string to an array of 
  strings term inated by a NULL
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	str</th><td>The arguments to convert
  </td></tr>
  <tr valign=top><th align=right>
  	argv_out</th><td>Output location.  This is a pointer to an array of strings.
  </td></tr>
  <tr valign=top><th align=right>
  	token_context</th><td>Pool to use.</td></tr>
  </table>
    </dl></dl>
  
  <a name="char-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>char *apr_pstrdup(apr_pool_t *p, const char *s);</b>
    <dd>
  duplicate a string into memory allocated out of a pool
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate out of
  </td></tr>
  <tr valign=top><th align=right>
  	s</th><td>The string to duplicate</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new string<p></dl></dl>
  
  <a name="char-3"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>char *apr_pstrndup(apr_pool_t *p, const char *s, apr_size_t n);</b>
    <dd>
  duplicate the first n characters of a string into memory allocated 
  out of a pool; the new string will be '\0'-terminated
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate out of
  </td></tr>
  <tr valign=top><th align=right>
  	s</th><td>The string to duplicate
  </td></tr>
  <tr valign=top><th align=right>
  	n</th><td>The number of characters to duplicate</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new string<p></dl></dl>
  
  <a name="char-4"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>char *apr_pstrcat(apr_pool_t *p, ...);</b>
    <dd>
  Concatenate multiple strings, allocating memory out a pool
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate out of
  ... The strings to concatenate.  The final string must be NULL</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new string<p></dl></dl>
  
  <a name="char-5"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>char *apr_pvsprintf(apr_pool_t *p, const char *fmt, va_list ap);</b>
    <dd>
  printf-style style printing routine.  The data is output to a string 
  allocated from a pool
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate out of
  </td></tr>
  <tr valign=top><th align=right>
  	fmt</th><td>The format of the string
  </td></tr>
  <tr valign=top><th align=right>
  	ap</th><td>The arguments to use while printing the data</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new string<p></dl></dl>
  
  <a name="char-6"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>char *apr_psprintf(apr_pool_t *p, const char *fmt, ...);</b>
    <dd>
  printf-style style printing routine.  The data is output to a string 
  allocated from a pool
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate out of
  </td></tr>
  <tr valign=top><th align=right>
  	fmt</th><td>The format of the string
  ... The arguments to use while printing the data</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new string<p></dl></dl>
  
  <a name="char-7"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>char *apr_cpystrn(char *dst, const char *src, size_t dst_size);</b>
    <dd>
  copy n characters from src to des&gt;
  <p><img src="../images//tip.gif">  
  &lt;PRE&gt;
  We re-implement this function to implement these specific changes:
        1) strncpy() doesn't always null terminate and we want it to.
        2) strncpy() null fills, which is bogus, esp. when copy 8byte strings
           into 8k blocks.
        3) Instead of returning the pointer to the beginning of the
           destination string, we return a pointer to the terminating '\0'
           to allow us to check for truncation.
  &lt;/PRE&gt;
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	dst</th><td>The destination string
  </td></tr>
  <tr valign=top><th align=right>
  	src</th><td>The source string
  </td></tr>
  <tr valign=top><th align=right>
  	dst_size</th><td>The number of characters to copy</td></tr>
  </table>
    </dl></dl>
  
  <a name="char-8"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>char *apr_collapse_spaces(char *dest, const char *src);</b>
    <dd>
  Strip spaces from a string
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	dest</th><td>The destination string.  It is okay to modify the string
              in place.  Namely dest == src
  </td></tr>
  <tr valign=top><th align=right>
  	src</th><td>The string to rid the spaces from.</td></tr>
  </table>
    </dl></dl>
  
  <a name="int-6"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_strnatcmp(char const *a, char const *b);</b>
    <dd>
  Do a natural order comparison of two strings.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	a</th><td>The first string to compare
  </td></tr>
  <tr valign=top><th align=right>
  	b</th><td>The second string to compare</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>Either &lt;0, 0, or &gt;0.  If the first string is less than the second
           this returns &lt;0, if they are equivalent it returns 0, and if the
           first string is greater than second string it retuns &gt;0.<p></dl></dl>
  
  <a name="int-7"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_strnatcasecmp(char const *a, char const *b);</b>
    <dd>
  Do a natural order comparison of two strings ignoring the case of the 
  strings.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	a</th><td>The first string to compare
  </td></tr>
  <tr valign=top><th align=right>
  	b</th><td>The second string to compare</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>Either &lt;0, 0, or &gt;0.  If the first string is less than the second
          this returns &lt;0, if they are equivalent it returns 0, and if the
          first string is greater than second string it retuns &gt;0.<p></dl></dl>
  
  <a name="int-8"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_snprintf(char *buf, size_t len, const char *format, ...);</b>
    <dd>
  snprintf routine based on apr_vformatter.  This means it understands the
  same extensions.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	buf</th><td>The buffer to write to
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>The size of the buffer
  </td></tr>
  <tr valign=top><th align=right>
  	format</th><td>The format string
  ... The arguments to use to fill out the format string.</td></tr>
  </table>
    </dl></dl>
  
  <a name="int-9"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_vsnprintf(char *buf, size_t len, const char *format, va_list ap);</b>
    <dd>
  vsnprintf routine based on apr_vformatter.  This means it understands the
  same extensions.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	buf</th><td>The buffer to write to
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>The size of the buffer
  </td></tr>
  <tr valign=top><th align=right>
  	format</th><td>The format string
  </td></tr>
  <tr valign=top><th align=right>
  	ap</th><td>The arguments to use to fill out the format string.</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-8"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void *apr_pmemdup(apr_pool_t *p, const void *m, apr_size_t n);</b>
    <dd>
  Duplicate a block of memory.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate from
  </td></tr>
  <tr valign=top><th align=right>
  	m</th><td>The memory to duplicate
  </td></tr>
  <tr valign=top><th align=right>
  	n</th><td>The number of bytes to duplicate</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new block of memory<p></dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/APR_user_id_services.html
  
  Index: APR_user_id_services.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- APR user id services</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: APR user id services</h2>
    <b>
  
  </b>
  <h2>Global Variables</h2>
    <blockquote>
  
    <a name="apr_gid_t"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_gid_t ;</b>
  <dd>
  Structure for determining group ownership.
  <p><dl>
  </dl></dl>
  
    <a name="apr_uid_t"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_uid_t ;</b>
  <dd>
  Structure for determining user ownership.
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="apr_status_t-173"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_get_user_passwd(char **passwd, const char *username, apr_pool_t *p);;</b>
    <dd>
  Get a password from the system, given a username.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	passwd</th><td>The returned password
  </td></tr>
  <tr valign=top><th align=right>
  	username</th><td>The username to get the password for
  </td></tr>
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate out of.</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/Dynamic_Object_Handling.html
  
  Index: Dynamic_Object_Handling.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- Dynamic Object Handling</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: Dynamic Object Handling</h2>
    <b>
  
  </b>
  <h2>Global Variables</h2>
    <blockquote>
  
    <a name="apr_dso_handle_sym_t"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_dso_handle_sym_t ;</b>
  <dd>
  Structure for referencing symbols from dynamic objects
  <p><dl>
  </dl></dl>
  
    <a name="apr_dso_handle_t"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_dso_handle_t ;</b>
  <dd>
  Structure for referencing dynamic objects
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="apr_status_t"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_dso_load(apr_dso_handle_t **res_handle, const char *path, apr_pool_t *ctx);</b>
    <dd>
  Load a DSO library.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	res_handle</th><td>Location to store new handle for the DSO.
  </td></tr>
  <tr valign=top><th align=right>
  	path</th><td>Path to the DSO library
  </td></tr>
  <tr valign=top><th align=right>
  	ctx</th><td>Pool to use.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_dso_unload(apr_dso_handle_t *handle);</b>
    <dd>
  Close a DSO library.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	handle</th><td>handle to close.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-3"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_dso_sym(apr_dso_handle_sym_t *ressym, apr_dso_handle_t *handle, const char *symname);</b>
    <dd>
  Load a symbol from a DSO handle.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ressym</th><td>Location to store the loaded symbol
  </td></tr>
  <tr valign=top><th align=right>
  	handle</th><td>handle to load the symbol from.
  </td></tr>
  <tr valign=top><th align=right>
  	symname</th><td>Name of the symbol to load.</td></tr>
  </table>
    </dl></dl>
  
  <a name="const"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>const char *apr_dso_error(apr_dso_handle_t *dso, char *buf, apr_size_t bufsize);</b>
    <dd>
  Report more information when a DSO function fails.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	dso</th><td>The dso handle that has been opened
  </td></tr>
  <tr valign=top><th align=right>
  	buf</th><td>Location to store the dso error
  </td></tr>
  <tr valign=top><th align=right>
  	bufsize</th><td>The size of the provided buffer</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/Fnmatch_functions.html
  
  Index: Fnmatch_functions.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- Fnmatch functions</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: Fnmatch functions</h2>
    <b>
  
  </b>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="apr_status_t-50"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_fnmatch(const char *pattern, const char *strings, int flags);</b>
    <dd>
  Try to match the string to the given pattern.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	pattern</th><td>The pattern to match to
  </td></tr>
  <tr valign=top><th align=right>
  	strings</th><td>The string we are trying to match
  </td></tr>
  <tr valign=top><th align=right>
  	flags</th><td>flags to use in the match.  Bitwise OR of:
  &lt;PRE&gt;
               FNM_NOESCAPE       Disable backslash escaping
               FNM_PATHNAME       Slash must be matched by slash
               FNM_PERIOD         Period must be matched by period
               FNM_CASE_BLIND     Compare characters case-insensitively.
  &lt;/PRE&gt;</td></tr>
  </table>
    </dl></dl>
  
  <a name="int-3"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_is_fnmatch(const char *pattern);</b>
    <dd>
  Determine if the given pattern is a regular expression.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	pattern</th><td>The pattern to search for glob characters.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>non-zero if pattern has any glob characters in it<p></dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/General.html
  
  Index: General.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- General</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: General</h2>
    <b>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="General.html#apr_pool_t">struct apr_pool_t</h3></a>
    <ul>
  <li><a href="General.html#apr_pool_t-allocation_list">allocation_list</a>
  <li><a href="General.html#apr_pool_t-first">first</a>
  <li><a href="General.html#apr_pool_t-free_first_avail">free_first_avail</a>
  <li><a href="General.html#apr_pool_t-int">int()</a>
  <li><a href="General.html#apr_pool_t-last">last</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="General.html#apr_pool_t-apr_hash_t">struct apr_hash_t</h3></a>
    <ul>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="General.html#apr_pool_t-apr_pool_t">struct apr_pool_t</h3></a>
    <ul>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="General.html#apr_pool_t-cleanup">struct cleanup</h3></a>
    <ul>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="General.html#apr_pool_t-process_chain">struct process_chain</h3></a>
    <ul>
  </ul>
  
  </b>
  <hr size="4">
    <a name="apr_pool_t"></a>
    <h1>struct apr_pool_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_pools.h</td></tr></tr>
  </table>
  <p>
  @file apr_pools.h
  @brief APR memory allocation
  Resource allocation routines...
  designed so that we don't have to keep track of EVERYTHING so that
  it can be explicitly freed later (a fundamentally unsound strategy ---
  particularly in the presence of die()).
  Instead, we maintain pools, and allocate items (both memory and I/O
  handlers) from the pools --- currently there are two, one for per
  transaction info, and one for config info.  When a transaction is over,
  we can delete everything in the per-transaction apr_pool_t without fear, 
  and without thinking too hard about it either.
   The fundamental pool type The memory allocation structure<h2>Member Index</h2>
  <ul><li><a href="General.html#apr_pool_t-allocation_list">    void *allocation_list</a>
  	<li><a href="General.html#apr_pool_t-first">    union block_hdr *first</a>
  	<li><a href="General.html#apr_pool_t-free_first_avail">    char *free_first_avail</a>
  	<li><a href="General.html#apr_pool_t-int">int(int retcode)</a>
  	<li><a href="General.html#apr_pool_t-last">    union block_hdr *last</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="allocation_list"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    void *allocation_list;</b>
  <dd>
  The allocation list if using malloc
  <p><dl>
  </dl></dl>
  
    <a name="first"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    union block_hdr *first;</b>
  <dd>
  The first block in this pool.
  <p><dl>
  </dl></dl>
  
    <a name="free_first_avail"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    char *free_first_avail;</b>
  <dd>
  The first free byte in this pool
  <p><dl>
  </dl></dl>
  
    <a name="last"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    union block_hdr *last;</b>
  <dd>
  The last block in this pool.
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Class Methods</h2>
  <blockquote>
  
  <a name="apr_pool_t-int"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int(int retcode);</b>
    <dd>
  A function to control how pools behave when they receive ENOMEM
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="apr_pool_t-apr_hash_t"></a>
    <h1>struct apr_hash_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_pools.h</td></tr></tr>
  </table>
  <p>
  A place to hold user data associated with this pool<hr size="4">
    <a name="apr_pool_t-apr_pool_t"></a>
    <h1>struct apr_pool_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_pools.h</td></tr></tr>
  </table>
  <p>
  a list of joined pools<hr size="4">
    <a name="apr_pool_t-cleanup"></a>
    <h1>struct cleanup</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_pools.h</td></tr></tr>
  </table>
  <p>
  The list of cleanups to run on pool cleanup.<hr size="4">
    <a name="apr_pool_t-process_chain"></a>
    <h1>struct process_chain</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_pools.h</td></tr></tr>
  </table>
  <p>
  A list of processes to kill when this pool is cleared<h2>Global Functions</h2>
    <blockquote>
  
  <a name="-16"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(int);</b>
    <dd>
  Determine if pool a is an ancestor of pool b
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	a</th><td>The pool to search
  </td></tr>
  <tr valign=top><th align=right>
  	b</th><td>The pool to search for</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>True if a is an ancestor of b, NULL is considered an ancestor
          of all pools.<p></dl></dl>
  
  <a name="-17"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  Setup all of the internal structures required to use pools
  @remark Programs do NOT need to call this directly.  APR will call this
       automatically from apr_initialize. 
  @internal
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	globalp</th><td>The APR global pool, used to allocate APR structures
                before any other pools are created.  This pool should not
                ever be used outside of APR.</td></tr>
  </table>
    </dl></dl>
  
  <a name="-18"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(void);</b>
    <dd>
  Tear down all of the internal structures required to use pools
  @remark Programs do NOT need to call this directly.  APR will call this
       automatically from apr_terminate. 
  @internal
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	globalp</th><td>The APR global pool, used to allocate APR structures
                before any other pools are created.  This pool should not
                ever be used outside of APR.</td></tr>
  </table>
    </dl></dl>
  
  <a name="-19"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  Create a new pool.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	newcont</th><td>The pool we have just created.
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The parent pool.  If this is NULL, the new pool is a root
         pool.  If it is non-NULL, the new pool will inherit all
         of it's parent pool's attributes, except the apr_pool_t will 
         be a sub-pool.</td></tr>
  </table>
    </dl></dl>
  
  <a name="-20"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  Set the data associated with the current pool
  <p><img src="../images//warning.gif" align=left> The data to be attached to the pool should have a life span
           at least as long as the pool it is being attached to.
       Users of APR must take EXTREME care when choosing a key to
       use for their data.  It is possible to accidentally overwrite
       data by choosing a key that another part of the program is using
       It is advised that steps are taken to ensure that a unique
       key is used at all times.
  <p><img src="../images//bug.gif"> Specify how to ensure this uniqueness!
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The user data associated with the pool.
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key to use for association
  </td></tr>
  <tr valign=top><th align=right>
  	cleanup</th><td>The cleanup program to use to cleanup the data
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The current pool</td></tr>
  </table>
    </dl></dl>
  
  <a name="-21"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  Return the data associated with the current pool.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The user data associated with the pool.
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key for the data to retrieve
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The current pool.</td></tr>
  </table>
    </dl></dl>
  
  <a name="-22"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_pool_t *);</b>
    <dd>
  Make a sub pool from the current pool
  @remark The @a apr_abort function provides a way to quit the program if the
       machine is out of memory.  By default, APR will return on error.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to use as a parent pool
  </td></tr>
  <tr valign=top><th align=right>
  	apr_abort</th><td>A function to use if the pool cannot allocate more memory.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new sub-pool<p></dl></dl>
  
  <a name="-23"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(void);</b>
    <dd>
  Clear all memory in the pool and run all the cleanups. This also clears all
  subpools.
  @remark  This does not actually free the memory, it just allows the pool
        to re-use this memory for the next allocation.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to clear</td></tr>
  </table>
    <dt><b>See Also</b><dd>
    <a href="#apr_pool_destroy()">apr_pool_destroy()</a><p></dl></dl>
  
  <a name="-24"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(void);</b>
    <dd>
  Destroy the pool. This runs apr_pool_clear() and then frees all the memory.
  @remark This will actually free the memory
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to destroy</td></tr>
  </table>
    </dl></dl>
  
  <a name="-25"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_size_t);</b>
    <dd>
  Report the number of bytes currently in the pool
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The number of bytes<p></dl></dl>
  
  <a name="-26"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_size_t);</b>
    <dd>
  Report the number of bytes currently in the list of free blocks
  <p><dl>
  <dt><b>Return Value</b>
    <dd>The number of bytes<p></dl></dl>
  
  <a name="-27"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(void *);</b>
    <dd>
  Allocate a block of memory from a pool
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	c</th><td>The pool to allocate from
  </td></tr>
  <tr valign=top><th align=right>
  	reqsize</th><td>The amount of memory to allocate</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The allocated memory<p></dl></dl>
  
  <a name="-28"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(void *);</b>
    <dd>
  Allocate a block of memory from a pool and set all of the memory to 0
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate from
  </td></tr>
  <tr valign=top><th align=right>
  	size</th><td>The amount of memory to allocate</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The allocated memory<p></dl></dl>
  
  <a name="-29"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(void);</b>
    <dd>
  Register a function to be called when a pool is cleared or destroyed
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool register the cleanup with
  </td></tr>
  <tr valign=top><th align=right>
  	data</th><td>The data to pass to the cleanup function.
  </td></tr>
  <tr valign=top><th align=right>
  	plain_cleanup</th><td>The function to call when the pool is cleared 
                       or destroyed
  </td></tr>
  <tr valign=top><th align=right>
  	child_cleanup</th><td>The function to call when a child process is created -
                       this function is called in the child, obviously!</td></tr>
  </table>
    </dl></dl>
  
  <a name="-30"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(void);</b>
    <dd>
  Remove a previously registered cleanup function
  @remarks For some strange reason only the plain_cleanup is handled by this
           function
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool remove the cleanup from
  </td></tr>
  <tr valign=top><th align=right>
  	data</th><td>The data to remove from cleanup
  </td></tr>
  <tr valign=top><th align=right>
  	cleanup</th><td>The function to remove from cleanup</td></tr>
  </table>
    </dl></dl>
  
  <a name="-31"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  Run the specified cleanup function immediately and unregister it. Use
  @a data instead of the data that was registered with the cleanup.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool remove the cleanup from
  </td></tr>
  <tr valign=top><th align=right>
  	data</th><td>The data to remove from cleanup
  </td></tr>
  <tr valign=top><th align=right>
  	cleanup</th><td>The function to remove from cleanup</td></tr>
  </table>
    </dl></dl>
  
  <a name="-32"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(void);</b>
    <dd>
  Run all of the child_cleanups, so that any unnecessary files are 
  closed because we are about to exec a new program
  <p><dl>
  </dl></dl>
  
  <a name="-33"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  An empty cleanup function
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The data to cleanup</td></tr>
  </table>
    </dl></dl>
  
  <a name="APR_DECLARE(rettype)"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APR_DECLARE(rettype) apr_func(args);;</b>
    <dd>
  @file apr.h
  @brief Basic APR header
   APR_DECLARE_EXPORT is defined when building the APR dynamic library,
  so that all public symbols are exported.
  APR_DECLARE_STATIC is defined when including the APR public headers,
  to provide static linkage when the dynamic library may be unavailable.
  APR_DECLARE_STATIC and APR_DECLARE_EXPORT are left undefined when
  including the APR public headers, to import and link the symbols from the 
  dynamic APR library and assure appropriate indirection and calling 
  conventions at compile time.
   The public APR functions are declared with APR_DECLARE(), so they may
  use the most appropriate calling convention.  Public APR functions with 
  variable arguments must use APR_DECLARE_NONSTD().
  <p><dl>
  </dl></dl>
  
  <a name="APR_DECLARE_DATA"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APR_DECLARE_DATA type apr_variable;;</b>
    <dd>
  The public APR variables are declared with AP_MODULE_DECLARE_DATA.
  This assures the appropriate indirection is invoked at compile time.
  <p><dl>
  </dl></dl>
  
  <a name="APR_DECLARE_NONSTD(rettype)"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APR_DECLARE_NONSTD(rettype) apr_func(args, ...);;</b>
    <dd>
  The public APR functions using variable arguments are declared with 
  AP_DECLARE(), as they must use the C language calling convention.
  <p><dl>
  </dl></dl>
  
  <a name="apr_status_t-4"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t APR_FROM_OS_ERROR(os_err_type syserr);</b>
    <dd>
  Fold a platform specific error into an apr_status_t code.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	syserr</th><td>The platform os error code.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-5"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_get_os_error();</b>
    <dd>
  <p><img src="../images//tip.gif"> Warning: macro implementation; the statcode argument may be evaluated
       multiple times.  If the statcode was not created by apr_get_os_error 
       or APR_FROM_OS_ERROR, the results are undefined.
   Return the last platform error, folded into apr_status_t, on some platforms
  <p><dl>
  </dl></dl>
  
  <a name="apr_status_t-6"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_get_netos_error();</b>
    <dd>
  <p><img src="../images//tip.gif"> This retrieves errno, or calls a GetLastError() style function, and
       folds it with APR_FROM_OS_ERROR.  Some platforms (such as OS2) have no
       such mechanism, so this call may be unsupported.  Some platforms
       require the alternate apr_get_netos_error() to retrieve the last
       socket error.
   Return the last socket error, folded into apr_status_t, on some platforms
  <p><dl>
  </dl></dl>
  
  <a name="char"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>char *apr_strerror(apr_status_t statcode, char *buf, apr_size_t bufsize);</b>
    <dd>
  @file apr_errno.h
  @brief Error Codes
   Type for specifying an error or status code.
   Return a human readable string describing the specified error.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	statcode</th><td>The error code the get a string for.
  </td></tr>
  <tr valign=top><th align=right>
  	buf</th><td>A buffer to hold the error string.
  </td></tr>
  <tr valign=top><th align=right>
  	bufsize</th><td>Size of the buffer to hold the string.</td></tr>
  </table>
    </dl></dl>
  
  <a name="int"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int APR_STATUS_IS_status(apr_status_t statcode);</b>
    <dd>
  <p><img src="../images//tip.gif"> Warning: macro implementation; the statcode argument may be evaluated
       multiple times.  If the statcode was not created by apr_get_os_error
       or APR_FROM_OS_ERROR, the results are undefined.  This macro sets
       errno, or calls a SetLastError() style function, unfolding statcode
       with APR_TO_OS_ERROR.  Some platforms (such as OS2) have no such
       mechanism, so this call may be unsupported.
   APR_OS_START_ERROR is where the APR specific error values start.
   APR_OS_START_STATUS is where the APR specific status codes start.
   APR_OS_START_USEERR are reserved for applications that use APR that
      layer their own error codes along with APR's.
   APR_OS_START_CANONERR is where APR versions of errno values are defined
      on systems which don't have the corresponding errno.
   APR_OS_START_SYSERR folds platform-specific system error values into 
      apr_status_t values.
   &lt;PRE&gt;
  &lt;b&gt;APR ERROR VALUES&lt;/b&gt;
  APR_ENOSTAT     -APR was unable to perform a stat on the file 
  APR_ENOPOOL      APR was not provided a pool with which to allocate memory
  APR_EBADDATE     APR was given an invalid date 
  APR_EINVALSOCK   APR was given an invalid socket
  APR_ENOFILE      APR was not given a file structure
  APR_ENOPROC      APR was not given a process structure
  APR_ENOTIME      APR was not given a time structure
  APR_ENODIR       APR was not given a directory structure
  APR_ENOLOCK      APR was not given a lock structure
  APR_ENOPOLL      APR was not given a poll structure
  APR_ENOSOCKET    APR was not given a socket
  APR_ENOTHREAD    APR was not given a thread structure
  APR_ENOTHDKEY    APR was not given a thread key structure
  APR_ENOSHMAVAIL  There is no more shared memory available
  APR_EDSOOPEN     APR was unable to open the dso object.  For more 
                   information call apr_dso_error().
  APR_EGENERAL    -General failure (specific information not available)
  APR_EBADIP       The specified IP address is invalid
  APR_EBADMASK     The specified netmask is invalid
  &lt;/PRE&gt;
  &lt;PRE&gt;
  &lt;b&gt;APR STATUS VALUES&lt;/b&gt;
  APR_INCHILD        Program is currently executing in the child
  APR_INPARENT       Program is currently executing in the parent
  APR_DETACH         The thread is detached
  APR_NOTDETACH      The thread is not detached
  APR_CHILD_DONE     The child has finished executing
  APR_CHILD_NOTDONE  The child has not finished executing
  APR_TIMEUP         The operation did not finish before the timeout
  APR_INCOMPLETE     The character conversion stopped because of an 
                     incomplete character or shift sequence at the end 
                     of the input buffer.
  APR_BADCH          Getopt found an option not in the option string
  APR_BADARG         Getopt found an option that is missing an argument 
                     and and argument was specified in the option string
  APR_EOF            APR has encountered the end of the file
  APR_NOTFOUND       APR was unable to find the socket in the poll structure
  APR_ANONYMOUS      APR is using anonymous shared memory
  APR_FILEBASED      APR is using a file name as the key to the shared memory
  APR_KEYBASED       APR is using a shared key as the key to the shared memory
  APR_EINIT          Ininitalizer value.  If no option has been found, but 
                     the status variable requires a value, this should be used
  APR_ENOTIMPL       The APR function has not been implemented on this 
                     platform, either because nobody has gotten to it yet, 
                     or the function is impossible on this platform.
  APR_EMISMATCH      Two passwords do not match.
  APR_EABSOLUTE      The given path was absolute.
  APR_ERELATIVE      The given path was relative.
  APR_EINCOMPLETE    The given path was neither relative nor absolute.
  APR_EABOVEROOT     The given path was above the root path.
  &lt;/PRE&gt;
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	status</th><td>The APR_status code to check.
  </td></tr>
  <tr valign=top><th align=right>
  	statcode</th><td>The apr status code to test.</td></tr>
  </table>
    </dl></dl>
  
  <a name="os_err_type"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>os_err_type APR_TO_OS_ERROR(apr_status_t statcode);</b>
    <dd>
  <p><img src="../images//tip.gif"> Warning: macro implementation; the syserr argument may be evaluated
       multiple times.
   Fold an apr_status_t code back to the native platform defined error.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	syserr</th><td>The apr_status_t folded platform os error code.</td></tr>
  </table>
    </dl></dl>
  
  <a name="void"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_set_os_error(apr_status_t statcode);</b>
    <dd>
  <p><img src="../images//tip.gif"> This retrieves errno, h_errno, or calls a GetLastSocketError() style
       function, and folds it with APR_FROM_OS_ERROR.  Some platforms (such
       as OS2) have no such mechanism, so this call may be unsupported.
   Reset the last platform error, unfolded from an apr_status_t, on some platforms
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	statcode</th><td>The OS error folded in a prior call to APR_FROM_OS_ERROR()</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/Hash_Tables.html
  
  Index: Hash_Tables.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- Hash Tables</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: Hash Tables</h2>
    <b>
  
  </b>
  <h2>Global Variables</h2>
    <blockquote>
  
    <a name="apr_hash_index_t"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_hash_index_t ;</b>
  <dd>
  Abstract type for scanning hash tables.
  <p><dl>
  </dl></dl>
  
    <a name="apr_hash_t"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_hash_t ;</b>
  <dd>
  <p><img src="../images//tip.gif"> extern APR_DECLARE_DATA type apr_variable; syntax is required for
  declarations within headers to properly import the variable.
   Abstract type for hash tables.
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="apr_hash_index_t-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_hash_index_t *apr_hash_first(apr_hash_t *ht);</b>
    <dd>
  Start iterating over the entries in a hash table.
  <p><img src="../images//tip.gif"> Example:
  &lt;PRE&gt;<p>
      int sum_values(apr_hash_t *ht)
      {
          apr_hash_index_t *hi;
      void *val;
      int sum = 0;
      for (hi = apr_hash_first(ht); hi; hi = apr_hash_next(hi)) {
          apr_hash_this(hi, NULL, NULL, &val);
          sum += *(int *)val;
      }
      return sum;
      }<p>
  There is no restriction on adding or deleting hash entries during an
  iteration (although the results may be unpredictable unless all you do
  is delete the current entry) and multiple iterations can be in
  progress at the same time.
  &lt;/PRE&gt;
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ht</th><td>The hash table</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>a pointer to the iteration state, or NULL if there are no entries.<p></dl></dl>
  
  <a name="apr_hash_index_t-3"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_hash_index_t *apr_hash_next(apr_hash_index_t *hi);</b>
    <dd>
  Continue iterating over the entries in a hash table.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	hi</th><td>The iteration state</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>a pointer to the updated iteration state.  NULL if there are no more  *         entries.<p></dl></dl>
  
  <a name="apr_hash_t-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_hash_t *apr_hash_make(apr_pool_t *pool);</b>
    <dd>
  Create a hash table.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	pool</th><td>The pool to allocate the hash table out of</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The hash table just created<p></dl></dl>
  
  <a name="int-4"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_hash_count(apr_hash_t *ht);;</b>
    <dd>
  Get the number of key/value pairs in the hash table.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ht</th><td>The hash table</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The number of key/value pairs in the hash table.<p></dl></dl>
  
  <a name="void-3"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_hash_set(apr_hash_t *ht, const void *key, apr_size_t klen, const void *val);</b>
    <dd>
  Associate a value with a key in a hash table.
  <p><img src="../images//tip.gif"> If the value is NULL the hash entry is deleted.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ht</th><td>The hash table
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>Pointer to the key
  </td></tr>
  <tr valign=top><th align=right>
  	klen</th><td>Length of the key. Can be APR_HASH_KEY_STRING to use the string length.
  </td></tr>
  <tr valign=top><th align=right>
  	val</th><td>Value to associate with the key</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-4"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void *apr_hash_get(apr_hash_t *ht, const void *key, apr_size_t klen);</b>
    <dd>
  Look up the value associated with a key in a hash table.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ht</th><td>The hash table
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>Pointer to the key
  </td></tr>
  <tr valign=top><th align=right>
  	klen</th><td>Length of the key. Can be APR_HASH_KEY_STRING to use the string length.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>Returns NULL if the key is not present.<p></dl></dl>
  
  <a name="void-5"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_hash_this(apr_hash_index_t *hi, const void **key, apr_size_t *klen, void **val);;</b>
    <dd>
  Get the current entry's details from the iteration state.
  <p><img src="../images//tip.gif"> The return pointers should point to a variable that will be set to the
       corresponding data, or they may be NULL if the data isn't interesting.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	hi</th><td>The iteration state
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>Return pointer for the pointer to the key.
  </td></tr>
  <tr valign=top><th align=right>
  	klen</th><td>Return pointer for the key length.
  </td></tr>
  <tr valign=top><th align=right>
  	val</th><td>Return pointer for the associated value.</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/Shared_Memory_library.html
  
  Index: Shared_Memory_library.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime] -- Shared Memory library</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: Shared Memory library</h2>
    <b>
  
  </b>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="apr_status_t-126"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_shm_init(apr_shmem_t **m, apr_size_t reqsize, const char *file, apr_pool_t *cont);</b>
    <dd>
  Create a pool of shared memory for use later.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	m</th><td>The shared memory block.
  </td></tr>
  <tr valign=top><th align=right>
  	reqsize</th><td>The size of the shared memory pool.
  </td></tr>
  <tr valign=top><th align=right>
  	file</th><td>The file to use for the shared memory on platforms 
         that require it.
  </td></tr>
  <tr valign=top><th align=right>
  	cont</th><td>The pool to use</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-127"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_shm_destroy(apr_shmem_t *m);</b>
    <dd>
  Destroy the shared memory block.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	m</th><td>The shared memory block to destroy.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-128"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_shm_free(apr_shmem_t *shared, void *entity);</b>
    <dd>
  free shared memory previously allocated.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	shared</th><td>The shared memory block to destroy.
  </td></tr>
  <tr valign=top><th align=right>
  	entity</th><td>The actual data to free.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-129"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_shm_name_get(apr_shmem_t *c, apr_shm_name_t **name);</b>
    <dd>
  Get the name of the shared memory segment if not using anonymous 
  shared memory.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	c</th><td>The shared memory block to destroy.
  </td></tr>
  <tr valign=top><th align=right>
  	name</th><td>The name of the shared memory block, NULL if anonymous 
               shared memory.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>APR_USES_ANONYMOUS_SHM if we are using anonymous shared
          memory.  APR_USES_FILEBASED_SHM if our shared memory is
          based on file access.  APR_USES_KEYBASED_SHM if shared
          memory is based on a key value such as shmctl.  If the
          shared memory is anonymous, the name is NULL.<p></dl></dl>
  
  <a name="apr_status_t-130"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_shm_name_set(apr_shmem_t *c, apr_shm_name_t *name);</b>
    <dd>
  Set the name of the shared memory segment if not using anonymous 
  shared memory.  This is to allow processes to open shared memory 
  created by another process.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	c</th><td>The shared memory block to destroy.
  </td></tr>
  <tr valign=top><th align=right>
  	name</th><td>The name of the shared memory block, NULL if anonymous 
              shared memory.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>APR_USES_ANONYMOUS_SHM if we are using anonymous shared
          memory.  APR_SUCCESS if we are using named shared memory
          and we were able to assign the name correctly.<p></dl></dl>
  
  <a name="apr_status_t-131"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_shm_open(apr_shmem_t *c);</b>
    <dd>
  Open the shared memory block in a child process.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	The</th><td>shared memory block to open in the child.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-132"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_shm_avail(apr_shmem_t *c, apr_size_t *avail);</b>
    <dd>
  Determine how much memory is available in the specified shared memory block
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	c</th><td>The shared memory block to open in the child.
  </td></tr>
  <tr valign=top><th align=right>
  	avail</th><td>The amount of space available in the shared memory block.</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-6"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void *apr_shm_malloc(apr_shmem_t *c, apr_size_t reqsize);</b>
    <dd>
  allocate memory from the block of shared memory.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	c</th><td>The shared memory block to destroy.
  </td></tr>
  <tr valign=top><th align=right>
  	reqsize</th><td>How much memory to allocate</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-7"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void *apr_shm_calloc(apr_shmem_t *shared, apr_size_t size);</b>
    <dd>
  allocate memory from the block of shared memory and initialize it to zero.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	shared</th><td>The shared memory block to destroy.
  </td></tr>
  <tr valign=top><th align=right>
  	size</th><td>How much memory to allocate</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/canonical_filenames.html
  
  Index: canonical_filenames.html
  ===================================================================
  <HTML>
  <HEAD><TITLE>APR Canonical Filenames</TITLE></HEAD>
  <BODY>
  <h1>APR Canonical Filename</h1>
  
  <h2>Requirements</h2>
  
  <p>APR porters need to address the underlying discrepancies between
  file systems.  To achieve a reasonable degree of security, the
  program depending upon APR needs to know that two paths may be
  compared, and that a mismatch is guarenteed to reflect that the
  two paths do not return the same resource</p>.
  
  <p>The first discrepancy is in volume roots.  Unix and pure deriviates
  have only one root path, "/".  Win32 and OS2 share root paths of
  the form "D:/", D: is the volume designation.  However, this can
  be specified as "//./D:/" as well, indicating D: volume of the 
  'this' machine.  Win32 and OS2 also may employ a UNC root path,
  of the form "//server/share/" where share is a share-point of the
  specified network server.  Finally, NetWare root paths are of the
  form "server/volume:/", or the simpler "volume:/" syntax for 'this'
  machine.  All these non-Unix file systems accept volume:path,
  without a slash following the colon, as a path relative to the
  current working directory, which APR will treat as ambigious, that
  is, neither an absolute nor a relative path per se.</p>
  
  <p>The second discrepancy is in the meaning of the 'this' directory.
  In general, 'this' must be eliminated from the path where it occurs.
  The syntax "path/./" and "path/" are both aliases to path.  However,
  this isn't file system independent, since the double slash "//" has
  a special meaning on OS2 and Win32 at the start of the path name,
  and is invalid on those platforms before the "//server/share/" UNC
  root path is completed.  Finally, as noted above, "//./volume/" is
  legal root syntax on WinNT, and perhaps others.</p>
  
  <p>The third discrepancy is in the context of the 'parent' directory.
  When "parent/path/.." occurs, the path must be unwound to "parent".
  It's also critical to simply truncate leading "/../" paths to "/",
  since the parent of the root is root.  This gets tricky on the
  Win32 and OS2 platforms, since the ".." element is invalid before
  the "//server/share/" is complete, and the "//server/share/../"
  seqence is the complete UNC root "//server/share/".  In relative
  paths, leading ".." elements are significant, until they are merged
  with an absolute path.  The relative form must only retain the ".."
  segments as leading segments, to be resolved once merged to another
  relative or an absolute path.</p>
  
  <p>The fourth discrepancy occurs with acceptance of alternate character
  codes for the same element.  Path seperators are not retained within
  the APR canonical forms.  The OS filesystem and APR (slashed) forms
  can both be returned as strings, to be used in the proper context.
  Unix, Win32 and Netware all accept slashes and backslashes as the
  same path seperator symbol, although unix strictly accepts slashes.
  While the APR form of the name strictly uses slashes, always consider
  that there could be a platform that actually accepts slashes as a
  character within a segment name.</p>
  
  <p>The fifth and worst discrepancy plauges Win32, OS2, Netware, and some
  filesystems mounted in Unix.  Case insensitivity can permit the same
  file to slip through in both it's proper case and alternate cases.
  Simply changing the case is insufficient for any character set beyond
  ASCII, since various dilectic forms of characters suffer from one to
  many or many to one translations.  An example would be u-umlaut, which
  might be accepted as a single character u-umlaut, a two character
  sequence u and the zero-width umlaut, the upper case form of the same,
  or perhaps even a captial U alone.  This can be handled in different
  ways depending on the purposes of the APR based program, but the one
  requirement is that the path must be absolute in order to resolve these
  ambiguities.  Methods employed include comparison of device and inode
  file uniqifiers, which is a fairly fast operation, or quering the OS
  for the true form of the name, which can be much slower.  Only the
  acknowledgement of the file names by the OS can validate the equality
  of two different cases of the same filename.</p>
  
  <p>The sixth discrepancy, illegal or insignificant characters, is especially 
  significant in non-unix file systems.  Trailing periods are accepted
  but never stored, therefore trailing periods must be ignored for any
  form of comparison.  And all OS's have certain expectations of what
  characters are illegal (or undesireable due to confusion.)</p>
  
  <p>A final warning, canonical functions don't transform or resolve case
  or character ambiguity issues until they are resolved into an absolute
  path.  The relative canonical path, while useful, while useful for URL
  or similar identifiers, cannot be used for testing or comparison of file 
  system objects.</p>
  
  <hr>
  
  <h2>Canonical API</h2>
  
  Functions to manipulate the apr_canon_file_t (an opaque type) include:
  
  <ul>
  <li>Create canon_file_t (from char* path and canon_file_t parent path)
  <li>Merged canon_file_t (from path and parent, both canon_file_t)
  <li>Get char* path of all or some segments
  <li>Get path flags of IsRelative, IsVirtualRoot, and IsAbsolute
  <li>Compare two canon_file_t structures for file equality
  </ul>
  
  <p>The path is corrected to the file system case only if is in absolute 
  form.  The apr_canon_file_t should be preserved as long as possible and 
  used as the parent to create child entries to reduce the number of expensive 
  stat and case canonicalization calls to the OS.</p>
  
  <p>The comparison operation provides that the APR can postpone correction
  of case by simply relying upon the device and inode for equivilance.  The
  stat implementation provides that two files are the same, while their
  strings are not equivilant, and eliminates the need for the operating
  system to return the proper form of the name.</p>
  
  <p>In any case, returning the char* path, with a flag to request the proper
  case, forces the OS calls to resolve the true names of each segment.  Where
  there is a penality for this operation and the stat device and inode test
  is faster, case correction is postponed until the char* result is requested.
  On platforms that identify the inode, device, or proper name interchangably
  with no penalities, this may occur when the name is initially processed.</p>
  
  <hr>
  
  <h2>Unix Example</h2>
  
  <p>First the simplest case:</p>
  
  <pre>
  Parse Canonical Name 
  accepts parent path as canonical_t
          this path as string
  
  Split this path Segments on '/'
  
  For each of this path Segments
    If first Segment
      If this Segment is Empty ([nothing]/)
        Append this Root Segment (don't merge)
        Continue to next Segment
      Else is relative
        Append parent Segments (to merge)
        Continue with this Segment
    If Segment is '.' or empty (2 slashes)
      Discard this Segment
      Continue with next Segment
    If Segment is '..'
      If no previous Segment or previous Segment is '..'
        Append this Segment
        Continue with next Segment
      If previous Segment and previous is not Root Segment
        Discard previous Segment
      Discard this Segment
      Continue with next Segment
    Append this Relative Segment
    Continue with next Segment        
  </pre>
  
  </BODY>
  </HTML>
  
  
  1.1                  apr-site/docs/apr/index.html
  
  Index: index.html
  ===================================================================
  <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; iso-8859-1">
      <title>[Apache Portable RunTime]</title>
    </head>
    <frameset cols="190,*">
      <frame src="master.html"  name="Master Index" noresize>
      <frame src="packages.html" name="Documentation">
      <noframes>
        <body bgcolor="#FFFFFF" stylesrc="index.html">
          <p>Some Documentation</p>
        </body>
      </noframes>
    </frameset>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/master.html
  
  Index: master.html
  ===================================================================
  <html>
    <head>
      <title>Master Index</title>
    </head>
    <body bgcolor="#FFFFFF" text=#0000ff link=#0020ff vlink=#0020ff>
      <center><img src="../images/ScanDocSmall.jpg" border="0" /></center>
      <p>
      <a href="packages.html" target="Documentation">Master Index</a>
      </p>
      <p>
        <font size="2">
          <nobr>
  <a href="General.html" target="Documentation"><b>General</b></a><br>
    <dir>
  <li><a href="General.html#apr_pool_t" target="Documentation">struct apr_pool_t</a>
  <li><a href="General.html#apr_pool_t-apr_hash_t" target="Documentation">struct apr_hash_t</a>
  <li><a href="General.html#apr_pool_t-apr_pool_t" target="Documentation">struct apr_pool_t</a>
  <li><a href="General.html#apr_pool_t-cleanup" target="Documentation">struct cleanup</a>
  <li><a href="General.html#apr_pool_t-process_chain" target="Documentation">struct process_chain</a>
  <li><a href="General.html#-16" target="Documentation">(int)</a>
  <li><a href="General.html#-17" target="Documentation">(apr_status_t)</a>
  <li><a href="General.html#-18" target="Documentation">(void)</a>
  <li><a href="General.html#-19" target="Documentation">(apr_status_t)</a>
  <li><a href="General.html#-20" target="Documentation">(apr_status_t)</a>
  <li><a href="General.html#-21" target="Documentation">(apr_status_t)</a>
  <li><a href="General.html#-22" target="Documentation">(apr_pool_t *)</a>
  <li><a href="General.html#-23" target="Documentation">(void)</a>
  <li><a href="General.html#-24" target="Documentation">(void)</a>
  <li><a href="General.html#-25" target="Documentation">(apr_size_t)</a>
  <li><a href="General.html#-26" target="Documentation">(apr_size_t)</a>
  <li><a href="General.html#-27" target="Documentation">(void *)</a>
  <li><a href="General.html#-28" target="Documentation">(void *)</a>
  <li><a href="General.html#-29" target="Documentation">(void)</a>
  <li><a href="General.html#-30" target="Documentation">(void)</a>
  <li><a href="General.html#-31" target="Documentation">(apr_status_t)</a>
  <li><a href="General.html#-32" target="Documentation">(void)</a>
  <li><a href="General.html#-33" target="Documentation">(apr_status_t)</a>
  <li><a href="General.html#APR_DECLARE(rettype)" target="Documentation">APR_DECLARE(rettype) apr_func(args);</a>
  <li><a href="General.html#APR_DECLARE_DATA" target="Documentation">APR_DECLARE_DATA type apr_variable;</a>
  <li><a href="General.html#APR_DECLARE_NONSTD(rettype)" target="Documentation">APR_DECLARE_NONSTD(rettype) apr_func(args, ...);</a>
  <li><a href="General.html#apr_status_t-4" target="Documentation">apr_status_t APR_FROM_OS_ERROR(os_err_type syserr)</a>
  <li><a href="General.html#apr_status_t-5" target="Documentation">apr_status_t apr_get_os_error()</a>
  <li><a href="General.html#apr_status_t-6" target="Documentation">apr_status_t apr_get_netos_error()</a>
  <li><a href="General.html#char" target="Documentation">char *apr_strerror(apr_status_t statcode, char *buf, apr_size_t bufsize)</a>
  <li><a href="General.html#int" target="Documentation">int APR_STATUS_IS_status(apr_status_t statcode)</a>
  <li><a href="General.html#os_err_type" target="Documentation">os_err_type APR_TO_OS_ERROR(apr_status_t statcode)</a>
  <li><a href="General.html#void" target="Documentation">void apr_set_os_error(apr_status_t statcode)</a>
  </dir><a href="APR_File_handling.html" target="Documentation"><b>APR File handling</b></a><br>
    <dir>
  <li><a href="APR_File_handling.html#apr_finfo_t" target="Documentation">struct apr_finfo_t</a>
  <li><a href="APR_File_handling.html#apr_finfo_t-apr_file_t" target="Documentation">struct apr_file_t</a>
  <li><a href="APR_File_handling.html#" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_File_handling.html#-2" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_File_handling.html#-3" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_File_handling.html#-4" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_File_handling.html#apr_dev_t" target="Documentation">apr_dev_t </a>
  <li><a href="APR_File_handling.html#apr_dir_t" target="Documentation">apr_dir_t </a>
  <li><a href="APR_File_handling.html#apr_file_t" target="Documentation">apr_file_t </a>
  <li><a href="APR_File_handling.html#apr_fileperms_t" target="Documentation">apr_fileperms_t </a>
  <li><a href="APR_File_handling.html#apr_ino_t" target="Documentation">apr_ino_t </a>
  <li><a href="APR_File_handling.html#apr_pool_t" target="Documentation">apr_pool_t apr_file_pool_get(apr_file_t *f)</a>
  <li><a href="APR_File_handling.html#apr_status_t-10" target="Documentation">apr_status_t apr_dir_close(apr_dir_t *thedir)</a>
  <li><a href="APR_File_handling.html#apr_status_t-11" target="Documentation">apr_status_t apr_dir_read(apr_finfo_t *finfo, apr_int32_t wanted, apr_dir_t *thedir)</a>
  <li><a href="APR_File_handling.html#apr_status_t-12" target="Documentation">apr_status_t apr_dir_rewind(apr_dir_t *thedir)</a>
  <li><a href="APR_File_handling.html#apr_status_t-13" target="Documentation">apr_status_t apr_filepath_root(const char **rootpath, const char **inpath, apr_pool_t *p)</a>
  <li><a href="APR_File_handling.html#apr_status_t-14" target="Documentation">apr_status_t apr_filepath_merge(char **newpath, const char *rootpath, const char *addpath, apr_int32_t flags, apr_pool_t *p)</a>
  <li><a href="APR_File_handling.html#apr_status_t-15" target="Documentation">apr_status_t apr_filepath_get(char **path, apr_pool_t *p)</a>
  <li><a href="APR_File_handling.html#apr_status_t-16" target="Documentation">apr_status_t apr_filepath_get(char **defpath, apr_pool_t *p)</a>
  <li><a href="APR_File_handling.html#apr_status_t-17" target="Documentation">apr_status_t apr_file_open(apr_file_t **new_file, const char *fname, apr_int32_t flag, apr_fileperms_t perm, apr_pool_t *cont)</a>
  <li><a href="APR_File_handling.html#apr_status_t-18" target="Documentation">apr_status_t apr_file_close(apr_file_t *file)</a>
  <li><a href="APR_File_handling.html#apr_status_t-19" target="Documentation">apr_status_t apr_file_remove(const char *path, apr_pool_t *cont)</a>
  <li><a href="APR_File_handling.html#apr_status_t-20" target="Documentation">apr_status_t apr_file_rename(const char *from_path, const char *to_path, apr_pool_t *pool)</a>
  <li><a href="APR_File_handling.html#apr_status_t-21" target="Documentation">apr_status_t apr_file_eof(apr_file_t *fptr)</a>
  <li><a href="APR_File_handling.html#apr_status_t-22" target="Documentation">apr_status_t apr_file_open_stderr(apr_file_t **thefile, apr_pool_t *cont)</a>
  <li><a href="APR_File_handling.html#apr_status_t-23" target="Documentation">apr_status_t apr_file_open_stdout(apr_file_t **thefile, apr_pool_t *cont)</a>
  <li><a href="APR_File_handling.html#apr_status_t-24" target="Documentation">apr_status_t apr_file_read(apr_file_t *thefile, void *buf, apr_size_t *nbytes)</a>
  <li><a href="APR_File_handling.html#apr_status_t-25" target="Documentation">apr_status_t apr_file_write(apr_file_t *thefile, const void *buf, apr_size_t *nbytes)</a>
  <li><a href="APR_File_handling.html#apr_status_t-26" target="Documentation">apr_status_t apr_file_writev(apr_file_t *thefile, const struct iovec *vec, apr_size_t nvec, apr_size_t *nbytes)</a>
  <li><a href="APR_File_handling.html#apr_status_t-27" target="Documentation">apr_status_t apr_file_read_full(apr_file_t *thefile, void *buf, apr_size_t nbytes, apr_size_t *bytes_read)</a>
  <li><a href="APR_File_handling.html#apr_status_t-28" target="Documentation">apr_status_t apr_file_write_full(apr_file_t *thefile, const void *buf, apr_size_t nbytes, apr_size_t *bytes_written)</a>
  <li><a href="APR_File_handling.html#apr_status_t-29" target="Documentation">apr_status_t apr_file_putc(char ch, apr_file_t *thefile)</a>
  <li><a href="APR_File_handling.html#apr_status_t-30" target="Documentation">apr_status_t apr_file_getc(char *ch, apr_file_t *thefile)</a>
  <li><a href="APR_File_handling.html#apr_status_t-31" target="Documentation">apr_status_t apr_file_ungetc(char ch, apr_file_t *thefile)</a>
  <li><a href="APR_File_handling.html#apr_status_t-32" target="Documentation">apr_status_t apr_file_gets(char *str, int len, apr_file_t *thefile)</a>
  <li><a href="APR_File_handling.html#apr_status_t-33" target="Documentation">apr_status_t apr_file_puts(const char *str, apr_file_t *thefile)</a>
  <li><a href="APR_File_handling.html#apr_status_t-34" target="Documentation">apr_status_t apr_file_flush(apr_file_t *thefile)</a>
  <li><a href="APR_File_handling.html#apr_status_t-35" target="Documentation">apr_status_t apr_file_dup(apr_file_t **new_file, apr_file_t *old_file, apr_pool_t *p)</a>
  <li><a href="APR_File_handling.html#apr_status_t-36" target="Documentation">apr_status_t apr_file_seek(apr_file_t *thefile, apr_seek_where_t where, apr_off_t *offset)</a>
  <li><a href="APR_File_handling.html#apr_status_t-37" target="Documentation">apr_status_t apr_file_pipe_create(apr_file_t **in, apr_file_t **out, apr_pool_t *cont)</a>
  <li><a href="APR_File_handling.html#apr_status_t-38" target="Documentation">apr_status_t apr_file_namedpipe_create(const char *filename, apr_fileperms_t perm, apr_pool_t *cont)</a>
  <li><a href="APR_File_handling.html#apr_status_t-39" target="Documentation">apr_status_t apr_file_pipe_timeout_get(apr_file_t *thepipe, apr_interval_time_t *timeout)</a>
  <li><a href="APR_File_handling.html#apr_status_t-40" target="Documentation">apr_status_t apr_file_pipe_timeout_set(apr_file_t *thepipe, apr_interval_time_t timeout)</a>
  <li><a href="APR_File_handling.html#apr_status_t-41" target="Documentation">apr_status_t apr_file_lock(apr_file_t *thefile, int type)</a>
  <li><a href="APR_File_handling.html#apr_status_t-42" target="Documentation">apr_status_t apr_file_unlock(apr_file_t *thefile)</a>
  <li><a href="APR_File_handling.html#apr_status_t-43" target="Documentation">apr_status_t apr_file_name_get(const char **new_path, apr_file_t *thefile)</a>
  <li><a href="APR_File_handling.html#apr_status_t-44" target="Documentation">apr_status_t apr_file_data_get(void **data, const char *key, apr_file_t *file)</a>
  <li><a href="APR_File_handling.html#apr_status_t-45" target="Documentation">apr_status_t apr_file_data_set(apr_file_t *file, void *data, const char *key, apr_status_t (*cleanup)(void *))</a>
  <li><a href="APR_File_handling.html#apr_status_t-46" target="Documentation">apr_status_t apr_file_perms_set(const char *fname, apr_fileperms_t perms)</a>
  <li><a href="APR_File_handling.html#apr_status_t-47" target="Documentation">apr_status_t apr_dir_make(const char *path, apr_fileperms_t perm, apr_pool_t *cont)</a>
  <li><a href="APR_File_handling.html#apr_status_t-48" target="Documentation">apr_status_t apr_dir_remove(const char *path, apr_pool_t *cont)</a>
  <li><a href="APR_File_handling.html#apr_status_t-49" target="Documentation">apr_status_t apr_file_info_get(apr_finfo_t *finfo, apr_int32_t wanted, apr_file_t *thefile)</a>
  <li><a href="APR_File_handling.html#apr_status_t-7" target="Documentation">apr_status_t apr_stat(apr_finfo_t *finfo, const char *fname, apr_int32_t wanted, apr_pool_t *cont)</a>
  <li><a href="APR_File_handling.html#apr_status_t-8" target="Documentation">apr_status_t apr_lstat(apr_finfo_t *finfo, const char *fname, apr_int32_t wanted, apr_pool_t *cont)</a>
  <li><a href="APR_File_handling.html#apr_status_t-9" target="Documentation">apr_status_t apr_dir_open(apr_dir_t **new_dir, const char *dirname, apr_pool_t *cont)</a>
  <li><a href="APR_File_handling.html#int-2" target="Documentation">int apr_file_printf(apr_file_t *fptr, const char *format, ...)</a>
  </dir><a href="APR_I18N_translation_library.html" target="Documentation"><b>APR I18N translation library</b></a><br>
    <dir>
  <li><a href="APR_I18N_translation_library.html#-45" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_I18N_translation_library.html#-46" target="Documentation">(apr_int32_t)</a>
  <li><a href="APR_I18N_translation_library.html#apr_int32_t" target="Documentation">apr_int32_t apr_xlate_conv_byte(apr_xlate_t *convset, unsigned char inchar)</a>
  <li><a href="APR_I18N_translation_library.html#apr_status_t-175" target="Documentation">apr_status_t apr_xlate_open(apr_xlate_t **convset, const char *topage, const char *frompage, apr_pool_t *pool)</a>
  <li><a href="APR_I18N_translation_library.html#apr_status_t-176" target="Documentation">apr_status_t apr_xlate_get_sb(apr_xlate_t *convset, int *onoff)</a>
  <li><a href="APR_I18N_translation_library.html#apr_status_t-177" target="Documentation">apr_status_t apr_xlate_conv_buffer(apr_xlate_t *convset, const char *inbuf, apr_size_t *inbytes_left, char *outbuf, apr_size_t *outbytes_left)</a>
  <li><a href="APR_I18N_translation_library.html#apr_status_t-178" target="Documentation">apr_status_t apr_xlate_conv_char(apr_xlate_t *convset, char inchar, char outchar)</a>
  <li><a href="APR_I18N_translation_library.html#apr_status_t-179" target="Documentation">apr_status_t apr_xlate_close(apr_xlate_t *convset)</a>
  </dir><a href="APR_MD5_Library.html" target="Documentation"><b>APR MD5 Library</b></a><br>
    <dir>
  <li><a href="APR_MD5_Library.html#apr_md5_ctx_t" target="Documentation">struct apr_md5_ctx_t</a>
  <li><a href="APR_MD5_Library.html#apr_status_t-66" target="Documentation">apr_status_t apr_md5_init(apr_md5_ctx_t *context)</a>
  <li><a href="APR_MD5_Library.html#apr_status_t-67" target="Documentation">apr_status_t apr_md5_set_xlate(apr_md5_ctx_t *context, apr_xlate_t *xlate)</a>
  <li><a href="APR_MD5_Library.html#apr_status_t-68" target="Documentation">apr_status_t apr_md5_update(apr_md5_ctx_t *context, const unsigned char *input, unsigned int inputLen)</a>
  <li><a href="APR_MD5_Library.html#apr_status_t-69" target="Documentation">apr_status_t apr_md5_final(unsigned char digest[MD5_DIGESTSIZE], apr_md5_ctx_t *context)</a>
  <li><a href="APR_MD5_Library.html#apr_status_t-70" target="Documentation">apr_status_t apr_md5_encode(const char *password, const char *salt, char *result, size_t nbytes)</a>
  </dir><a href="APR_MMAP_library.html" target="Documentation"><b>APR MMAP library</b></a><br>
    <dir>
  <li><a href="APR_MMAP_library.html#apr_mmap_t" target="Documentation">struct apr_mmap_t</a>
  <li><a href="APR_MMAP_library.html#apr_status_t-71" target="Documentation">apr_status_t apr_mmap_create(apr_mmap_t **newmmap, apr_file_t *file, apr_off_t offset, apr_size_t size, apr_int32_t flag, apr_pool_t *cntxt)</a>
  <li><a href="APR_MMAP_library.html#apr_status_t-72" target="Documentation">apr_status_t apr_mmap_delete(apr_mmap_t *mmap)</a>
  <li><a href="APR_MMAP_library.html#apr_status_t-73" target="Documentation">apr_status_t apr_mmap_offset(void **addr, apr_mmap_t *mmap, apr_off_t offset)</a>
  </dir><a href="APR_Network_library.html" target="Documentation"><b>APR Network library</b></a><br>
    <dir>
  <li><a href="APR_Network_library.html#apr_hdtr_t" target="Documentation">struct apr_hdtr_t</a>
  <li><a href="APR_Network_library.html#apr_ipsubnet_t" target="Documentation">struct apr_ipsubnet_t</a>
  <li><a href="APR_Network_library.html#apr_sockaddr_t" target="Documentation">struct apr_sockaddr_t</a>
  <li><a href="APR_Network_library.html#-10" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_Network_library.html#-11" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_Network_library.html#-12" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_Network_library.html#-13" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_Network_library.html#-14" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_Network_library.html#-15" target="Documentation">(int)</a>
  <li><a href="APR_Network_library.html#-6" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_Network_library.html#-7" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_Network_library.html#-8" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_Network_library.html#-9" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_Network_library.html#apr_socket_accept_filter" target="Documentation">apr_status_t apr_socket_accept_filter(apr_socket_t *sock, char name[16], char args[256 - 16])</a>
  <li><a href="APR_Network_library.html#apr_status_t-100" target="Documentation">apr_status_t apr_poll_socket_add(apr_pollfd_t *aprset, apr_socket_t *sock, apr_int16_t event)</a>
  <li><a href="APR_Network_library.html#apr_status_t-101" target="Documentation">apr_status_t apr_poll_socket_mask(apr_pollfd_t *aprset, apr_socket_t *sock, apr_int16_t events)</a>
  <li><a href="APR_Network_library.html#apr_status_t-102" target="Documentation">apr_status_t apr_poll_socket_remove(apr_pollfd_t *aprset, apr_socket_t *sock)</a>
  <li><a href="APR_Network_library.html#apr_status_t-103" target="Documentation">apr_status_t apr_poll_socket_clear(apr_pollfd_t *aprset, apr_int16_t events)</a>
  <li><a href="APR_Network_library.html#apr_status_t-104" target="Documentation">apr_status_t apr_poll_revents_get(apr_int16_t *event, apr_socket_t *sock, apr_pollfd_t *aprset)</a>
  <li><a href="APR_Network_library.html#apr_status_t-105" target="Documentation">apr_status_t apr_poll_data_get(apr_pollfd_t *pollfd, const char *key, void *data)</a>
  <li><a href="APR_Network_library.html#apr_status_t-106" target="Documentation">apr_status_t apr_poll_data_set(apr_pollfd_t *pollfd, void *data, const char *key, apr_status_t (*cleanup)(void *))</a>
  <li><a href="APR_Network_library.html#apr_status_t-107" target="Documentation">apr_status_t apr_socket_from_file(apr_socket_t **newsock, apr_file_t *file)</a>
  <li><a href="APR_Network_library.html#apr_status_t-108" target="Documentation">apr_status_t apr_getservbyname(apr_sockaddr_t *sockaddr, const char *servname)</a>
  <li><a href="APR_Network_library.html#apr_status_t-74" target="Documentation">apr_status_t apr_socket_create(apr_socket_t **new_sock, int family, int type, apr_pool_t *cont)</a>
  <li><a href="APR_Network_library.html#apr_status_t-75" target="Documentation">apr_status_t apr_shutdown(apr_socket_t *thesocket, apr_shutdown_how_e how)</a>
  <li><a href="APR_Network_library.html#apr_status_t-76" target="Documentation">apr_status_t apr_socket_close(apr_socket_t *thesocket)</a>
  <li><a href="APR_Network_library.html#apr_status_t-77" target="Documentation">apr_status_t apr_bind(apr_socket_t *sock, apr_sockaddr_t *sa)</a>
  <li><a href="APR_Network_library.html#apr_status_t-78" target="Documentation">apr_status_t apr_listen(apr_socket_t *sock, apr_int32_t backlog)</a>
  <li><a href="APR_Network_library.html#apr_status_t-79" target="Documentation">apr_status_t apr_accept(apr_socket_t **new_sock, apr_socket_t *sock, apr_pool_t *connection_pool)</a>
  <li><a href="APR_Network_library.html#apr_status_t-80" target="Documentation">apr_status_t apr_connect(apr_socket_t *sock, apr_sockaddr_t *sa)</a>
  <li><a href="APR_Network_library.html#apr_status_t-81" target="Documentation">apr_status_t apr_sockaddr_info_get(apr_sockaddr_t **sa, const char *hostname, apr_int32_t family, apr_port_t port, apr_int32_t flags, apr_pool_t *p)</a>
  <li><a href="APR_Network_library.html#apr_status_t-82" target="Documentation">apr_status_t apr_getnameinfo(char **hostname, apr_sockaddr_t *sa, apr_int32_t flags)</a>
  <li><a href="APR_Network_library.html#apr_status_t-83" target="Documentation">apr_status_t apr_parse_addr_port(char **addr, char **scope_id, apr_port_t *port, const char *str, apr_pool_t *p)</a>
  <li><a href="APR_Network_library.html#apr_status_t-84" target="Documentation">apr_status_t apr_gethostname(char *buf, int len, apr_pool_t *cont)</a>
  <li><a href="APR_Network_library.html#apr_status_t-85" target="Documentation">apr_status_t apr_socket_data_get(void **data, const char *key, apr_socket_t *sock)</a>
  <li><a href="APR_Network_library.html#apr_status_t-86" target="Documentation">apr_status_t apr_socket_data_set(apr_socket_t *sock, void *data, const char *key, apr_status_t (*cleanup)(void*))</a>
  <li><a href="APR_Network_library.html#apr_status_t-87" target="Documentation">apr_status_t apr_send(apr_socket_t *sock, const char *buf, apr_size_t *len)</a>
  <li><a href="APR_Network_library.html#apr_status_t-88" target="Documentation">apr_status_t apr_sendv(apr_socket_t *sock, const struct iovec *vec, apr_int32_t nvec, apr_size_t *len)</a>
  <li><a href="APR_Network_library.html#apr_status_t-89" target="Documentation">apr_status_t apr_sendfile(apr_socket_t *sock, apr_file_t *file, apr_hdtr_t *hdtr, apr_off_t *offset, apr_size_t *len, apr_int32_t flags)</a>
  <li><a href="APR_Network_library.html#apr_status_t-90" target="Documentation">apr_status_t apr_recv(apr_socket_t *sock, char *buf, apr_size_t *len)</a>
  <li><a href="APR_Network_library.html#apr_status_t-91" target="Documentation">apr_status_t apr_setsocketopt(apr_socket_t *sock, apr_int32_t opt, apr_int32_t on)</a>
  <li><a href="APR_Network_library.html#apr_status_t-92" target="Documentation">apr_status_t apr_getsocketopt(apr_socket_t *sock, apr_int32_t opt, apr_int32_t *on)</a>
  <li><a href="APR_Network_library.html#apr_status_t-93" target="Documentation">apr_status_t apr_socket_addr_get(apr_sockaddr_t **sa, apr_interface_e which, apr_socket_t *sock)</a>
  <li><a href="APR_Network_library.html#apr_status_t-94" target="Documentation">apr_status_t apr_sockaddr_port_set(apr_sockaddr_t *sockaddr, apr_port_t port)</a>
  <li><a href="APR_Network_library.html#apr_status_t-95" target="Documentation">apr_status_t apr_sockaddr_port_get(apr_port_t *port, apr_sockaddr_t *sockaddr)</a>
  <li><a href="APR_Network_library.html#apr_status_t-96" target="Documentation">apr_status_t apr_sockaddr_ip_set(apr_sockaddr_t *sockaddr, const char *addr)</a>
  <li><a href="APR_Network_library.html#apr_status_t-97" target="Documentation">apr_status_t apr_sockaddr_ip_get(char **addr, apr_sockaddr_t *sockaddr)</a>
  <li><a href="APR_Network_library.html#apr_status_t-98" target="Documentation">apr_status_t apr_poll_setup(apr_pollfd_t **new_poll, apr_int32_t num, apr_pool_t *cont)</a>
  <li><a href="APR_Network_library.html#apr_status_t-99" target="Documentation">apr_status_t apr_poll(apr_pollfd_t *aprset, apr_int32_t *nsds, apr_interval_time_t timeout)</a>
  </dir><a href="APR_Process_library.html" target="Documentation"><b>APR Process library</b></a><br>
    <dir>
  <li><a href="APR_Process_library.html#-39" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_Process_library.html#-40" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_Process_library.html#-41" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_Process_library.html#-42" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_Process_library.html#-43" target="Documentation">(void)</a>
  <li><a href="APR_Process_library.html#apr_proc_detach" target="Documentation">apr_status_t apr_proc_detach(void)</a>
  <li><a href="APR_Process_library.html#apr_status_t-149" target="Documentation">apr_status_t apr_procattr_create(apr_procattr_t **new_attr, apr_pool_t *cont)</a>
  <li><a href="APR_Process_library.html#apr_status_t-150" target="Documentation">apr_status_t apr_procattr_io_set(apr_procattr_t *attr, apr_int32_t in, apr_int32_t out, apr_int32_t err)</a>
  <li><a href="APR_Process_library.html#apr_status_t-151" target="Documentation">apr_status_t apr_procattr_child_in_set(struct apr_procattr_t *attr, apr_file_t *child_in, apr_file_t *parent_in)</a>
  <li><a href="APR_Process_library.html#apr_status_t-152" target="Documentation">apr_status_t apr_procattr_child_out_set(struct apr_procattr_t *attr, apr_file_t *child_out, apr_file_t *parent_out)</a>
  <li><a href="APR_Process_library.html#apr_status_t-153" target="Documentation">apr_status_t apr_procattr_child_err_set(struct apr_procattr_t *attr, apr_file_t *child_err, apr_file_t *parent_err)</a>
  <li><a href="APR_Process_library.html#apr_status_t-154" target="Documentation">apr_status_t apr_procattr_dir_set(apr_procattr_t *attr, const char *dir)</a>
  <li><a href="APR_Process_library.html#apr_status_t-155" target="Documentation">apr_status_t apr_procattr_cmdtype_set(apr_procattr_t *attr, apr_cmdtype_e cmd)</a>
  <li><a href="APR_Process_library.html#apr_status_t-156" target="Documentation">apr_status_t apr_procattr_detach_set(apr_procattr_t *attr, apr_int32_t detach)</a>
  <li><a href="APR_Process_library.html#apr_status_t-157" target="Documentation">apr_status_t apr_procattr_limit_set(apr_procattr_t *attr, apr_int32_t what, apr_int32_t what, struct rlimit *limit)</a>
  <li><a href="APR_Process_library.html#apr_status_t-158" target="Documentation">apr_status_t apr_proc_fork(apr_proc_t *proc, apr_pool_t *cont)</a>
  <li><a href="APR_Process_library.html#apr_status_t-159" target="Documentation">apr_status_t apr_proc_create(apr_proc_t *new_proc, const char *progname, const char * const *args, const char * const *env, apr_procattr_t *attr, apr_pool_t *cont)</a>
  <li><a href="APR_Process_library.html#apr_status_t-160" target="Documentation">apr_status_t apr_proc_wait(apr_proc_t *proc, apr_wait_how_e waithow)</a>
  <li><a href="APR_Process_library.html#apr_status_t-161" target="Documentation">apr_status_t apr_proc_wait_all_procs(apr_proc_t *proc, apr_wait_t *status, apr_wait_how_e waithow, apr_pool_t *p)</a>
  <li><a href="APR_Process_library.html#apr_status_t-162" target="Documentation">apr_status_t apr_proc_other_child_read(apr_proc_t *pid, int status);</a>
  <li><a href="APR_Process_library.html#apr_status_t-163" target="Documentation">apr_status_t apr_proc_kill(apr_proc_t *proc, int sig)</a>
  <li><a href="APR_Process_library.html#apr_status_t-164" target="Documentation">apr_status_t apr_setup_signal_thread(void)</a>
  <li><a href="APR_Process_library.html#apr_status_t-165" target="Documentation">apr_status_t apr_create_signal_thread(apr_thread_t **td, apr_threadattr_t *tattr, int (*signal_handler)(int signum), apr_pool_t *p)</a>
  <li><a href="APR_Process_library.html#void-22" target="Documentation">void apr_proc_other_child_register(apr_proc_t *pid, void (*maintenance) (int reason, void *, int status), void *data, apr_file_t *write_fd, apr_pool_t *p)</a>
  <li><a href="APR_Process_library.html#void-23" target="Documentation">void apr_proc_other_child_unregister(void *data)</a>
  <li><a href="APR_Process_library.html#void-24" target="Documentation">void apr_proc_other_child_check();</a>
  <li><a href="APR_Process_library.html#void-25" target="Documentation">void apr_proc_probe_writable_fds()</a>
  <li><a href="APR_Process_library.html#void-26" target="Documentation">void apr_pool_note_subprocess(struct apr_pool_t *a, apr_proc_t *pid, enum kill_conditions how)</a>
  </dir><a href="APR_Random_Functions.html" target="Documentation"><b>APR Random Functions</b></a><br>
    <dir>
  <li><a href="APR_Random_Functions.html#apr_status_t-51" target="Documentation">apr_status_t apr_generate_random_bytes(unsigned char * buf, int length)</a>
  <li><a href="APR_Random_Functions.html#apr_status_t-52" target="Documentation">apr_status_t apr_initialize(void)</a>
  <li><a href="APR_Random_Functions.html#apr_status_t-53" target="Documentation">apr_status_t apr_set_abort(int (*apr_abort)(int retcode), apr_pool_t *cont)</a>
  <li><a href="APR_Random_Functions.html#void-2" target="Documentation">void apr_terminate(void)</a>
  </dir><a href="APR_Table_library.html" target="Documentation"><b>APR Table library</b></a><br>
    <dir>
  <li><a href="APR_Table_library.html#apr_array_header_t" target="Documentation">struct apr_array_header_t</a>
  <li><a href="APR_Table_library.html#apr_table_entry_t" target="Documentation">struct apr_table_entry_t</a>
  <li><a href="APR_Table_library.html#apr_table_t" target="Documentation">struct apr_table_t</a>
  <li><a href="APR_Table_library.html#-37" target="Documentation">(apr_array_header_t *)</a>
  <li><a href="APR_Table_library.html#-38" target="Documentation">(apr_array_header_t *)</a>
  <li><a href="APR_Table_library.html#apr_array_header_t" target="Documentation">apr_array_header_t *apr_table_elts(apr_table_t *t)</a>
  <li><a href="APR_Table_library.html#apr_array_header_t-2" target="Documentation">apr_array_header_t *apr_array_make(struct apr_pool_t *p, int nelts, int elt_size)</a>
  <li><a href="APR_Table_library.html#apr_array_header_t-3" target="Documentation">apr_array_header_t *apr_array_copy(apr_pool_t *p, const apr_array_header_t *arr)</a>
  <li><a href="APR_Table_library.html#apr_array_header_t-4" target="Documentation">apr_array_header_t *apr_array_copy_hdr(apr_pool_t *p, const apr_array_header_t *arr)</a>
  <li><a href="APR_Table_library.html#apr_array_header_t-5" target="Documentation">apr_array_header_t *apr_array_append(apr_pool_t *p, const apr_array_header_t *first, const apr_array_header_t *second)</a>
  <li><a href="APR_Table_library.html#apr_table_t" target="Documentation">apr_table_t *apr_table_make(apr_pool_t *p, int nelts)</a>
  <li><a href="APR_Table_library.html#apr_table_t-2" target="Documentation">apr_table_t *apr_table_copy(apr_pool_t *p, const apr_table_t *t)</a>
  <li><a href="APR_Table_library.html#apr_table_t-3" target="Documentation">apr_table_t *apr_table_overlay(apr_pool_t *p, const apr_table_t *overlay, const apr_table_t *base);</a>
  <li><a href="APR_Table_library.html#char-9" target="Documentation">char *apr_array_pstrcat(apr_pool_t *p, const apr_array_header_t *arr, const char sep)</a>
  <li><a href="APR_Table_library.html#const-4" target="Documentation">const char *apr_table_get(const apr_table_t *t, const char *key)</a>
  <li><a href="APR_Table_library.html#int-10" target="Documentation">int apr_is_empty_table(apr_table_t *t)</a>
  <li><a href="APR_Table_library.html#void-10" target="Documentation">void apr_array_cat(apr_array_header_t *dst, const apr_array_header_t *src)</a>
  <li><a href="APR_Table_library.html#void-11" target="Documentation">void apr_table_clear(apr_table_t *t)</a>
  <li><a href="APR_Table_library.html#void-12" target="Documentation">void apr_table_set(apr_table_t *t, const char *key, const char *val)</a>
  <li><a href="APR_Table_library.html#void-13" target="Documentation">void apr_table_setn(apr_table_t *t, const char *key, const char *val)</a>
  <li><a href="APR_Table_library.html#void-14" target="Documentation">void apr_table_unset(apr_table_t *t, const char *key)</a>
  <li><a href="APR_Table_library.html#void-15" target="Documentation">void apr_table_merge(apr_table_t *t, const char *key, const char *val)</a>
  <li><a href="APR_Table_library.html#void-16" target="Documentation">void apr_table_mergen(apr_table_t *t, const char *key, const char *val)</a>
  <li><a href="APR_Table_library.html#void-17" target="Documentation">void apr_table_add(apr_table_t *t, const char *key, const char *val)</a>
  <li><a href="APR_Table_library.html#void-18" target="Documentation">void apr_table_addn(apr_table_t *t, const char *key, const char *val)</a>
  <li><a href="APR_Table_library.html#void-19" target="Documentation">void apr_table_do(int (*comp) (void *, const char *, const char *), void *rec, const apr_table_t *t, ...)</a>
  <li><a href="APR_Table_library.html#void-20" target="Documentation">void apr_table_vdo(int (*comp) (void *, const char *, const char *), void *rec, const apr_table_t *t, va_list vp)</a>
  <li><a href="APR_Table_library.html#void-21" target="Documentation">void apr_table_overlap(apr_table_t *a, const apr_table_t *b, unsigned flags)</a>
  <li><a href="APR_Table_library.html#void-9" target="Documentation">void *apr_array_push(apr_array_header_t *arr)</a>
  </dir><a href="APR_Thread_library.html" target="Documentation"><b>APR Thread library</b></a><br>
    <dir>
  <li><a href="APR_Thread_library.html#apr_proc_t" target="Documentation">struct apr_proc_t</a>
  <li><a href="APR_Thread_library.html#process_chain" target="Documentation">struct process_chain</a>
  <li><a href="APR_Thread_library.html#apr_status_t-134" target="Documentation">apr_status_t apr_threadattr_create(apr_threadattr_t **new_attr, apr_pool_t *cont)</a>
  <li><a href="APR_Thread_library.html#apr_status_t-135" target="Documentation">apr_status_t apr_threadattr_detach_get(apr_threadattr_t *attr, apr_int32_t on)</a>
  <li><a href="APR_Thread_library.html#apr_status_t-136" target="Documentation">apr_status_t apr_threadattr_detach_set(apr_threadattr_t *attr)</a>
  <li><a href="APR_Thread_library.html#apr_status_t-137" target="Documentation">apr_status_t apr_thread_create(apr_thread_t **new_thread, apr_threadattr_t *attr, apr_thread_start_t func, void *data, apr_pool_t *cont)</a>
  <li><a href="APR_Thread_library.html#apr_status_t-138" target="Documentation">apr_status_t apr_thread_exit(apr_thread_t *thd, apr_status_t *retval)</a>
  <li><a href="APR_Thread_library.html#apr_status_t-139" target="Documentation">apr_status_t apr_thread_join(apr_status_t *retval, apr_thread_t *thd);</a>
  <li><a href="APR_Thread_library.html#apr_status_t-140" target="Documentation">apr_status_t apr_thread_detach(apr_thread_t *thd)</a>
  <li><a href="APR_Thread_library.html#apr_status_t-141" target="Documentation">apr_status_t apr_thread_data_get(void **data, const char *key, apr_thread_t *thread)</a>
  <li><a href="APR_Thread_library.html#apr_status_t-142" target="Documentation">apr_status_t apr_thread_data_set(void *data, const char *key, apr_status_t (*cleanup) (void *), apr_thread_t *thread)</a>
  <li><a href="APR_Thread_library.html#apr_status_t-143" target="Documentation">apr_status_t apr_threadkey_private_create(apr_threadkey_t **key, void (*dest)(void *), apr_pool_t *cont)</a>
  <li><a href="APR_Thread_library.html#apr_status_t-144" target="Documentation">apr_status_t apr_threadkey_private_get(void **new_mem, apr_threadkey_t *key)</a>
  <li><a href="APR_Thread_library.html#apr_status_t-145" target="Documentation">apr_status_t apr_threadkey_private_set(void *priv, apr_threadkey_t *key)</a>
  <li><a href="APR_Thread_library.html#apr_status_t-146" target="Documentation">apr_status_t apr_threadkey_private_delete(apr_threadkey_t *key)</a>
  <li><a href="APR_Thread_library.html#apr_status_t-147" target="Documentation">apr_status_t apr_threadkey_data_get(void **data, const char *key, apr_threadkey_t *threadkey)</a>
  <li><a href="APR_Thread_library.html#apr_status_t-148" target="Documentation">apr_status_t apr_threadkey_data_set(void *data, const char *key, apr_status_t (*cleanup) (void *), apr_threadkey_t *threadkey)</a>
  </dir><a href="APR_Time_library.html" target="Documentation"><b>APR Time library</b></a><br>
    <dir>
  <li><a href="APR_Time_library.html#apr_exploded_time_t" target="Documentation">struct apr_exploded_time_t</a>
  <li><a href="APR_Time_library.html#-44" target="Documentation">(void)</a>
  <li><a href="APR_Time_library.html#apr_status_t-166" target="Documentation">apr_status_t apr_ansi_time_to_apr_time(apr_time_t *result, time_t input)</a>
  <li><a href="APR_Time_library.html#apr_status_t-167" target="Documentation">apr_status_t apr_explode_gmt(apr_exploded_time_t *result, apr_time_t input)</a>
  <li><a href="APR_Time_library.html#apr_status_t-168" target="Documentation">apr_status_t apr_explode_localtime(apr_exploded_time_t *result, apr_time_t input)</a>
  <li><a href="APR_Time_library.html#apr_status_t-169" target="Documentation">apr_status_t apr_implode_time(apr_time_t *result, apr_exploded_time_t *input)</a>
  <li><a href="APR_Time_library.html#apr_status_t-170" target="Documentation">apr_status_t apr_rfc822_date(char *date_str, apr_time_t t)</a>
  <li><a href="APR_Time_library.html#apr_status_t-171" target="Documentation">apr_status_t apr_ctime(char *date_str, apr_time_t t)</a>
  <li><a href="APR_Time_library.html#apr_status_t-172" target="Documentation">apr_status_t apr_strftime(char *s, apr_size_t *retsize, apr_size_t max, const char *format, apr_exploded_time_t *tm)</a>
  <li><a href="APR_Time_library.html#apr_time_t" target="Documentation">apr_time_t apr_time_now(void)</a>
  <li><a href="APR_Time_library.html#void-27" target="Documentation">void apr_sleep(apr_interval_time_t t)</a>
  </dir><a href="APR_UUID_Handling.html" target="Documentation"><b>APR UUID Handling</b></a><br>
    <dir>
  <li><a href="APR_UUID_Handling.html#apr_status_t-174" target="Documentation">apr_status_t apr_uuid_parse(apr_uuid_t *uuid, const char *uuid_str)</a>
  <li><a href="APR_UUID_Handling.html#void-28" target="Documentation">void apr_uuid_get(apr_uuid_t *uuid)</a>
  <li><a href="APR_UUID_Handling.html#void-29" target="Documentation">void apr_uuid_format(char *buffer, const apr_uuid_t *uuid)</a>
  </dir><a href="APR_command_arguments.html" target="Documentation"><b>APR command arguments</b></a><br>
    <dir>
  <li><a href="APR_command_arguments.html#apr_getopt_option_t" target="Documentation">struct apr_getopt_option_t</a>
  <li><a href="APR_command_arguments.html#apr_getopt_t" target="Documentation">struct apr_getopt_t</a>
  <li><a href="APR_command_arguments.html#apr_status_t-54" target="Documentation">apr_status_t apr_getopt_init(apr_getopt_t **os, apr_pool_t *cont,int argc, char *const *argv)</a>
  <li><a href="APR_command_arguments.html#apr_status_t-55" target="Documentation">apr_status_t apr_getopt(apr_getopt_t *os, const char *opts, char *optch, const char **optarg)</a>
  <li><a href="APR_command_arguments.html#apr_status_t-56" target="Documentation">apr_status_t apr_getopt_long(apr_getopt_t *os, const apr_getopt_option_t *opts, int *optch, const char **optarg)</a>
  </dir><a href="APR_general-purpose_library.html" target="Documentation"><b>APR general-purpose library</b></a><br>
    <dir>
  <li><a href="APR_general-purpose_library.html#apr_vformatter_buff_t" target="Documentation">struct apr_vformatter_buff_t</a>
  <li><a href="APR_general-purpose_library.html#apr_status_t-57" target="Documentation">apr_status_t apr_password_validate(const char *passwd, const char *hash)</a>
  <li><a href="APR_general-purpose_library.html#apr_status_t-58" target="Documentation">apr_status_t apr_password_get(const char *prompt, char *pwbuf, size_t *bufsize)</a>
  <li><a href="APR_general-purpose_library.html#const-2" target="Documentation">const char * apr_filename_of_pathname(const char *pathname)</a>
  <li><a href="APR_general-purpose_library.html#int-5" target="Documentation">int apr_vformatter(int (*flush_func)(apr_vformatter_buff_t *b), apr_vformatter_buff_t *c, const char *fmt, va_list ap)</a>
  </dir><a href="APR_lock_library.html" target="Documentation"><b>APR lock library</b></a><br>
    <dir>
  <li><a href="APR_lock_library.html#-5" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_lock_library.html#apr_status_t-59" target="Documentation">apr_status_t apr_lock_create(apr_lock_t **lock, apr_locktype_e type, apr_lockscope_e scope, const char *fname, apr_pool_t *cont)</a>
  <li><a href="APR_lock_library.html#apr_status_t-60" target="Documentation">apr_status_t apr_lock_acquire(apr_lock_t *lock)</a>
  <li><a href="APR_lock_library.html#apr_status_t-61" target="Documentation">apr_status_t apr_lock_release(apr_lock_t *lock)</a>
  <li><a href="APR_lock_library.html#apr_status_t-62" target="Documentation">apr_status_t apr_lock_destroy(apr_lock_t *lock)</a>
  <li><a href="APR_lock_library.html#apr_status_t-63" target="Documentation">apr_status_t apr_lock_child_init(apr_lock_t **lock, const char *fname, apr_pool_t *cont)</a>
  <li><a href="APR_lock_library.html#apr_status_t-64" target="Documentation">apr_status_t apr_lock_data_get(apr_lock_t *lock, const char *key, void *data)</a>
  <li><a href="APR_lock_library.html#apr_status_t-65" target="Documentation">apr_status_t apr_lock_data_set(apr_lock_t *lock, void *data, const char *key, apr_status_t (*cleanup)(void *))</a>
  </dir><a href="APR_portability_Routines.html" target="Documentation"><b>APR portability Routines</b></a><br>
    <dir>
  <li><a href="APR_portability_Routines.html#apr_os_sock_info_t" target="Documentation">struct apr_os_sock_info_t</a>
  <li><a href="APR_portability_Routines.html#-34" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_portability_Routines.html#-35" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_portability_Routines.html#-36" target="Documentation">(apr_status_t)</a>
  <li><a href="APR_portability_Routines.html#apr_status_t-109" target="Documentation">apr_status_t apr_os_file_get(apr_os_file_t *thefile, apr_file_t *file)</a>
  <li><a href="APR_portability_Routines.html#apr_status_t-110" target="Documentation">apr_status_t apr_os_dir_get(apr_os_dir_t **thedir, apr_dir_t *dir)</a>
  <li><a href="APR_portability_Routines.html#apr_status_t-111" target="Documentation">apr_status_t apr_os_sock_get(apr_os_sock_t *thesock, apr_socket_t *sock)</a>
  <li><a href="APR_portability_Routines.html#apr_status_t-112" target="Documentation">apr_status_t apr_os_lock_get(apr_os_lock_t *oslock, apr_lock_t *lock)</a>
  <li><a href="APR_portability_Routines.html#apr_status_t-113" target="Documentation">apr_status_t apr_os_exp_time_get(apr_os_exp_time_t **ostime, apr_exploded_time_t *aprtime)</a>
  <li><a href="APR_portability_Routines.html#apr_status_t-114" target="Documentation">apr_status_t apr_os_imp_time_get(apr_os_imp_time_t **ostime, apr_time_t *aprtime)</a>
  <li><a href="APR_portability_Routines.html#apr_status_t-115" target="Documentation">apr_status_t apr_os_thread_get(apr_os_thread_t **thethd, apr_thread_t *thd)</a>
  <li><a href="APR_portability_Routines.html#apr_status_t-116" target="Documentation">apr_status_t apr_os_threadkey_get(apr_os_threadkey_t *thekey, apr_threadkey_t *key)</a>
  <li><a href="APR_portability_Routines.html#apr_status_t-117" target="Documentation">apr_status_t apr_os_file_put(apr_file_t **file, apr_os_file_t *thefile, apr_pool_t *cont)</a>
  <li><a href="APR_portability_Routines.html#apr_status_t-118" target="Documentation">apr_status_t apr_os_dir_put(apr_dir_t **dir, apr_os_dir_t *thedir, apr_pool_t *cont)</a>
  <li><a href="APR_portability_Routines.html#apr_status_t-119" target="Documentation">apr_status_t apr_os_sock_put(apr_socket_t **sock, apr_os_sock_t *thesock, apr_pool_t *cont)</a>
  <li><a href="APR_portability_Routines.html#apr_status_t-120" target="Documentation">apr_status_t apr_os_sock_make(apr_socket_t **apr_sock, apr_os_sock_info_t *os_sock_info, apr_pool_t *cont)</a>
  <li><a href="APR_portability_Routines.html#apr_status_t-121" target="Documentation">apr_status_t apr_os_lock_put(apr_lock_t **lock, apr_os_lock_t *thelock, apr_pool_t *cont)</a>
  <li><a href="APR_portability_Routines.html#apr_status_t-122" target="Documentation">apr_status_t apr_os_imp_time_put(apr_time_t *aprtime, apr_os_imp_time_t **ostime, apr_pool_t *cont)</a>
  <li><a href="APR_portability_Routines.html#apr_status_t-123" target="Documentation">apr_status_t apr_os_exp_time_put(apr_exploded_time_t *aprtime, apr_os_exp_time_t **ostime, apr_pool_t *cont)</a>
  <li><a href="APR_portability_Routines.html#apr_status_t-124" target="Documentation">apr_status_t apr_os_thread_put(apr_thread_t **thd, apr_os_thread_t *thethd,</a>
  <li><a href="APR_portability_Routines.html#apr_status_t-125" target="Documentation">apr_status_t apr_os_threadkey_put(apr_threadkey_t **key, apr_os_threadkey_t *thekey, apr_pool_t *cont)</a>
  </dir><a href="APR_signal_handling.html" target="Documentation"><b>APR signal handling</b></a><br>
    <dir>
  <li><a href="APR_signal_handling.html#apr_signal_init(apr_pool_t" target="Documentation">apr_signal_init(apr_pool_t *pglobal)</a>
  <li><a href="APR_signal_handling.html#const-3" target="Documentation">const char *apr_signal_get_description(int signum)</a>
  </dir><a href="APR_strings_library.html" target="Documentation"><b>APR strings library</b></a><br>
    <dir>
  <li><a href="APR_strings_library.html#apr_status_t-133" target="Documentation">apr_status_t apr_tokenize_to_argv(const char *arg_str, char ***argv_out, apr_pool_t *token_context);</a>
  <li><a href="APR_strings_library.html#char-2" target="Documentation">char *apr_pstrdup(apr_pool_t *p, const char *s)</a>
  <li><a href="APR_strings_library.html#char-3" target="Documentation">char *apr_pstrndup(apr_pool_t *p, const char *s, apr_size_t n)</a>
  <li><a href="APR_strings_library.html#char-4" target="Documentation">char *apr_pstrcat(apr_pool_t *p, ...)</a>
  <li><a href="APR_strings_library.html#char-5" target="Documentation">char *apr_pvsprintf(apr_pool_t *p, const char *fmt, va_list ap)</a>
  <li><a href="APR_strings_library.html#char-6" target="Documentation">char *apr_psprintf(apr_pool_t *p, const char *fmt, ...)</a>
  <li><a href="APR_strings_library.html#char-7" target="Documentation">char *apr_cpystrn(char *dst, const char *src, size_t dst_size)</a>
  <li><a href="APR_strings_library.html#char-8" target="Documentation">char *apr_collapse_spaces(char *dest, const char *src)</a>
  <li><a href="APR_strings_library.html#int-6" target="Documentation">int apr_strnatcmp(char const *a, char const *b)</a>
  <li><a href="APR_strings_library.html#int-7" target="Documentation">int apr_strnatcasecmp(char const *a, char const *b)</a>
  <li><a href="APR_strings_library.html#int-8" target="Documentation">int apr_snprintf(char *buf, size_t len, const char *format, ...)</a>
  <li><a href="APR_strings_library.html#int-9" target="Documentation">int apr_vsnprintf(char *buf, size_t len, const char *format, va_list ap)</a>
  <li><a href="APR_strings_library.html#void-8" target="Documentation">void *apr_pmemdup(apr_pool_t *p, const void *m, apr_size_t n)</a>
  </dir><a href="APR_user_id_services.html" target="Documentation"><b>APR user id services</b></a><br>
    <dir>
  <li><a href="APR_user_id_services.html#apr_gid_t" target="Documentation">apr_gid_t </a>
  <li><a href="APR_user_id_services.html#apr_status_t-173" target="Documentation">apr_status_t apr_get_user_passwd(char **passwd, const char *username, apr_pool_t *p);</a>
  <li><a href="APR_user_id_services.html#apr_uid_t" target="Documentation">apr_uid_t </a>
  </dir><a href="Dynamic_Object_Handling.html" target="Documentation"><b>Dynamic Object Handling</b></a><br>
    <dir>
  <li><a href="Dynamic_Object_Handling.html#apr_dso_handle_sym_t" target="Documentation">apr_dso_handle_sym_t </a>
  <li><a href="Dynamic_Object_Handling.html#apr_dso_handle_t" target="Documentation">apr_dso_handle_t </a>
  <li><a href="Dynamic_Object_Handling.html#apr_status_t" target="Documentation">apr_status_t apr_dso_load(apr_dso_handle_t **res_handle, const char *path, apr_pool_t *ctx)</a>
  <li><a href="Dynamic_Object_Handling.html#apr_status_t-2" target="Documentation">apr_status_t apr_dso_unload(apr_dso_handle_t *handle)</a>
  <li><a href="Dynamic_Object_Handling.html#apr_status_t-3" target="Documentation">apr_status_t apr_dso_sym(apr_dso_handle_sym_t *ressym, apr_dso_handle_t *handle, const char *symname)</a>
  <li><a href="Dynamic_Object_Handling.html#const" target="Documentation">const char *apr_dso_error(apr_dso_handle_t *dso, char *buf, apr_size_t bufsize)</a>
  </dir><a href="Fnmatch_functions.html" target="Documentation"><b>Fnmatch functions</b></a><br>
    <dir>
  <li><a href="Fnmatch_functions.html#apr_status_t-50" target="Documentation">apr_status_t apr_fnmatch(const char *pattern, const char *strings, int flags)</a>
  <li><a href="Fnmatch_functions.html#int-3" target="Documentation">int apr_is_fnmatch(const char *pattern)</a>
  </dir><a href="Hash_Tables.html" target="Documentation"><b>Hash Tables</b></a><br>
    <dir>
  <li><a href="Hash_Tables.html#apr_hash_index_t" target="Documentation">apr_hash_index_t </a>
  <li><a href="Hash_Tables.html#apr_hash_index_t-2" target="Documentation">apr_hash_index_t *apr_hash_first(apr_hash_t *ht)</a>
  <li><a href="Hash_Tables.html#apr_hash_index_t-3" target="Documentation">apr_hash_index_t *apr_hash_next(apr_hash_index_t *hi)</a>
  <li><a href="Hash_Tables.html#apr_hash_t" target="Documentation">apr_hash_t </a>
  <li><a href="Hash_Tables.html#apr_hash_t-2" target="Documentation">apr_hash_t *apr_hash_make(apr_pool_t *pool)</a>
  <li><a href="Hash_Tables.html#int-4" target="Documentation">int apr_hash_count(apr_hash_t *ht);</a>
  <li><a href="Hash_Tables.html#void-3" target="Documentation">void apr_hash_set(apr_hash_t *ht, const void *key, apr_size_t klen, const void *val)</a>
  <li><a href="Hash_Tables.html#void-4" target="Documentation">void *apr_hash_get(apr_hash_t *ht, const void *key, apr_size_t klen)</a>
  <li><a href="Hash_Tables.html#void-5" target="Documentation">void apr_hash_this(apr_hash_index_t *hi, const void **key, apr_size_t *klen, void **val);</a>
  </dir><a href="Shared_Memory_library.html" target="Documentation"><b>Shared Memory library</b></a><br>
    <dir>
  <li><a href="Shared_Memory_library.html#apr_status_t-126" target="Documentation">apr_status_t apr_shm_init(apr_shmem_t **m, apr_size_t reqsize, const char *file, apr_pool_t *cont)</a>
  <li><a href="Shared_Memory_library.html#apr_status_t-127" target="Documentation">apr_status_t apr_shm_destroy(apr_shmem_t *m)</a>
  <li><a href="Shared_Memory_library.html#apr_status_t-128" target="Documentation">apr_status_t apr_shm_free(apr_shmem_t *shared, void *entity)</a>
  <li><a href="Shared_Memory_library.html#apr_status_t-129" target="Documentation">apr_status_t apr_shm_name_get(apr_shmem_t *c, apr_shm_name_t **name)</a>
  <li><a href="Shared_Memory_library.html#apr_status_t-130" target="Documentation">apr_status_t apr_shm_name_set(apr_shmem_t *c, apr_shm_name_t *name)</a>
  <li><a href="Shared_Memory_library.html#apr_status_t-131" target="Documentation">apr_status_t apr_shm_open(apr_shmem_t *c)</a>
  <li><a href="Shared_Memory_library.html#apr_status_t-132" target="Documentation">apr_status_t apr_shm_avail(apr_shmem_t *c, apr_size_t *avail)</a>
  <li><a href="Shared_Memory_library.html#void-6" target="Documentation">void *apr_shm_malloc(apr_shmem_t *c, apr_size_t reqsize)</a>
  <li><a href="Shared_Memory_library.html#void-7" target="Documentation">void *apr_shm_calloc(apr_shmem_t *shared, apr_size_t size)</a>
  </dir>
            <a href="to-do.html" target="Documentation"><b>To-Do List</b></a><br>
          </nobr>
        </font>
      </p>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr/packages.html
  
  Index: packages.html
  ===================================================================
  <html>
    <head>
      <title>[Apache Portable RunTime] -- Packages</title>
    </head>
    <body bgcolor="#FFFFFF">
  
      <center>
      <h1>Documentation for [Apache Portable RunTime]</h1>
      </center>
      <h2>Package List</h2>
  <a href = "General.html">General</a><br>
  <a href = "APR_File_handling.html">APR File handling</a><br>
  <a href = "APR_I18N_translation_library.html">APR I18N translation library</a><br>
  <a href = "APR_MD5_Library.html">APR MD5 Library</a><br>
  <a href = "APR_MMAP_library.html">APR MMAP library</a><br>
  <a href = "APR_Network_library.html">APR Network library</a><br>
  <a href = "APR_Process_library.html">APR Process library</a><br>
  <a href = "APR_Random_Functions.html">APR Random Functions</a><br>
  <a href = "APR_Table_library.html">APR Table library</a><br>
  <a href = "APR_Thread_library.html">APR Thread library</a><br>
  <a href = "APR_Time_library.html">APR Time library</a><br>
  <a href = "APR_UUID_Handling.html">APR UUID Handling</a><br>
  <a href = "APR_command_arguments.html">APR command arguments</a><br>
  <a href = "APR_general-purpose_library.html">APR general-purpose library</a><br>
  <a href = "APR_lock_library.html">APR lock library</a><br>
  <a href = "APR_portability_Routines.html">APR portability Routines</a><br>
  <a href = "APR_signal_handling.html">APR signal handling</a><br>
  <a href = "APR_strings_library.html">APR strings library</a><br>
  <a href = "APR_user_id_services.html">APR user id services</a><br>
  <a href = "Dynamic_Object_Handling.html">Dynamic Object Handling</a><br>
  <a href = "Fnmatch_functions.html">Fnmatch functions</a><br>
  <a href = "Hash_Tables.html">Hash Tables</a><br>
  <a href = "Shared_Memory_library.html">Shared Memory library</a><br>
  
      <p>
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  
  1.1                  apr-site/docs/apr/to-do.html
  
  Index: to-do.html
  ===================================================================
  <html>
    <head>
      <title>[Apache Portable RunTime] -- To-Do list</title>
    </head>
    <body bgcolor="#FFFFFF">
  
      
  
      <h1>To-do list for [Apache Portable RunTime]</h1>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:54:22 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr-util/APR-UTIL_DBM_library.html
  
  Index: APR-UTIL_DBM_library.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime Utility Library] -- APR-UTIL DBM library</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime Utility Library]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: APR-UTIL DBM library</h2>
    <b>
  
  </b>
  <h2>Global Variables</h2>
    <blockquote>
  
    <a name="apr_datum_t"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_datum_t ;</b>
  <dd>
  Structure for referencing the datum record within a dbm
  <p><dl>
  </dl></dl>
  
    <a name="apr_dbm_t"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_dbm_t ;</b>
  <dd>
  Structure for referencing a dbm
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="apr_dbm_close"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_dbm_close(apr_dbm_t *db);</b>
    <dd>
  Close a dbm file previously opened by apr_dbm_open
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	dbm</th><td>The database to close</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_dbm_delete"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_dbm_delete(apr_dbm_t *dbm, apr_datum_t key);</b>
    <dd>
  Delete a dbm record value by key
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	dbm</th><td>The database
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key datum of the record to delete</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_dbm_exists"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_dbm_exists(apr_dbm_t *dbm, apr_datum_t key);</b>
    <dd>
  Search for a key within the dbm
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	dbm</th><td>The database
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The datum describing a key to test</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_dbm_fetch"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_dbm_fetch(apr_dbm_t *dbm, apr_datum_t key, apr_datum_t *pvalue);</b>
    <dd>
  Fetch a dbm record value by key
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	dbm</th><td>The database
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key datum to find this record
  </td></tr>
  <tr valign=top><th align=right>
  	value</th><td>The value datum retrieved for this record</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_dbm_firstkey"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_dbm_firstkey(apr_dbm_t *dbm, apr_datum_t *pkey);</b>
    <dd>
  Retrieve the first record key from a dbm
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	dbm</th><td>The database
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key datum of the first record</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_dbm_nextkey"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_dbm_nextkey(apr_dbm_t *dbm, apr_datum_t *pkey);</b>
    <dd>
  Retrieve the next record key from a dbm
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	dbm</th><td>The database
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key datum of the next record</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_dbm_open"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_dbm_open(apr_dbm_t **dbm, const char *name, int mode, apr_pool_t *cntxt);</b>
    <dd>
  Open a dbm file by file name
  <p><img src="../images//tip.gif"> The dbm name may not be a true file name, as many dbm packages
  append suffixes for seperate data and index files.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	dbm</th><td>The newly opened database
  </td></tr>
  <tr valign=top><th align=right>
  	name</th><td>The dbm file name to open
  </td></tr>
  <tr valign=top><th align=right>
  	mode</th><td>The flag value
  <PRE>
            APR_DBM_READONLY   open for read-only access
            APR_DBM_READWRITE  open for read-write access
            APR_DBM_RWCREATE   open for r/w, create if needed
  </PRE>
  </td></tr>
  <tr valign=top><th align=right>
  	cntxt</th><td>The pool to use when creating the dbm</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_dbm_store"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_dbm_store(apr_dbm_t *dbm, apr_datum_t key, apr_datum_t value);</b>
    <dd>
  Store a dbm record value by key
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	dbm</th><td>The database
  </td></tr>
  <tr valign=top><th align=right>
  	key</th><td>The key datum to store this record by
  </td></tr>
  <tr valign=top><th align=right>
  	value</th><td>The value datum to store in this record</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:57:40 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr-util/Apache_XML_library.html
  
  Index: Apache_XML_library.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime Utility Library] -- Apache XML library</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime Utility Library]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: Apache XML library</h2>
    <b>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Apache_XML_library.html#apr_text">struct apr_text</h3></a>
    <ul>
  <li><a href="Apache_XML_library.html#apr_text-apr_text">apr_text</a>
  <li><a href="Apache_XML_library.html#apr_text-text">text</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Apache_XML_library.html#apr_text_header">struct apr_text_header</h3></a>
    <ul>
  <li><a href="Apache_XML_library.html#apr_text_header-first">first</a>
  <li><a href="Apache_XML_library.html#apr_text_header-last">last</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Apache_XML_library.html#apr_xml_attr">struct apr_xml_attr</h3></a>
    <ul>
  <li><a href="Apache_XML_library.html#apr_xml_attr-apr_xml_attr">apr_xml_attr</a>
  <li><a href="Apache_XML_library.html#apr_xml_attr-name">name</a>
  <li><a href="Apache_XML_library.html#apr_xml_attr-ns">ns</a>
  <li><a href="Apache_XML_library.html#apr_xml_attr-value">value</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Apache_XML_library.html#apr_xml_doc">struct apr_xml_doc</h3></a>
    <ul>
  <li><a href="Apache_XML_library.html#apr_xml_doc-namespaces">namespaces</a>
  <li><a href="Apache_XML_library.html#apr_xml_doc-root">root</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Apache_XML_library.html#apr_xml_elem">struct apr_xml_elem</h3></a>
    <ul>
  <li><a href="Apache_XML_library.html#apr_xml_elem-apr_xml_attr">apr_xml_attr</a>
  <li><a href="Apache_XML_library.html#apr_xml_elem-apr_xml_elem">apr_xml_elem</a>
  <li><a href="Apache_XML_library.html#apr_xml_elem-apr_xml_elem-2">apr_xml_elem</a>
  <li><a href="Apache_XML_library.html#apr_xml_elem-apr_xml_elem-3">apr_xml_elem</a>
  <li><a href="Apache_XML_library.html#apr_xml_elem-apr_xml_elem-4">apr_xml_elem</a>
  <li><a href="Apache_XML_library.html#apr_xml_elem-apr_xml_ns_scope">apr_xml_ns_scope</a>
  <li><a href="Apache_XML_library.html#apr_xml_elem-first_cdata">first_cdata</a>
  <li><a href="Apache_XML_library.html#apr_xml_elem-following_cdata">following_cdata</a>
  <li><a href="Apache_XML_library.html#apr_xml_elem-lang">lang</a>
  <li><a href="Apache_XML_library.html#apr_xml_elem-name">name</a>
  <li><a href="Apache_XML_library.html#apr_xml_elem-ns">ns</a>
  <li><a href="Apache_XML_library.html#apr_xml_elem-private">private</a>
  </ul>
  
  </b>
  <hr size="4">
    <a name="apr_text"></a>
    <h1>struct apr_text</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_xml.h</td></tr></tr>
  </table>
  <p>
  Structure to keep a linked list of pieces of text<h2>Member Index</h2>
  <ul><li><a href="Apache_XML_library.html#apr_text-apr_text">apr_text *next </a>
  	<li><a href="Apache_XML_library.html#apr_text-text">    const char *text</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="apr_text"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_text *next ;</b>
  <dd>
  a pointer to the next piece of text
  <p><dl>
  </dl></dl>
  
    <a name="text"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    const char *text;</b>
  <dd>
  The current piece of text
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="apr_text_header"></a>
    <h1>struct apr_text_header</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_xml.h</td></tr></tr>
  </table>
  <p>
  A list of pieces of text<h2>Member Index</h2>
  <ul><li><a href="Apache_XML_library.html#apr_text_header-first">    apr_text *first</a>
  	<li><a href="Apache_XML_library.html#apr_text_header-last">    apr_text *last</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="first"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_text *first;</b>
  <dd>
  The first piece of text in the list
  <p><dl>
  </dl></dl>
  
    <a name="last"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_text *last;</b>
  <dd>
  The last piece of text in the list
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="apr_xml_attr"></a>
    <h1>struct apr_xml_attr</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_xml.h</td></tr></tr>
  </table>
  <p>
  apr_xml_attr: holds a parsed XML attribute<h2>Member Index</h2>
  <ul><li><a href="Apache_XML_library.html#apr_xml_attr-apr_xml_attr">apr_xml_attr *next </a>
  	<li><a href="Apache_XML_library.html#apr_xml_attr-name">    const char *name</a>
  	<li><a href="Apache_XML_library.html#apr_xml_attr-ns">    int ns</a>
  	<li><a href="Apache_XML_library.html#apr_xml_attr-value">    const char *value</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="apr_xml_attr"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_xml_attr *next ;</b>
  <dd>
  next attribute
  <p><dl>
  </dl></dl>
  
    <a name="name"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    const char *name;</b>
  <dd>
  attribute name
  <p><dl>
  </dl></dl>
  
    <a name="ns"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int ns;</b>
  <dd>
  index into namespace array
  <p><dl>
  </dl></dl>
  
    <a name="value"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    const char *value;</b>
  <dd>
  attribute value
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="apr_xml_doc"></a>
    <h1>struct apr_xml_doc</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_xml.h</td></tr></tr>
  </table>
  <p>
  apr_xml_doc: holds a parsed XML document<h2>Member Index</h2>
  <ul><li><a href="Apache_XML_library.html#apr_xml_doc-namespaces">    apr_array_header_t *namespaces</a>
  	<li><a href="Apache_XML_library.html#apr_xml_doc-root">    apr_xml_elem *root</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="namespaces"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_array_header_t *namespaces;</b>
  <dd>
  array of namespaces used
  <p><dl>
  </dl></dl>
  
    <a name="root"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_xml_elem *root;</b>
  <dd>
  root element
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="apr_xml_elem"></a>
    <h1>struct apr_xml_elem</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_xml.h</td></tr></tr>
  </table>
  <p>
  apr_xml_elem: holds a parsed XML element<h2>Member Index</h2>
  <ul><li><a href="Apache_XML_library.html#apr_xml_elem-apr_xml_attr">apr_xml_attr *attr </a>
  	<li><a href="Apache_XML_library.html#apr_xml_elem-apr_xml_elem">apr_xml_elem *parent </a>
  	<li><a href="Apache_XML_library.html#apr_xml_elem-apr_xml_elem-2">apr_xml_elem *next </a>
  	<li><a href="Apache_XML_library.html#apr_xml_elem-apr_xml_elem-3">apr_xml_elem *first_child </a>
  	<li><a href="Apache_XML_library.html#apr_xml_elem-apr_xml_elem-4">apr_xml_elem *last_child </a>
  	<li><a href="Apache_XML_library.html#apr_xml_elem-apr_xml_ns_scope">apr_xml_ns_scope *ns_scope </a>
  	<li><a href="Apache_XML_library.html#apr_xml_elem-first_cdata">    apr_text_header first_cdata</a>
  	<li><a href="Apache_XML_library.html#apr_xml_elem-following_cdata">    apr_text_header following_cdata</a>
  	<li><a href="Apache_XML_library.html#apr_xml_elem-lang">    const char *lang</a>
  	<li><a href="Apache_XML_library.html#apr_xml_elem-name">    const char *name</a>
  	<li><a href="Apache_XML_library.html#apr_xml_elem-ns">    int ns</a>
  	<li><a href="Apache_XML_library.html#apr_xml_elem-private">    void *private</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="apr_xml_attr"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_xml_attr *attr ;</b>
  <dd>
  first attribute
  <p><dl>
  </dl></dl>
  
    <a name="apr_xml_elem"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_xml_elem *parent ;</b>
  <dd>
  parent element
  <p><dl>
  </dl></dl>
  
    <a name="apr_xml_elem"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_xml_elem *next ;</b>
  <dd>
  next (sibling) element
  <p><dl>
  </dl></dl>
  
    <a name="apr_xml_elem"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_xml_elem *first_child ;</b>
  <dd>
  first child element
  <p><dl>
  </dl></dl>
  
    <a name="apr_xml_elem"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_xml_elem *last_child ;</b>
  <dd>
  last child element
  <p><dl>
  </dl></dl>
  
    <a name="apr_xml_ns_scope"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_xml_ns_scope *ns_scope ;</b>
  <dd>
  namespaces scoped by this elem
  <p><dl>
  </dl></dl>
  
    <a name="first_cdata"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_text_header first_cdata;</b>
  <dd>
  cdata right after start tag
  <p><dl>
  </dl></dl>
  
    <a name="following_cdata"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_text_header following_cdata;</b>
  <dd>
  cdata after MY end tag
  <p><dl>
  </dl></dl>
  
    <a name="lang"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    const char *lang;</b>
  <dd>
  xml:lang for attrs/contents
  <p><dl>
  </dl></dl>
  
    <a name="name"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    const char *name;</b>
  <dd>
  element name
  <p><dl>
  </dl></dl>
  
    <a name="ns"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int ns;</b>
  <dd>
  index into namespace array
  <p><dl>
  </dl></dl>
  
    <a name="private"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    void *private;</b>
  <dd>
  Place for modules to store private data
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="-3"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_xml_parser *);</b>
    <dd>
  Create an XML parser
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	pool</th><td>The pool for allocating the parser and the parse results.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new parser.<p></dl></dl>
  
  <a name="-4"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  Feed input into the parser
  <p><img src="../images//tip.gif"> Use apr_xml_parser_geterror() to get more error information.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	parser</th><td>The XML parser for parsing this data.
  </td></tr>
  <tr valign=top><th align=right>
  	data</th><td>The data to parse.
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>The length of the data.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>Any errors found during parsing.<p></dl></dl>
  
  <a name="-5"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_status_t);</b>
    <dd>
  Terminate the parsing and return the result
  <p><img src="../images//tip.gif"> Use apr_xml_parser_geterror() to get more error information.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	parser</th><td>The XML parser for parsing this data.
  </td></tr>
  <tr valign=top><th align=right>
  	pdoc</th><td>The resulting parse information. May be NULL to simply
              terminate the parsing without fetching the info.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>Any errors found during the final stage of parsing.<p></dl></dl>
  
  <a name="-6"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(char *);</b>
    <dd>
  Fetch additional error information from the parser.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	parser</th><td>The XML parser to query for errors.
  </td></tr>
  <tr valign=top><th align=right>
  	errbuf</th><td>A buffer for storing error text.
  </td></tr>
  <tr valign=top><th align=right>
  	errbufsize</th><td>The length of the error text buffer.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The error buffer<p></dl></dl>
  
  <a name="const"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>const char *apr_xml_empty_elem(apr_pool_t *p, const apr_xml_elem *elem);</b>
    <dd>
  empty XML element
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate out of
  </td></tr>
  <tr valign=top><th align=right>
  	elem</th><td>The XML element to empty</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>the string that was stored in the XML element<p></dl></dl>
  
  <a name="const-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>const char *apr_xml_quote_string(apr_pool_t *p, const char *s, int quotes);</b>
    <dd>
  quote an XML string
  Replace '<', '>', and '&' with '&lt;', '&gt;', and '&amp;'.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate out of
  </td></tr>
  <tr valign=top><th align=right>
  	s</th><td>The string to quote
  </td></tr>
  <tr valign=top><th align=right>
  	quotes</th><td>If quotes is true, then replace '"' with '&quot;'.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The quoted string<p></dl></dl>
  
  <a name="int-55"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_xml_insert_uri(apr_array_header_t *uri_array, const char *uri);</b>
    <dd>
  return the URI's (existing) index, or insert it and return a new index
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	uri_array</th><td>array to insert into
  </td></tr>
  <tr valign=top><th align=right>
  	uri</th><td>The uri to insert</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>int The uri's index<p></dl></dl>
  
  <a name="void-58"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_text_append(apr_pool_t *p, apr_text_header *hdr, const char *text);</b>
    <dd>
  Append a piece of text to the end of a list
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate out of
  </td></tr>
  <tr valign=top><th align=right>
  	hdr</th><td>The text header to append to
  </td></tr>
  <tr valign=top><th align=right>
  	text</th><td>The new text to append</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-59"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_xml_to_text(apr_pool_t *p, const apr_xml_elem *elem, int style, apr_array_header_t *namespaces, int *ns_map, const char **pbuf, size_t *psize);;</b>
    <dd>
  Converts an XML element tree to flat text
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate out of
  </td></tr>
  <tr valign=top><th align=right>
  	elem</th><td>The XML element to convert
  </td></tr>
  <tr valign=top><th align=right>
  	style</th><td>How to covert the XML.  One of:
  <PRE>
      APR_XML_X2T_FULL                start tag, contents, end tag 
      APR_XML_X2T_INNER               contents only 
      APR_XML_X2T_LANG_INNER          xml:lang + inner contents 
      APR_XML_X2T_FULL_NS_LANG        FULL + ns defns + xml:lang 
  </PRE>
  </td></tr>
  <tr valign=top><th align=right>
  	namespaces</th><td>The namespace of the current XML element
  </td></tr>
  <tr valign=top><th align=right>
  	ns_map</th><td>Namespace mapping
  </td></tr>
  <tr valign=top><th align=right>
  	pbuf</th><td>Buffer to put the converted text into
  </td></tr>
  <tr valign=top><th align=right>
  	psize</th><td>Size of the converted text</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-60"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_xml_quote_elem(apr_pool_t *p, apr_xml_elem *elem);</b>
    <dd>
  Quote an XML element
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate out of
  </td></tr>
  <tr valign=top><th align=right>
  	elem</th><td>The element to quote</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:57:40 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr-util/Apache_hooks_functions.html
  
  Index: Apache_hooks_functions.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime Utility Library] -- Apache hooks functions</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime Utility Library]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: Apache hooks functions</h2>
    <b>
  
  </b>
  <h2>Global Variables</h2>
    <blockquote>
  
    <a name="apr_pool_t"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_pool_t *ap_global_hook_pool;</b>
  <dd>
  <p><img src="../images//tip.gif"> 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.
   The global pool used to allocate any memory needed by the hooks.
  <p><dl>
  </dl></dl>
  
    <a name="apr_pool_t"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_pool_t *ap_debug_module_hooks;</b>
  <dd>
  A global variable to determine if debugging information about the
  hooks functions should be printed
  <p><dl>
  </dl></dl>
  
    <a name="apr_pool_t"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_pool_t *ap_debug_module_name;</b>
  <dd>
  The name of the module that is currently registering a function
  <p><dl>
  </dl></dl>
  
    <a name="apr_pool_t"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_pool_t *apr_global_hook_pool;</b>
  <dd>
  <p><img src="../images//tip.gif"> 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.
   The global pool used to allocate any memory needed by the hooks.
  <p><dl>
  </dl></dl>
  
    <a name="apr_pool_t"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_pool_t *apr_debug_module_hooks;</b>
  <dd>
  A global variable to determine if debugging information about the
  hooks functions should be printed
  <p><dl>
  </dl></dl>
  
    <a name="apr_pool_t"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_pool_t *apr_current_hooking_module;</b>
  <dd>
  The name of the module that is currently registering a function
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name=""></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(apr_array_header_t *);</b>
    <dd>
  Hook to a generic hook.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	name</th><td>The name of the hook
  </td></tr>
  <tr valign=top><th align=right>
  	pfn</th><td>A pointer to a function that will be called
  </td></tr>
  <tr valign=top><th align=right>
  	aszPre</th><td>a NULL-terminated array of strings that name modules whose hooks should precede this one
  </td></tr>
  <tr valign=top><th align=right>
  	aszSucc</th><td>a NULL-terminated array of strings that name modules whose hooks should succeed this one
  </td></tr>
  <tr valign=top><th align=right>
  	nOrder</th><td>an integer determining order before honouring aszPre and aszSucc (for example HOOK_MIDDLE)</td></tr>
  </table>
    </dl></dl>
  
  <a name="int-23"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int AP_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(link, name, args_decl, args_use);</b>
    <dd>
  <p><img src="../images//tip.gif"> 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.
   Implement a hook that runs until one of the functions returns something
  other than OK or DECLINE
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	link</th><td>The linkage declaration prefix of the hook
  </td></tr>
  <tr valign=top><th align=right>
  	name</th><td>The name of the hook
  </td></tr>
  <tr valign=top><th align=right>
  	args_decl</th><td>The declaration of the arguments for the hook
  </td></tr>
  <tr valign=top><th align=right>
  	args_used</th><td>The names for the arguments for the hook</td></tr>
  </table>
    </dl></dl>
  
  <a name="int-24"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int AP_IMPLEMENT_HOOK_RUN_FIRST(link, name, args_decl, args_use);</b>
    <dd>
  <p><img src="../images//tip.gif"> 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.
   Implement a hook that runs until the first function returns something
  other than DECLINE
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	link</th><td>The linkage declaration prefix of the hook
  </td></tr>
  <tr valign=top><th align=right>
  	name</th><td>The name of the hook
  </td></tr>
  <tr valign=top><th align=right>
  	args_decl</th><td>The declaration of the arguments for the hook
  </td></tr>
  <tr valign=top><th align=right>
  	args_used</th><td>The names for the arguments for the hook</td></tr>
  </table>
    </dl></dl>
  
  <a name="int-51"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(link, name, args_decl, args_use);</b>
    <dd>
  Implement a generic hook that runs until one of the functions
  returns something other than OK or DECLINE.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ret</th><td>The type of the return value of the hook
  </td></tr>
  <tr valign=top><th align=right>
  	name</th><td>The name of the hook
  </td></tr>
  <tr valign=top><th align=right>
  	args_decl</th><td>The declaration of the arguments for the hook
  </td></tr>
  <tr valign=top><th align=right>
  	args_used</th><td>The names for the arguments for the hook</td></tr>
  </table>
    </dl></dl>
  
  <a name="int-52"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(ns, link, name, args_decl, args_use);</b>
    <dd>
  <p><img src="../images//tip.gif"> 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.
   Implement a hook that runs until one of the functions returns something
  other than OK or DECLINE
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ns</th><td>The namespace prefix of the hook functions
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The linkage declaration prefix of the hook
  </td></tr>
  <tr valign=top><th align=right>
  	name</th><td>The name of the hook
  </td></tr>
  <tr valign=top><th align=right>
  	args_decl</th><td>The declaration of the arguments for the hook
  </td></tr>
  <tr valign=top><th align=right>
  	args_used</th><td>The names for the arguments for the hook</td></tr>
  </table>
    </dl></dl>
  
  <a name="int-53"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int APR_IMPLEMENT_HOOK_RUN_FIRST(ns, link, name, args_decl, args_use, decline);</b>
    <dd>
  <p><img src="../images//tip.gif"> 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.
   Implement a hook that runs until the first function returns something
  other than the value of decline
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ns</th><td>The namespace prefix of the hook functions
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The linkage declaration prefix of the hook
  </td></tr>
  <tr valign=top><th align=right>
  	name</th><td>The name of the hook
  </td></tr>
  <tr valign=top><th align=right>
  	args_decl</th><td>The declaration of the arguments for the hook
  </td></tr>
  <tr valign=top><th align=right>
  	args_used</th><td>The names for the arguments for the hook</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-13"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void AP_IMPLEMENT_EXTERNAL_HOOK_VOID(link, name, args_decl, args_use);</b>
    <dd>
  Implement a hook that has no return code, and therefore runs all of the
  registered functions
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	link</th><td>The linkage declaration prefix of the hook
  </td></tr>
  <tr valign=top><th align=right>
  	name</th><td>The name of the hook
  </td></tr>
  <tr valign=top><th align=right>
  	args_decl</th><td>The declaration of the arguments for the hook
  </td></tr>
  <tr valign=top><th align=right>
  	args_used</th><td>The names for the arguments for the hook</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-14"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void ap_hook_sort_register(const char *szHookName, ap_arry_header_t **aHooks);</b>
    <dd>
  Register a hook function to be sorted
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	szHookName</th><td>The name of the Hook the function is registered for
  </td></tr>
  <tr valign=top><th align=right>
  	aHooks</th><td>The array which stores all of the functions for this hook</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-15"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void ap_sort_hooks(void);</b>
    <dd>
  Sort all of the registerd functions for a given hook
  <p><dl>
  </dl></dl>
  
  <a name="void-16"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void ap_show_hook(const char *szName, const char *const *aszPre, const char *const *aszSucc);</b>
    <dd>
  Print all of the information about the current hook.  This is used for
  debugging purposes.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	szName</th><td>The name of the hook
  </td></tr>
  <tr valign=top><th align=right>
  	aszPre</th><td>All of the functions in the predecessor array
  </td></tr>
  <tr valign=top><th align=right>
  	aszSucc</th><td>All of the functions in the successor array</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-17"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void ap_hook_deregister_all(void);</b>
    <dd>
  Remove all currently registered functions.
  <p><dl>
  </dl></dl>
  
  <a name="void-29"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_IMPLEMENT_EXTERNAL_HOOK_VOID(ns, link, name, args_decl, args_use);</b>
    <dd>
  Implement a hook that has no return code, and therefore runs all of the
  registered functions
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ns</th><td>The namespace prefix of the hook functions
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The linkage declaration prefix of the hook
  </td></tr>
  <tr valign=top><th align=right>
  	name</th><td>The name of the hook
  </td></tr>
  <tr valign=top><th align=right>
  	args_decl</th><td>The declaration of the arguments for the hook
  </td></tr>
  <tr valign=top><th align=right>
  	args_used</th><td>The names for the arguments for the hook</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-30"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_hook_sort_register(const char *szHookName, apr_array_header_t **aHooks);</b>
    <dd>
  Register a hook function to be sorted
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	szHookName</th><td>The name of the Hook the function is registered for
  </td></tr>
  <tr valign=top><th align=right>
  	aHooks</th><td>The array which stores all of the functions for this hook</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-31"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_sort_hooks(void);</b>
    <dd>
  Sort all of the registerd functions for a given hook
  <p><dl>
  </dl></dl>
  
  <a name="void-32"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_show_hook(const char *szName, const char *const *aszPre, const char *const *aszSucc);</b>
    <dd>
  Print all of the information about the current hook.  This is used for
  debugging purposes.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	szName</th><td>The name of the hook
  </td></tr>
  <tr valign=top><th align=right>
  	aszPre</th><td>All of the functions in the predecessor array
  </td></tr>
  <tr valign=top><th align=right>
  	aszSucc</th><td>All of the functions in the successor array</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-33"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_hook_deregister_all(void);</b>
    <dd>
  Remove all currently registered functions.
  <p><dl>
  </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:57:40 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr-util/Base64_Encoding.html
  
  Index: Base64_Encoding.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime Utility Library] -- Base64 Encoding</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime Utility Library]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: Base64 Encoding</h2>
    <b>
  
  </b>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="int"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int ap_base64encode_len(int len);</b>
    <dd>
  Given the length of an un-encrypted string, get the length of the 
  encrypted string.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	len</th><td>the length of an unencrypted string.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>the length of the string after it is encrypted<p></dl></dl>
  
  <a name="int-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int ap_base64encode(char *coded_dst, const char *plain_src, int len_plain_src);</b>
    <dd>
  Encode a text string using base64encoding.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	coded_dst</th><td>The destination string for the encoded string.
  </td></tr>
  <tr valign=top><th align=right>
  	plain_src</th><td>The original string in plain text
  </td></tr>
  <tr valign=top><th align=right>
  	len_plain_src</th><td>The length of the plain text string</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>the length of the encoded string<p></dl></dl>
  
  <a name="int-25"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_base64_encode_len(int len);</b>
    <dd>
  Given the length of an un-encrypted string, get the length of the 
  encrypted string.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	len</th><td>the length of an unencrypted string.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>the length of the string after it is encrypted<p></dl></dl>
  
  <a name="int-26"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_base64_encode(char *coded_dst, const char *plain_src, int len_plain_src);</b>
    <dd>
  Encode a text string using base64encoding.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	coded_dst</th><td>The destination string for the encoded string.
  </td></tr>
  <tr valign=top><th align=right>
  	plain_src</th><td>The original string in plain text
  </td></tr>
  <tr valign=top><th align=right>
  	len_plain_src</th><td>The length of the plain text string</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>the length of the encoded string<p></dl></dl>
  
  <a name="int-27"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_base64_encode_binary(char *coded_dst, const char *plain_src, int len_plain_src);</b>
    <dd>
  Encode an EBCDIC string using base64encoding.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	coded_dst</th><td>The destination string for the encoded string.
  </td></tr>
  <tr valign=top><th align=right>
  	plain_src</th><td>The original string in plain text
  </td></tr>
  <tr valign=top><th align=right>
  	len_plain_src</th><td>The length of the plain text string</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>the length of the encoded string<p></dl></dl>
  
  <a name="int-28"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_base64_decode_len(const char *coded_src);</b>
    <dd>
  Determine the length of a plain text string given the encoded version
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	coded_src</th><td>The encoded string</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>the length of the plain text string<p></dl></dl>
  
  <a name="int-29"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_base64_decode(char *plain_dst, const char *coded_src);</b>
    <dd>
  Decode a string to plain text
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	plain_dst</th><td>The destination string for the plain text
  </td></tr>
  <tr valign=top><th align=right>
  	coded_src</th><td>The encoded string</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>the length of the plain text string<p></dl></dl>
  
  <a name="int-3"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int ap_base64encode_binary(char *coded_dst, const char *plain_src, int len_plain_src);</b>
    <dd>
  Encode an EBCDIC string using base64encoding.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	coded_dst</th><td>The destination string for the encoded string.
  </td></tr>
  <tr valign=top><th align=right>
  	plain_src</th><td>The original string in plain text
  </td></tr>
  <tr valign=top><th align=right>
  	len_plain_src</th><td>The length of the plain text string</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>the length of the encoded string<p></dl></dl>
  
  <a name="int-30"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_base64_decode_binary(char *plain_dst, const char *coded_src);</b>
    <dd>
  Decode an EBCDIC string to plain text
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	plain_dst</th><td>The destination string for the plain text
  </td></tr>
  <tr valign=top><th align=right>
  	coded_src</th><td>The encoded string</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>the length of the plain text string<p></dl></dl>
  
  <a name="int-4"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int ap_base64decode_len(const char *coded_src);</b>
    <dd>
  Determine the length of a plain text string given the encoded version
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	coded_src</th><td>The encoded string</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>the length of the plain text string<p></dl></dl>
  
  <a name="int-5"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int ap_base64decode(char *plain_dst, const char *coded_src);</b>
    <dd>
  Decode a string to plain text
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	plain_dst</th><td>The destination string for the plain text
  </td></tr>
  <tr valign=top><th align=right>
  	coded_src</th><td>The encoded string</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>the length of the plain text string<p></dl></dl>
  
  <a name="int-6"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int ap_base64decode_binary(char *plain_dst, const char *coded_src);</b>
    <dd>
  Decode an EBCDIC string to plain text
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	plain_dst</th><td>The destination string for the plain text
  </td></tr>
  <tr valign=top><th align=right>
  	coded_src</th><td>The encoded string</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>the length of the plain text string<p></dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:57:40 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr-util/Bucket_Brigades.html
  
  Index: Bucket_Brigades.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime Utility Library] -- Bucket Brigades</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime Utility Library]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: Bucket Brigades</h2>
    <b>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Bucket_Brigades.html#ap_bucket">struct ap_bucket</h3></a>
    <ul>
  <li><a href="Bucket_Brigades.html#ap_bucket-AP_RING_ENTRY">AP_RING_ENTRY()</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-data">data</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-length">length</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-type">type</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Bucket_Brigades.html#ap_bucket_brigade">struct ap_bucket_brigade</h3></a>
    <ul>
  <li><a href="Bucket_Brigades.html#ap_bucket_brigade-AP_RING_HEAD">AP_RING_HEAD()</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_brigade-p">p</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Bucket_Brigades.html#ap_bucket_file">struct ap_bucket_file</h3></a>
    <ul>
  <li><a href="Bucket_Brigades.html#ap_bucket_file-fd">fd</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_file-offset">offset</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Bucket_Brigades.html#ap_bucket_heap">struct ap_bucket_heap</h3></a>
    <ul>
  <li><a href="Bucket_Brigades.html#ap_bucket_heap-alloc_len">alloc_len</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_heap-base">base</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_heap-refcount">refcount</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Bucket_Brigades.html#ap_bucket_mmap">struct ap_bucket_mmap</h3></a>
    <ul>
  <li><a href="Bucket_Brigades.html#ap_bucket_mmap-mmap">mmap</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_mmap-refcount">refcount</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Bucket_Brigades.html#ap_bucket_pool">struct ap_bucket_pool</h3></a>
    <ul>
  <li><a href="Bucket_Brigades.html#ap_bucket_pool-b">b</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_pool-base">base</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_pool-p">p</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_pool-refcount">refcount</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Bucket_Brigades.html#ap_bucket_refcount">struct ap_bucket_refcount</h3></a>
    <ul>
  <li><a href="Bucket_Brigades.html#ap_bucket_refcount-refcount">refcount</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Bucket_Brigades.html#ap_bucket_shared">struct ap_bucket_shared</h3></a>
    <ul>
  <li><a href="Bucket_Brigades.html#ap_bucket_shared-data">data</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_shared-end">end</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_shared-start">start</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Bucket_Brigades.html#ap_bucket_simple">struct ap_bucket_simple</h3></a>
    <ul>
  <li><a href="Bucket_Brigades.html#ap_bucket_simple-end">end</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_simple-start">start</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Bucket_Brigades.html#ap_bucket_type">struct ap_bucket_type</h3></a>
    <ul>
  <li><a href="Bucket_Brigades.html#ap_bucket_type-apr_status_t">apr_status_t</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_type-apr_status_t-2">apr_status_t</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_type-apr_status_t-3">apr_status_t</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_type-apr_status_t-4">apr_status_t</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_type-name">name</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_type-num_func">num_func</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_type-void">void()</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Bucket_Brigades.html#apr_bucket">struct apr_bucket</h3></a>
    <ul>
  <li><a href="Bucket_Brigades.html#apr_bucket-APR_RING_ENTRY">APR_RING_ENTRY()</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-data">data</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-length">length</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-start">start</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-type">type</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Bucket_Brigades.html#apr_bucket_brigade">struct apr_bucket_brigade</h3></a>
    <ul>
  <li><a href="Bucket_Brigades.html#apr_bucket_brigade-APR_RING_HEAD">APR_RING_HEAD()</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_brigade-p">p</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Bucket_Brigades.html#apr_bucket_file">struct apr_bucket_file</h3></a>
    <ul>
  <li><a href="Bucket_Brigades.html#apr_bucket_file-fd">fd</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_file-refcount">refcount</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Bucket_Brigades.html#apr_bucket_heap">struct apr_bucket_heap</h3></a>
    <ul>
  <li><a href="Bucket_Brigades.html#apr_bucket_heap-alloc_len">alloc_len</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_heap-base">base</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_heap-refcount">refcount</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Bucket_Brigades.html#apr_bucket_mmap">struct apr_bucket_mmap</h3></a>
    <ul>
  <li><a href="Bucket_Brigades.html#apr_bucket_mmap-mmap">mmap</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_mmap-refcount">refcount</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Bucket_Brigades.html#apr_bucket_pool">struct apr_bucket_pool</h3></a>
    <ul>
  <li><a href="Bucket_Brigades.html#apr_bucket_pool-base">base</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_pool-heap">heap</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_pool-pool">pool</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Bucket_Brigades.html#apr_bucket_refcount">struct apr_bucket_refcount</h3></a>
    <ul>
  <li><a href="Bucket_Brigades.html#apr_bucket_refcount-refcount">refcount</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="Bucket_Brigades.html#apr_bucket_type_t">struct apr_bucket_type_t</h3></a>
    <ul>
  <li><a href="Bucket_Brigades.html#apr_bucket_type_t-apr_status_t">apr_status_t</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_type_t-apr_status_t-2">apr_status_t</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_type_t-apr_status_t-3">apr_status_t</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_type_t-apr_status_t-4">apr_status_t</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_type_t-name">name</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_type_t-num_func">num_func</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_type_t-void">void()</a>
  </ul>
  
  </b>
  <hr size="4">
    <a name="ap_bucket"></a>
    <h1>struct ap_bucket</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/ap_buckets.h</td></tr></tr>
  </table>
  <p>
  ap_bucket_t structures are allocated on the malloc() heap and
  their lifetime is controlled by the parent ap_bucket_brigade
  structure. Buckets can move from one brigade to another e.g. by
  calling ap_brigade_concat(). In general the data in a bucket has
  the same lifetime as the bucket and is freed when the bucket is
  destroyed; if the data is shared by more than one bucket (e.g.
  after a split) the data is freed when the last bucket goes away.<h2>Member Index</h2>
  <ul><li><a href="Bucket_Brigades.html#ap_bucket-AP_RING_ENTRY">AP_RING_ENTRY(ap_bucket)</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket-data">    void *data</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket-length">    apr_off_t length</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket-type">    const ap_bucket_type *type</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="data"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    void *data;</b>
  <dd>
  type-dependent data hangs off this pointer
  <p><dl>
  </dl></dl>
  
    <a name="length"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_off_t length;</b>
  <dd>
  The length of the data in the bucket.  This could have been implemented
   with a function, but this is an optimization, because the most
   common thing to do will be to get the length.  If the length is unknown,
   the value of this field will be -1.
  <p><dl>
  </dl></dl>
  
    <a name="type"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    const ap_bucket_type *type;</b>
  <dd>
  The type of bucket.
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Class Methods</h2>
  <blockquote>
  
  <a name="ap_bucket-AP_RING_ENTRY"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>AP_RING_ENTRY(ap_bucket);</b>
    <dd>
  Links to the rest of the brigade
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="ap_bucket_brigade"></a>
    <h1>struct ap_bucket_brigade</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/ap_buckets.h</td></tr></tr>
  </table>
  <p>
  A list of buckets<h2>Member Index</h2>
  <ul><li><a href="Bucket_Brigades.html#ap_bucket_brigade-AP_RING_HEAD">AP_RING_HEAD(ap_bucket_list, ap_bucket)</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket_brigade-p">    apr_pool_t *p</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="p"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_pool_t *p;</b>
  <dd>
  The pool to associate the brigade with.  The data is not allocated out
   of the pool, but a cleanup is registered with this pool.  If the 
   brigade is destroyed by some mechanism other than pool destruction,
   the destroying function is responsible for killing the cleanup.
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Class Methods</h2>
  <blockquote>
  
  <a name="ap_bucket_brigade-AP_RING_HEAD"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>AP_RING_HEAD(ap_bucket_list, ap_bucket);</b>
    <dd>
  The buckets in the brigade are on this list.
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="ap_bucket_file"></a>
    <h1>struct ap_bucket_file</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/ap_buckets.h</td></tr></tr>
  </table>
  <p>
  A bucket referring to an file<h2>Member Index</h2>
  <ul><li><a href="Bucket_Brigades.html#ap_bucket_file-fd">    apr_file_t *fd</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket_file-offset">    apr_off_t offset</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="fd"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_file_t *fd;</b>
  <dd>
  The file this bucket refers to
  <p><dl>
  </dl></dl>
  
    <a name="offset"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_off_t offset;</b>
  <dd>
  The offset into the file
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="ap_bucket_heap"></a>
    <h1>struct ap_bucket_heap</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/ap_buckets.h</td></tr></tr>
  </table>
  <p>
  A bucket referring to data allocated off the heap.<h2>Member Index</h2>
  <ul><li><a href="Bucket_Brigades.html#ap_bucket_heap-alloc_len">    size_t  alloc_len</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket_heap-base">    char    *base</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket_heap-refcount">    ap_bucket_refcount  refcount</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="alloc_len"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    size_t  alloc_len;</b>
  <dd>
  how much memory was allocated.  This may not be necessary
  <p><dl>
  </dl></dl>
  
    <a name="base"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    char    *base;</b>
  <dd>
  The start of the data actually allocated.  This should never be
  modified, it is only used to free the bucket.
  <p><dl>
  </dl></dl>
  
    <a name="refcount"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    ap_bucket_refcount  refcount;</b>
  <dd>
  Number of buckets using this memory
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="ap_bucket_mmap"></a>
    <h1>struct ap_bucket_mmap</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/ap_buckets.h</td></tr></tr>
  </table>
  <p>
  A bucket referring to an mmap()ed file<h2>Member Index</h2>
  <ul><li><a href="Bucket_Brigades.html#ap_bucket_mmap-mmap">    apr_mmap_t *mmap</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket_mmap-refcount">    ap_bucket_refcount  refcount</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="mmap"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_mmap_t *mmap;</b>
  <dd>
  The mmap this sub_bucket refers to
  <p><dl>
  </dl></dl>
  
    <a name="refcount"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    ap_bucket_refcount  refcount;</b>
  <dd>
  Number of buckets using this memory
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="ap_bucket_pool"></a>
    <h1>struct ap_bucket_pool</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/ap_buckets.h</td></tr></tr>
  </table>
  <p>
  A bucket referring to data allocated out of a pool<h2>Member Index</h2>
  <ul><li><a href="Bucket_Brigades.html#ap_bucket_pool-b">    ap_bucket *b</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket_pool-base">    const char *base</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket_pool-p">    apr_pool_t  *p</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket_pool-refcount">    ap_bucket_refcount  refcount</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="b"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    ap_bucket *b;</b>
  <dd>
  This is a hack, because we call ap_destroy_bucket with the ->data
   pointer, so the pool cleanup needs to be registered with that pointer,
   but the whole point of the cleanup is to convert the bucket to another
   type.  To do that conversion, we need a pointer to the bucket itself.
   This gives us a pointer to the original bucket.
  <p><dl>
  </dl></dl>
  
    <a name="base"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    const char *base;</b>
  <dd>
  The start of the data actually allocated.  This should never be
  modified, it is only used to free the bucket.
  <p><dl>
  </dl></dl>
  
    <a name="p"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_pool_t  *p;</b>
  <dd>
  The pool the data was allocated out of
  <p><dl>
  </dl></dl>
  
    <a name="refcount"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    ap_bucket_refcount  refcount;</b>
  <dd>
  Number of buckets using this memory
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="ap_bucket_refcount"></a>
    <h1>struct ap_bucket_refcount</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/ap_buckets.h</td></tr></tr>
  </table>
  <p>
  The structure used to manage the shared resource must start with an
  ap_bucket_refcount which is updated by the general-purpose refcount
  code. A pointer to the bucket-type-dependent private data structure
  can be cast to a pointer to an ap_bucket_refcount and vice versa.<h2>Member Index</h2>
  <ul><li><a href="Bucket_Brigades.html#ap_bucket_refcount-refcount">    int          refcount</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="refcount"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int          refcount;</b>
  <dd>
  The number of references to this bucket
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="ap_bucket_shared"></a>
    <h1>struct ap_bucket_shared</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/ap_buckets.h</td></tr></tr>
  </table>
  <p>
  The data pointer of a refcounted bucket points to an
  ap_bucket_shared structure which describes the region of the shared
  object that this bucket refers to. The ap_bucket_shared isn't a
  fully-fledged bucket type: it is a utility type that proper bucket
  types are based on.<h2>Member Index</h2>
  <ul><li><a href="Bucket_Brigades.html#ap_bucket_shared-data">    void *data</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket_shared-end">    apr_off_t end</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket_shared-start">    apr_off_t start</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="data"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    void *data;</b>
  <dd>
  pointer to the real private data of the bucket,
  which starts with an ap_bucket_refcount
  <p><dl>
  </dl></dl>
  
    <a name="end"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_off_t end;</b>
  <dd>
  end of the data in the bucket relative to the private base pointer
  <p><dl>
  </dl></dl>
  
    <a name="start"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_off_t start;</b>
  <dd>
  start of the data in the bucket relative to the private base pointer
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="ap_bucket_simple"></a>
    <h1>struct ap_bucket_simple</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/ap_buckets.h</td></tr></tr>
  </table>
  <p>
  TRANSIENT and IMMORTAL buckets don't have much to do with looking
  after the memory that they refer to so they share a lot of their
  implementation.<h2>Member Index</h2>
  <ul><li><a href="Bucket_Brigades.html#ap_bucket_simple-end">    const char    *end</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket_simple-start">    const char    *start</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="end"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    const char    *end;</b>
  <dd>
  The end of the data in the bucket
  <p><dl>
  </dl></dl>
  
    <a name="start"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    const char    *start;</b>
  <dd>
  The start of the data in the bucket
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="ap_bucket_type"></a>
    <h1>struct ap_bucket_type</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/ap_buckets.h</td></tr></tr>
  </table>
  <p>
  Forward declaration of the main types.<h2>Member Index</h2>
  <ul><li><a href="Bucket_Brigades.html#ap_bucket_type-apr_status_t">apr_status_t read(ap_bucket *b, const char **str, apr_size_t *len, ap_read_type block)</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket_type-apr_status_t-2">apr_status_t setaside(ap_bucket *e)</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket_type-apr_status_t-3">apr_status_t split(ap_bucket *e, apr_off_t point)</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket_type-apr_status_t-4">apr_status_t copy</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket_type-name">    const char *name</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket_type-num_func">    int num_func</a>
  	<li><a href="Bucket_Brigades.html#ap_bucket_type-void">void(void *data)</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="name"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    const char *name;</b>
  <dd>
  The name of the bucket type
  <p><dl>
  </dl></dl>
  
    <a name="num_func"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int num_func;</b>
  <dd>
  The number of functions this bucket understands.  Can not be less than
  five.
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Class Methods</h2>
  <blockquote>
  
  <a name="ap_bucket_type-apr_status_t"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t read(ap_bucket *b, const char **str, apr_size_t *len, ap_read_type block);</b>
    <dd>
  Read the data from the bucket. This is guaranteed to be implemented
   for all bucket types.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to read from
  </td></tr>
  <tr valign=top><th align=right>
  	str</th><td>A place to store the data read.  Allocation should only be
             done if absolutely necessary.
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>The amount of data read.
  </td></tr>
  <tr valign=top><th align=right>
  	block</th><td>Should this read function block if there is more data that
               cannot be read immediately.</td></tr>
  </table>
    </dl></dl>
  
  <a name="ap_bucket_type-apr_status_t-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t setaside(ap_bucket *e);</b>
    <dd>
  Make it possible to set aside the data. Buckets containing data that
   dies when the stack is un-wound must convert the bucket into a heap
   bucket. For most bucket types, though, this is a no-op and this
   function will return APR_ENOTIMPL.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to convert</td></tr>
  </table>
    </dl></dl>
  
  <a name="ap_bucket_type-apr_status_t-3"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t split(ap_bucket *e, apr_off_t point);</b>
    <dd>
  Split one bucket in two at the specified position by duplicating
   the bucket structure (not the data) and modifying any necessary
   start/end/offset information.  If it's not possible to do this
   for the bucket type (perhaps the length of the data is indeterminate,
   as with pipe and socket buckets), then APR_ENOTIMPL is returned.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to split
  </td></tr>
  <tr valign=top><th align=right>
  	point</th><td>The offset of the first byte in the new bucket</td></tr>
  </table>
    <dt><b>See Also</b><dd>
    <a href="#ap_bucket_split_any().">ap_bucket_split_any().</a><p></dl></dl>
  
  <a name="ap_bucket_type-apr_status_t-4"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t copy;</b>
    <dd>
  Copy the bucket structure (not the data), assuming that this is
   possible for the bucket type. If it's not, APR_ENOTIMPL is returned.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to copy
  </td></tr>
  <tr valign=top><th align=right>
  	c</th><td>Returns a pointer to the new bucket</td></tr>
  </table>
    </dl></dl>
  
  <a name="ap_bucket_type-void"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void(void *data);</b>
    <dd>
  Free the private data and any resources used by the bucket
   (if they aren't shared with another bucket).
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The private data pointer from the bucket to be destroyed</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="apr_bucket"></a>
    <h1>struct apr_bucket</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_buckets.h</td></tr></tr>
  </table>
  <p>
  apr_bucket structures are allocated on the malloc() heap and
  their lifetime is controlled by the parent apr_bucket_brigade
  structure. Buckets can move from one brigade to another e.g. by
  calling apr_brigade_concat(). In general the data in a bucket has
  the same lifetime as the bucket and is freed when the bucket is
  destroyed; if the data is shared by more than one bucket (e.g.
  after a split) the data is freed when the last bucket goes away.<h2>Member Index</h2>
  <ul><li><a href="Bucket_Brigades.html#apr_bucket-APR_RING_ENTRY">APR_RING_ENTRY(apr_bucket)</a>
  	<li><a href="Bucket_Brigades.html#apr_bucket-data">    void *data</a>
  	<li><a href="Bucket_Brigades.html#apr_bucket-length">    apr_off_t length</a>
  	<li><a href="Bucket_Brigades.html#apr_bucket-start">    apr_off_t start</a>
  	<li><a href="Bucket_Brigades.html#apr_bucket-type">    const apr_bucket_type_t *type</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="data"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    void *data;</b>
  <dd>
  type-dependent data hangs off this pointer
  <p><dl>
  </dl></dl>
  
    <a name="length"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_off_t length;</b>
  <dd>
  The length of the data in the bucket.  This could have been implemented
   with a function, but this is an optimization, because the most
   common thing to do will be to get the length.  If the length is unknown,
   the value of this field will be -1.
  <p><dl>
  </dl></dl>
  
    <a name="start"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_off_t start;</b>
  <dd>
  The start of the data in the bucket relative to the private base
   pointer.  The vast majority of bucket types allow a fixed block of
   data to be referenced by multiple buckets, each bucket pointing to
   a different segment of the data.  That segment starts at base+start
   and ends at base+start+length.  If length == -1, start == -1.
  <p><dl>
  </dl></dl>
  
    <a name="type"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    const apr_bucket_type_t *type;</b>
  <dd>
  The type of bucket.
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Class Methods</h2>
  <blockquote>
  
  <a name="apr_bucket-APR_RING_ENTRY"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APR_RING_ENTRY(apr_bucket);</b>
    <dd>
  Links to the rest of the brigade
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="apr_bucket_brigade"></a>
    <h1>struct apr_bucket_brigade</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_buckets.h</td></tr></tr>
  </table>
  <p>
  A list of buckets<h2>Member Index</h2>
  <ul><li><a href="Bucket_Brigades.html#apr_bucket_brigade-APR_RING_HEAD">APR_RING_HEAD(apr_bucket_list, apr_bucket)</a>
  	<li><a href="Bucket_Brigades.html#apr_bucket_brigade-p">    apr_pool_t *p</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="p"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_pool_t *p;</b>
  <dd>
  The pool to associate the brigade with.  The data is not allocated out
   of the pool, but a cleanup is registered with this pool.  If the 
   brigade is destroyed by some mechanism other than pool destruction,
   the destroying function is responsible for killing the cleanup.
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Class Methods</h2>
  <blockquote>
  
  <a name="apr_bucket_brigade-APR_RING_HEAD"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APR_RING_HEAD(apr_bucket_list, apr_bucket);</b>
    <dd>
  The buckets in the brigade are on this list.
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="apr_bucket_file"></a>
    <h1>struct apr_bucket_file</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_buckets.h</td></tr></tr>
  </table>
  <p>
  A bucket referring to an file<h2>Member Index</h2>
  <ul><li><a href="Bucket_Brigades.html#apr_bucket_file-fd">    apr_file_t *fd</a>
  	<li><a href="Bucket_Brigades.html#apr_bucket_file-refcount">    apr_bucket_refcount  refcount</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="fd"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_file_t *fd;</b>
  <dd>
  The file this bucket refers to
  <p><dl>
  </dl></dl>
  
    <a name="refcount"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_bucket_refcount  refcount;</b>
  <dd>
  Number of buckets using this memory
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="apr_bucket_heap"></a>
    <h1>struct apr_bucket_heap</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_buckets.h</td></tr></tr>
  </table>
  <p>
  A bucket referring to data allocated off the heap.<h2>Member Index</h2>
  <ul><li><a href="Bucket_Brigades.html#apr_bucket_heap-alloc_len">    size_t  alloc_len</a>
  	<li><a href="Bucket_Brigades.html#apr_bucket_heap-base">    char    *base</a>
  	<li><a href="Bucket_Brigades.html#apr_bucket_heap-refcount">    apr_bucket_refcount  refcount</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="alloc_len"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    size_t  alloc_len;</b>
  <dd>
  how much memory was allocated
  <p><dl>
  </dl></dl>
  
    <a name="base"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    char    *base;</b>
  <dd>
  The start of the data actually allocated.  This should never be
  modified, it is only used to free the bucket.
  <p><dl>
  </dl></dl>
  
    <a name="refcount"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_bucket_refcount  refcount;</b>
  <dd>
  Number of buckets using this memory
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="apr_bucket_mmap"></a>
    <h1>struct apr_bucket_mmap</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_buckets.h</td></tr></tr>
  </table>
  <p>
  A bucket referring to an mmap()ed file<h2>Member Index</h2>
  <ul><li><a href="Bucket_Brigades.html#apr_bucket_mmap-mmap">    apr_mmap_t *mmap</a>
  	<li><a href="Bucket_Brigades.html#apr_bucket_mmap-refcount">    apr_bucket_refcount  refcount</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="mmap"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_mmap_t *mmap;</b>
  <dd>
  The mmap this sub_bucket refers to
  <p><dl>
  </dl></dl>
  
    <a name="refcount"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_bucket_refcount  refcount;</b>
  <dd>
  Number of buckets using this memory
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="apr_bucket_pool"></a>
    <h1>struct apr_bucket_pool</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_buckets.h</td></tr></tr>
  </table>
  <p>
  A bucket referring to data allocated from a pool<h2>Member Index</h2>
  <ul><li><a href="Bucket_Brigades.html#apr_bucket_pool-base">    const char *base</a>
  	<li><a href="Bucket_Brigades.html#apr_bucket_pool-heap">    apr_bucket_heap  heap</a>
  	<li><a href="Bucket_Brigades.html#apr_bucket_pool-pool">    apr_pool_t *pool</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="base"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    const char *base;</b>
  <dd>
  The block of data actually allocated from the pool.
  Segments of this block are referenced by adjusting
  the start and length of the apr_bucket accordingly.
  This will be NULL after the pool gets cleaned up.
  <p><dl>
  </dl></dl>
  
    <a name="heap"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_bucket_heap  heap;</b>
  <dd>
  The pool bucket must be able to be easily morphed to a heap
  bucket if the pool gets cleaned up before all references are
  destroyed.  This apr_bucket_heap structure is populated automatically
  when the pool gets cleaned up, and subsequent calls to pool_read()
  will result in the apr_bucket in question being morphed into a
  regular heap bucket.  (To avoid having to do many extra refcount
  manipulations and b->data manipulations, the apr_bucket_pool
  struct actually *contains* the apr_bucket_heap struct that it
  will become as its first element; the two share their
  apr_bucket_refcount members.)
  <p><dl>
  </dl></dl>
  
    <a name="pool"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_pool_t *pool;</b>
  <dd>
  The pool the data was allocated from.  When the pool
  is cleaned up, this gets set to NULL as an indicator
  to pool_read() that the data is now on the heap and
  so it should morph the bucket into a regular heap
  bucket before continuing.
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="apr_bucket_refcount"></a>
    <h1>struct apr_bucket_refcount</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_buckets.h</td></tr></tr>
  </table>
  <p>
  The structure used to manage the shared resource must start with an
  apr_bucket_refcount which is updated by the general-purpose refcount
  code. A pointer to the bucket-type-dependent private data structure
  can be cast to a pointer to an apr_bucket_refcount and vice versa.<h2>Member Index</h2>
  <ul><li><a href="Bucket_Brigades.html#apr_bucket_refcount-refcount">    int          refcount</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="refcount"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int          refcount;</b>
  <dd>
  The number of references to this bucket
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="apr_bucket_type_t"></a>
    <h1>struct apr_bucket_type_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_buckets.h</td></tr></tr>
  </table>
  <p>
  Forward declaration of the main types.<h2>Member Index</h2>
  <ul><li><a href="Bucket_Brigades.html#apr_bucket_type_t-apr_status_t">apr_status_t read(apr_bucket *b, const char **str, apr_size_t *len, apr_read_type_e block)</a>
  	<li><a href="Bucket_Brigades.html#apr_bucket_type_t-apr_status_t-2">apr_status_t setaside(apr_bucket *e)</a>
  	<li><a href="Bucket_Brigades.html#apr_bucket_type_t-apr_status_t-3">apr_status_t split(apr_bucket *e, apr_off_t point)</a>
  	<li><a href="Bucket_Brigades.html#apr_bucket_type_t-apr_status_t-4">apr_status_t copy</a>
  	<li><a href="Bucket_Brigades.html#apr_bucket_type_t-name">    const char *name</a>
  	<li><a href="Bucket_Brigades.html#apr_bucket_type_t-num_func">    int num_func</a>
  	<li><a href="Bucket_Brigades.html#apr_bucket_type_t-void">void(void *data)</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="name"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    const char *name;</b>
  <dd>
  The name of the bucket type
  <p><dl>
  </dl></dl>
  
    <a name="num_func"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int num_func;</b>
  <dd>
  The number of functions this bucket understands.  Can not be less than
  five.
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Class Methods</h2>
  <blockquote>
  
  <a name="apr_bucket_type_t-apr_status_t"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t read(apr_bucket *b, const char **str, apr_size_t *len, apr_read_type_e block);</b>
    <dd>
  Read the data from the bucket. This is guaranteed to be implemented
   for all bucket types.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to read from
  </td></tr>
  <tr valign=top><th align=right>
  	str</th><td>A place to store the data read.  Allocation should only be
             done if absolutely necessary.
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>The amount of data read.
  </td></tr>
  <tr valign=top><th align=right>
  	block</th><td>Should this read function block if there is more data that
               cannot be read immediately.</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_bucket_type_t-apr_status_t-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t setaside(apr_bucket *e);</b>
    <dd>
  Make it possible to set aside the data. Buckets containing data that
   dies when the stack is un-wound must convert the bucket into a heap
   bucket. For most bucket types, though, this is a no-op and this
   function will return APR_ENOTIMPL.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to convert</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_bucket_type_t-apr_status_t-3"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t split(apr_bucket *e, apr_off_t point);</b>
    <dd>
  Split one bucket in two at the specified position by duplicating
   the bucket structure (not the data) and modifying any necessary
   start/end/offset information.  If it's not possible to do this
   for the bucket type (perhaps the length of the data is indeterminate,
   as with pipe and socket buckets), then APR_ENOTIMPL is returned.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to split
  </td></tr>
  <tr valign=top><th align=right>
  	point</th><td>The offset of the first byte in the new bucket</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_bucket_type_t-apr_status_t-4"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t copy;</b>
    <dd>
  Copy the bucket structure (not the data), assuming that this is
   possible for the bucket type. If it's not, APR_ENOTIMPL is returned.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to copy
  </td></tr>
  <tr valign=top><th align=right>
  	c</th><td>Returns a pointer to the new bucket</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_bucket_type_t-void"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void(void *data);</b>
    <dd>
  Free the private data and any resources used by the bucket
   (if they aren't shared with another bucket).
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The private data pointer from the bucket to be destroyed</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  <h2>Global Variables</h2>
    <blockquote>
  
    <a name="ap_eos_type"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APR_DECLARE_DATA extern const ap_bucket_type ap_eos_type;</b>
  <dd>
  The EOS bucket type.  This signifies that there will be no more data, ever.
  All filters MUST send all data to the next filter when they receive a
  bucket of this type
  <p><dl>
  </dl></dl>
  
    <a name="ap_file_type"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APR_DECLARE_DATA extern const ap_bucket_type ap_file_type;</b>
  <dd>
  The FILE bucket type.  This bucket represents a file on disk
  <p><dl>
  </dl></dl>
  
    <a name="ap_flush_type"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APR_DECLARE_DATA extern const ap_bucket_type ap_flush_type;</b>
  <dd>
  The flush bucket type.  This signifies that all data should be flushed to
  the next filter.  The flush bucket should be sent with the other buckets.
  <p><dl>
  </dl></dl>
  
    <a name="ap_heap_type"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APR_DECLARE_DATA extern const ap_bucket_type ap_heap_type;</b>
  <dd>
  The HEAP bucket type.  This bucket represents a data allocated out of the
  heap.
  <p><dl>
  </dl></dl>
  
    <a name="ap_immortal_type"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APR_DECLARE_DATA extern const ap_bucket_type ap_immortal_type;</b>
  <dd>
  The IMMORTAL bucket type.  This bucket represents a segment of data that
  the creator is willing to take responsability for.  The core will do
  nothing with the data in an immortal bucket
  <p><dl>
  </dl></dl>
  
    <a name="ap_mmap_type"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APR_DECLARE_DATA extern const ap_bucket_type ap_mmap_type;</b>
  <dd>
  The MMAP bucket type.  This bucket represents an MMAP'ed file
  <p><dl>
  </dl></dl>
  
    <a name="ap_pipe_type"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APR_DECLARE_DATA extern const ap_bucket_type ap_pipe_type;</b>
  <dd>
  The PIPE bucket type.  This bucket represents a pipe to another program.
  <p><dl>
  </dl></dl>
  
    <a name="ap_pool_type"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APR_DECLARE_DATA extern const ap_bucket_type ap_pool_type;</b>
  <dd>
  The POOL bucket type.  This bucket represents a data that was allocated
  out of a pool.  IF this bucket is still available when the pool is cleared,
  the data is copied on to the heap.
  <p><dl>
  </dl></dl>
  
    <a name="ap_socket_type"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APR_DECLARE_DATA extern const ap_bucket_type ap_socket_type;</b>
  <dd>
  The SOCKET bucket type.  This bucket represents a socket to another machine
  <p><dl>
  </dl></dl>
  
    <a name="ap_transient_type"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APR_DECLARE_DATA extern const ap_bucket_type ap_transient_type;</b>
  <dd>
  The TRANSIENT bucket type.  This bucket represents a data allocated off
  the stack.  When the setaside function is called, this data is copied on
  to the heap
  <p><dl>
  </dl></dl>
  
    <a name="apr_bucket_type_eos"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_eos;</b>
  <dd>
  The EOS bucket type.  This signifies that there will be no more data, ever.
  All filters MUST send all data to the next filter when they receive a
  bucket of this type
  <p><dl>
  </dl></dl>
  
    <a name="apr_bucket_type_file"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_file;</b>
  <dd>
  The FILE bucket type.  This bucket represents a file on disk
  <p><dl>
  </dl></dl>
  
    <a name="apr_bucket_type_flush"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_flush;</b>
  <dd>
  The flush bucket type.  This signifies that all data should be flushed to
  the next filter.  The flush bucket should be sent with the other buckets.
  <p><dl>
  </dl></dl>
  
    <a name="apr_bucket_type_heap"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_heap;</b>
  <dd>
  The HEAP bucket type.  This bucket represents a data allocated from the
  heap.
  <p><dl>
  </dl></dl>
  
    <a name="apr_bucket_type_immortal"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_immortal;</b>
  <dd>
  The IMMORTAL bucket type.  This bucket represents a segment of data that
  the creator is willing to take responsability for.  The core will do
  nothing with the data in an immortal bucket
  <p><dl>
  </dl></dl>
  
    <a name="apr_bucket_type_mmap"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_mmap;</b>
  <dd>
  The MMAP bucket type.  This bucket represents an MMAP'ed file
  <p><dl>
  </dl></dl>
  
    <a name="apr_bucket_type_pipe"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_pipe;</b>
  <dd>
  The PIPE bucket type.  This bucket represents a pipe to another program.
  <p><dl>
  </dl></dl>
  
    <a name="apr_bucket_type_pool"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_pool;</b>
  <dd>
  The POOL bucket type.  This bucket represents a data that was allocated
  from a pool.  IF this bucket is still available when the pool is cleared,
  the data is copied on to the heap.
  <p><dl>
  </dl></dl>
  
    <a name="apr_bucket_type_socket"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_socket;</b>
  <dd>
  The SOCKET bucket type.  This bucket represents a socket to another machine
  <p><dl>
  </dl></dl>
  
    <a name="apr_bucket_type_transient"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_transient;</b>
  <dd>
  The TRANSIENT bucket type.  This bucket represents a data allocated off
  the stack.  When the setaside function is called, this data is copied on
  to the heap
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="AP_BRIGADE_EMPTY(ap_bucket_brigade"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>AP_BRIGADE_EMPTY(ap_bucket_brigade *b);</b>
    <dd>
  Determine if the bucket brigade is empty
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to check</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="ap_bucket"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *AP_BUCKET_FIRST(ap_bucket_brigade *b);</b>
    <dd>
  Return the first bucket in a brigade
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to query</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The first bucket in the brigade<p></dl></dl>
  
  <a name="ap_bucket-10"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_make_flush(ap_bucket *b);</b>
    <dd>
  Make the bucket passed in a FLUSH  bucket.  This indicates that filters 
  should flush their data.  There is no guarantee that they will flush it, 
  but this is the best we can do.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into a FLUSH bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-11"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_create_transient(const char *buf, apr_size_t nbyte, apr_size_t *w);</b>
    <dd>
  Create a bucket referring to long-lived data.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	buf</th><td>The data to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	nbyte</th><td>The size of the data to insert.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-12"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_make_immortal(ap_bucket *b, const char *buf, apr_size_t nbyte, apr_size_t *w);</b>
    <dd>
  Make the bucket passed in a bucket refer to long-lived data
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into a IMMORTAL bucket
  </td></tr>
  <tr valign=top><th align=right>
  	buf</th><td>The data to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	nbyte</th><td>The size of the data to insert.
  </td></tr>
  <tr valign=top><th align=right>
  	w</th><td>The number of bytes added to the bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-13"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_create_transient(const char *buf, apr_size_t nbyte, apr_size_t *w);</b>
    <dd>
  Create a bucket referring to data on the stack.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	buf</th><td>The data to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	nbyte</th><td>The size of the data to insert.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-14"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_make_transient(ap_bucket *b, const char *buf, apr_size_t nbyte);</b>
    <dd>
  Make the bucket passed in a bucket refer to stack data
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into a TRANSIENT bucket
  </td></tr>
  <tr valign=top><th align=right>
  	buf</th><td>The data to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	nbyte</th><td>The size of the data to insert.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-15"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_create_heap(const char *buf, apr_size_t nbyte, int copy, apr_size_t *w);</b>
    <dd>
  Create a bucket referring to memory on the heap. If the caller asks
  for the data to be copied, this function always allocates 4K of
  memory so that more data can be added to the bucket without
  requiring another allocation. Therefore not all the data may be put
  into the bucket. If copying is not requested then the bucket takes
  over responsibility for free()ing the memory.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	buf</th><td>The buffer to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	nbyte</th><td>The size of the buffer to insert.
  </td></tr>
  <tr valign=top><th align=right>
  	copy</th><td>Whether to copy the data into newly-allocated memory or not
  </td></tr>
  <tr valign=top><th align=right>
  	w</th><td>The number of bytes actually copied into the bucket.
           If copy is zero then this return value can be ignored by passing a NULL pointer.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-16"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_make_heap(ap_bucket *b, const char *buf, apr_size_t nbyte, int copy, apr_size_t *w);</b>
    <dd>
  Make the bucket passed in a bucket refer to heap data
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into a HEAP bucket
  </td></tr>
  <tr valign=top><th align=right>
  	buf</th><td>The buffer to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	nbyte</th><td>The size of the buffer to insert.
  </td></tr>
  <tr valign=top><th align=right>
  	copy</th><td>Whether to copy the data into newly-allocated memory or not
  </td></tr>
  <tr valign=top><th align=right>
  	w</th><td>The number of bytes actually copied into the bucket.
           If copy is zero then this return value can be ignored by passing a NULL pointer.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-17"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_create_pool(const char *buf, apr_size_t *length, apr_pool_t *p);</b>
    <dd>
  Create a bucket referring to memory allocated out of a pool.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	buf</th><td>The buffer to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	p</th><td>The pool the memory was allocated out of</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-18"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_make_pool(ap_bucket *b, const char *buf, apr_size_t *length, apr_pool_t *p);</b>
    <dd>
  Make the bucket passed in a bucket refer to pool data
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into a HEAP bucket
  </td></tr>
  <tr valign=top><th align=right>
  	buf</th><td>The buffer to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	p</th><td>The pool the memory was allocated out of</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-19"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_create_mmap(const apr_mmap_t *mm, apr_size_t start, apr_size_t length);</b>
    <dd>
  Create a bucket referring to mmap()ed memory.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	mmap</th><td>The mmap to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	start</th><td>The offset of the first byte in the mmap
               that this bucket refers to
  </td></tr>
  <tr valign=top><th align=right>
  	length</th><td>The number of bytes referred to by this bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *AP_BUCKET_LAST(ap_bucket_brigade *b);</b>
    <dd>
  Return the last bucket in a brigade
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to query</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The last bucket in the brigade<p></dl></dl>
  
  <a name="ap_bucket-20"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_make_mmap(ap_bucket *b, const apr_mmap_t *mm, apr_size_t start, apr_size_t length);</b>
    <dd>
  Make the bucket passed in a bucket refer to an MMAP'ed file
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into a MMAP bucket
  </td></tr>
  <tr valign=top><th align=right>
  	mmap</th><td>The mmap to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	start</th><td>The offset of the first byte in the mmap
               that this bucket refers to
  </td></tr>
  <tr valign=top><th align=right>
  	length</th><td>The number of bytes referred to by this bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-21"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_create_socket(apr_socket_t *thissocket);</b>
    <dd>
  Create a bucket referring to a socket.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thissocket</th><td>The socket to put in the bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-22"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_make_socket(ap_bucket *b, apr_socket_t *thissocket);</b>
    <dd>
  Make the bucket passed in a bucket refer to a socket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into a SOCKET bucket
  </td></tr>
  <tr valign=top><th align=right>
  	thissocket</th><td>The socket to put in the bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-23"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_create_pipe(apr_file_t *thispipe);</b>
    <dd>
  Create a bucket referring to a pipe.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thispipe</th><td>The pipe to put in the bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-24"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_make_pipe(ap_bucket *b, apr_file_t *thispipe);</b>
    <dd>
  Make the bucket passed in a bucket refer to a pipe
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into a PIPE bucket
  </td></tr>
  <tr valign=top><th align=right>
  	thispipe</th><td>The pipe to put in the bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-25"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_create_file(apr_file_t *fd, apr_off_t offset, apr_size_t len);</b>
    <dd>
  Create a bucket referring to a file.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	fd</th><td>The file to put in the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	offset</th><td>The offset where the data of interest begins in the file
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>The amount of data in the file we are interested in</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-26"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_make_file(ap_bucket *b, apr_file_t *fd, apr_off_t offset, apr_size_t len);</b>
    <dd>
  Make the bucket passed in a bucket refer to a file
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into a FILE bucket
  </td></tr>
  <tr valign=top><th align=right>
  	fd</th><td>The file to put in the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	offset</th><td>The offset where the data of interest begins in the file
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>The amount of data in the file we are interested in</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-3"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *AP_BUCKET_NEXT(ap_bucket *e);</b>
    <dd>
  Get the next bucket in the list
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The current bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The next bucket<p></dl></dl>
  
  <a name="ap_bucket-4"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *AP_BUCKET_PREV(ap_bucket *e);</b>
    <dd>
  Get the previous bucket in the list
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The current bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The previous bucket<p></dl></dl>
  
  <a name="ap_bucket-5"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_brigade_partition(ap_bucket_brigade *b, apr_off_t point);</b>
    <dd>
  Partition a bucket brigade at a given offset (in bytes from the start of
  the brigade).  This is useful whenever a filter wants to use known ranges
  of bytes from the brigade; the ranges can even overlap.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to partition
  </td></tr>
  <tr valign=top><th align=right>
  	point</th><td>The offset at which to partition the brigade</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>A pointer to the first bucket after the partition;
          or NULL in any error condition (including partition past the end)<p></dl></dl>
  
  <a name="ap_bucket-6"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_make_shared(ap_bucket_refcount *r, apr_off_t start, apr_off_t end) ;</b>
    <dd>
  Initialize a bucket containing reference-counted data that may be
  shared. The caller must allocate the bucket if necessary and
  initialize its type-dependent fields, and allocate and initialize
  its own private data structure. This function should only be called
  by type-specific bucket creation functions.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to initialize,
           or NULL if a new one should be allocated
  </td></tr>
  <tr valign=top><th align=right>
  	data</th><td>A pointer to the private data structure
              with the reference count at the start
  </td></tr>
  <tr valign=top><th align=right>
  	start</th><td>The start of the data in the bucket
               relative to the private base pointer
  </td></tr>
  <tr valign=top><th align=right>
  	end</th><td>The end of the data in the bucket
             relative to the private base pointer</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-7"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_create_eos(void);</b>
    <dd>
  Create an End of Stream bucket.  This indicates that there is no more data
  coming from down the filter stack.  All filters should flush at this point.
  <p><dl>
  <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-8"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_make_eos(ap_bucket *b);</b>
    <dd>
  Make the bucket passed in an EOS bucket.  This indicates that there is no 
  more data coming from down the filter stack.  All filters should flush at 
  this point.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into an EOS bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket-9"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket *ap_bucket_create_flush(void);</b>
    <dd>
  Create a flush  bucket.  This indicates that filters should flush their
  data.  There is no guarantee that they will flush it, but this is the
  best we can do.
  <p><dl>
  <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="ap_bucket_brigade"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket_brigade *ap_brigade_create(apr_pool_t *p);</b>
    <dd>
  Create a new bucket brigade.  The bucket brigade is originally empty.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	The</th><td>pool to associate with the brigade.  Data is not allocated out
         of the pool, but a cleanup is registered.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The empty bucket brigade<p></dl></dl>
  
  <a name="ap_bucket_brigade-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>ap_bucket_brigade *ap_brigade_split(ap_bucket_brigade *b, ap_bucket *e);</b>
    <dd>
  Split a bucket brigade into two, such that the given bucket is the
  first in the new bucket brigade. This function is useful when a
  filter wants to pass only the initial part of a brigade to the next
  filter.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to split
  </td></tr>
  <tr valign=top><th align=right>
  	e</th><td>The first element of the new brigade</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new brigade<p></dl></dl>
  
  <a name="ap_insert_bucket_type"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int ap_insert_bucket_type(const ap_bucket_type *type);</b>
    <dd>
  Register a new bucket type
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	type</th><td>The new bucket type to register</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The offset into the array in which the bucket types are stored<p></dl></dl>
  
  <a name="apr_bucket"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *APR_BRIGADE_SENTINEL(apr_bucket_brigade *b);</b>
    <dd>
  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
  <p><img src="../images//tip.gif"> This is used to find the beginning and end of the brigade, eg:
  <pre>
       while (e != APR_BRIGADE_SENTINEL(b)) {
           ...
           e = APR_BUCKET_NEXT(e);
       }
  </pre>
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The magic pointer value<p></dl></dl>
  
  <a name="apr_bucket-10"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_flush_create(void);</b>
    <dd>
  Create a flush  bucket.  This indicates that filters should flush their
  data.  There is no guarantee that they will flush it, but this is the
  best we can do.
  <p><dl>
  <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-11"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_flush_make(apr_bucket *b);</b>
    <dd>
  Make the bucket passed in a FLUSH  bucket.  This indicates that filters 
  should flush their data.  There is no guarantee that they will flush it, 
  but this is the best we can do.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into a FLUSH bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-12"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_immortal_create(const char *buf, apr_size_t nbyte, apr_size_t *w);</b>
    <dd>
  Create a bucket referring to long-lived data.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	buf</th><td>The data to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	nbyte</th><td>The size of the data to insert.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-13"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_immortal_make(apr_bucket *b, const char *buf, apr_size_t nbyte, apr_size_t *w);</b>
    <dd>
  Make the bucket passed in a bucket refer to long-lived data
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into a IMMORTAL bucket
  </td></tr>
  <tr valign=top><th align=right>
  	buf</th><td>The data to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	nbyte</th><td>The size of the data to insert.
  </td></tr>
  <tr valign=top><th align=right>
  	w</th><td>The number of bytes added to the bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-14"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_transient_create(const char *buf, apr_size_t nbyte, apr_size_t *w);</b>
    <dd>
  Create a bucket referring to data on the stack.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	buf</th><td>The data to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	nbyte</th><td>The size of the data to insert.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-15"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_transient_make(apr_bucket *b, const char *buf, apr_size_t nbyte);</b>
    <dd>
  Make the bucket passed in a bucket refer to stack data
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into a TRANSIENT bucket
  </td></tr>
  <tr valign=top><th align=right>
  	buf</th><td>The data to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	nbyte</th><td>The size of the data to insert.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-16"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_heap_create(const char *buf, apr_size_t nbyte, int copy, apr_size_t *w);</b>
    <dd>
  Create a bucket referring to memory on the heap. If the caller asks
  for the data to be copied, this function always allocates 4K of
  memory so that more data can be added to the bucket without
  requiring another allocation. Therefore not all the data may be put
  into the bucket. If copying is not requested then the bucket takes
  over responsibility for free()ing the memory.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	buf</th><td>The buffer to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	nbyte</th><td>The size of the buffer to insert.
  </td></tr>
  <tr valign=top><th align=right>
  	copy</th><td>Whether to copy the data into newly-allocated memory or not
  </td></tr>
  <tr valign=top><th align=right>
  	w</th><td>The number of bytes actually copied into the bucket.
           If copy is zero then this return value can be ignored by passing a NULL pointer.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-17"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_heap_make(apr_bucket *b, const char *buf, apr_size_t nbyte, int copy, apr_size_t *w);</b>
    <dd>
  Make the bucket passed in a bucket refer to heap data
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into a HEAP bucket
  </td></tr>
  <tr valign=top><th align=right>
  	buf</th><td>The buffer to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	nbyte</th><td>The size of the buffer to insert.
  </td></tr>
  <tr valign=top><th align=right>
  	copy</th><td>Whether to copy the data into newly-allocated memory or not
  </td></tr>
  <tr valign=top><th align=right>
  	w</th><td>The number of bytes actually copied into the bucket.
           If copy is zero then this return value can be ignored by passing a NULL pointer.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-18"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_pool_create(const char *buf, apr_size_t *length, apr_pool_t *pool);</b>
    <dd>
  Create a bucket referring to memory allocated from a pool.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	buf</th><td>The buffer to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	pool</th><td>The pool the memory was allocated from</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-19"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_pool_make(apr_bucket *b, const char *buf, apr_size_t *length, apr_pool_t *pool);</b>
    <dd>
  Make the bucket passed in a bucket refer to pool data
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into a pool bucket
  </td></tr>
  <tr valign=top><th align=right>
  	buf</th><td>The buffer to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	pool</th><td>The pool the memory was allocated from</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *APR_BUCKET_FIRST(apr_bucket_brigade *b);</b>
    <dd>
  Return the first bucket in a brigade
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to query</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The first bucket in the brigade<p></dl></dl>
  
  <a name="apr_bucket-20"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_mmap_create(const apr_mmap_t *mm, apr_size_t start, apr_size_t length);</b>
    <dd>
  Create a bucket referring to mmap()ed memory.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	mmap</th><td>The mmap to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	start</th><td>The offset of the first byte in the mmap
               that this bucket refers to
  </td></tr>
  <tr valign=top><th align=right>
  	length</th><td>The number of bytes referred to by this bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-21"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_mmap_make(apr_bucket *b, const apr_mmap_t *mm, apr_size_t start, apr_size_t length);</b>
    <dd>
  Make the bucket passed in a bucket refer to an MMAP'ed file
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into a MMAP bucket
  </td></tr>
  <tr valign=top><th align=right>
  	mmap</th><td>The mmap to insert into the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	start</th><td>The offset of the first byte in the mmap
               that this bucket refers to
  </td></tr>
  <tr valign=top><th align=right>
  	length</th><td>The number of bytes referred to by this bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-22"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_socket_create(apr_socket_t *thissocket);</b>
    <dd>
  Create a bucket referring to a socket.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thissocket</th><td>The socket to put in the bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-23"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_socket_make(apr_bucket *b, apr_socket_t *thissocket);</b>
    <dd>
  Make the bucket passed in a bucket refer to a socket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into a SOCKET bucket
  </td></tr>
  <tr valign=top><th align=right>
  	thissocket</th><td>The socket to put in the bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-24"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_pipe_create(apr_file_t *thispipe);</b>
    <dd>
  Create a bucket referring to a pipe.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	thispipe</th><td>The pipe to put in the bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-25"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_pipe_make(apr_bucket *b, apr_file_t *thispipe);</b>
    <dd>
  Make the bucket passed in a bucket refer to a pipe
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into a PIPE bucket
  </td></tr>
  <tr valign=top><th align=right>
  	thispipe</th><td>The pipe to put in the bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-26"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_file_create(apr_file_t *fd, apr_off_t offset, apr_size_t len);</b>
    <dd>
  Create a bucket referring to a file.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	fd</th><td>The file to put in the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	offset</th><td>The offset where the data of interest begins in the file
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>The amount of data in the file we are interested in</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-27"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_file_make(apr_bucket *b, apr_file_t *fd, apr_off_t offset, apr_size_t len);</b>
    <dd>
  Make the bucket passed in a bucket refer to a file
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into a FILE bucket
  </td></tr>
  <tr valign=top><th align=right>
  	fd</th><td>The file to put in the bucket
  </td></tr>
  <tr valign=top><th align=right>
  	offset</th><td>The offset where the data of interest begins in the file
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>The amount of data in the file we are interested in</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-3"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *APR_BUCKET_LAST(apr_bucket_brigade *b);</b>
    <dd>
  Return the last bucket in a brigade
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to query</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The last bucket in the brigade<p></dl></dl>
  
  <a name="apr_bucket-4"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *APR_BUCKET_NEXT(apr_bucket *e);</b>
    <dd>
  Get the next bucket in the list
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The current bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The next bucket<p></dl></dl>
  
  <a name="apr_bucket-5"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *APR_BUCKET_PREV(apr_bucket *e);</b>
    <dd>
  Get the previous bucket in the list
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The current bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The previous bucket<p></dl></dl>
  
  <a name="apr_bucket-6"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_brigade_partition(apr_bucket_brigade *b, apr_off_t point);</b>
    <dd>
  Partition a bucket brigade at a given offset (in bytes from the start of
  the brigade).  This is useful whenever a filter wants to use known ranges
  of bytes from the brigade; the ranges can even overlap.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to partition
  </td></tr>
  <tr valign=top><th align=right>
  	point</th><td>The offset at which to partition the brigade</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>A pointer to the first bucket after the partition;
          or NULL in any error condition (including partition past the end)<p></dl></dl>
  
  <a name="apr_bucket-7"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_shared_make(apr_bucket_refcount *r, apr_off_t start, apr_off_t length) ;</b>
    <dd>
  Initialize a bucket containing reference-counted data that may be
  shared. The caller must allocate the bucket if necessary and
  initialize its type-dependent fields, and allocate and initialize
  its own private data structure. This function should only be called
  by type-specific bucket creation functions.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to initialize
  </td></tr>
  <tr valign=top><th align=right>
  	data</th><td>A pointer to the private data structure
              with the reference count at the start
  </td></tr>
  <tr valign=top><th align=right>
  	start</th><td>The start of the data in the bucket
               relative to the private base pointer
  </td></tr>
  <tr valign=top><th align=right>
  	length</th><td>The length of the data in the bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-8"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_eos_create(void);</b>
    <dd>
  Create an End of Stream bucket.  This indicates that there is no more data
  coming from down the filter stack.  All filters should flush at this point.
  <p><dl>
  <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket-9"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket *apr_bucket_eos_make(apr_bucket *b);</b>
    <dd>
  Make the bucket passed in an EOS bucket.  This indicates that there is no 
  more data coming from down the filter stack.  All filters should flush at 
  this point.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to make into an EOS bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new bucket, or NULL if allocation failed<p></dl></dl>
  
  <a name="apr_bucket_brigade"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket_brigade *apr_brigade_create(apr_pool_t *p);</b>
    <dd>
  Create a new bucket brigade.  The bucket brigade is originally empty.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	The</th><td>pool to associate with the brigade.  Data is not allocated out
         of the pool, but a cleanup is registered.</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The empty bucket brigade<p></dl></dl>
  
  <a name="apr_bucket_brigade-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_bucket_brigade *apr_brigade_split(apr_bucket_brigade *b, apr_bucket *e);</b>
    <dd>
  Split a bucket brigade into two, such that the given bucket is the
  first in the new bucket brigade. This function is useful when a
  filter wants to pass only the initial part of a brigade to the next
  filter.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to split
  </td></tr>
  <tr valign=top><th align=right>
  	e</th><td>The first element of the new brigade</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The new brigade<p></dl></dl>
  
  <a name="apr_status_t"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t ap_brigade_destroy(ap_bucket_brigade *b);</b>
    <dd>
  destroy an entire bucket brigade.  This includes destroying all of the
  buckets within the bucket brigade's bucket list.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket brigade to destroy</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-10"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t ap_bucket_copy_shared(ap_bucket *a, ap_bucket **c);</b>
    <dd>
  Copy a refcounted bucket, incrementing the reference count. Most
  reference-counting bucket types will be able to use this function
  as their copy function without any additional type-specific handling.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	a</th><td>The bucket to copy
  </td></tr>
  <tr valign=top><th align=right>
  	c</th><td>Returns a pointer to the new bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>APR_ENOMEM if allocation failed;
             or APR_SUCCESS<p></dl></dl>
  
  <a name="apr_status_t-11"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_brigade_destroy(apr_bucket_brigade *b);</b>
    <dd>
  destroy an entire bucket brigade.  This includes destroying all of the
  buckets within the bucket brigade's bucket list.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket brigade to destroy</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-12"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_brigade_cleanup(apr_bucket_brigade *b);</b>
    <dd>
  empty out an entire bucket brigade.  This includes destroying all of the
  buckets within the bucket brigade's bucket list.  This is similar to
  apr_brigade_destroy(), except that it does not deregister the brigade's
  pool cleanup function.
  <p><img src="../images//tip.gif"> Generally, you should use apr_brigade_destroy().  This function
       can be useful in situations where you have a single brigade that
       you wish to reuse many times by destroying all of the buckets in
       the brigade and putting new buckets into it later.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket brigade to clean up</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-13"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_brigade_length(apr_bucket_brigade *bb, int read_all);</b>
    <dd>
  Return the total length of the brigade.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	bb</th><td>The brigade to compute the length of
  </td></tr>
  <tr valign=top><th align=right>
  	read_all</th><td>Read unknown-length buckets to force a size
   @ @param length Set to length of the brigade, or -1 if it has unknown-length buckets</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-14"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_bucket_read(apr_bucket *e, const char **str, apr_size_t *len, apr_read_type_e block);</b>
    <dd>
  read the data from the bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to read from
  </td></tr>
  <tr valign=top><th align=right>
  	str</th><td>The location to store the data in
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>The amount of data read
  </td></tr>
  <tr valign=top><th align=right>
  	block</th><td>Whether the read function blocks</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-15"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_bucket_setaside(apr_bucket *e);</b>
    <dd>
  Setaside data so that stack data is not destroyed on returning from
  the function
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to setaside</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-16"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_bucket_split(apr_bucket *e, apr_off_t point);</b>
    <dd>
  Split one bucket in two.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to split
  </td></tr>
  <tr valign=top><th align=right>
  	point</th><td>The offset to split the bucket at</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-17"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_bucket_copy(apr_bucket *e, apr_bucket **c);</b>
    <dd>
  Copy a bucket.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to copy
  </td></tr>
  <tr valign=top><th align=right>
  	c</th><td>Returns a pointer to the new bucket</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-18"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_bucket_setaside_notimpl(apr_bucket *data);</b>
    <dd>
  A place holder function that signifies that the setaside function was not
  implemented for this bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The bucket to setaside</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>APR_ENOTIMPL<p></dl></dl>
  
  <a name="apr_status_t-19"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_bucket_split_notimpl(apr_bucket *data, apr_off_t point);</b>
    <dd>
  A place holder function that signifies that the split function was not
  implemented for this bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The bucket to split
  </td></tr>
  <tr valign=top><th align=right>
  	point</th><td>The location to split the bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>APR_ENOTIMPL<p></dl></dl>
  
  <a name="apr_status_t-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t ap_bucket_read(ap_bucket *e, const char **str, apr_size_t *len, ap_read_type block);</b>
    <dd>
  read the data from the bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to read from
  </td></tr>
  <tr valign=top><th align=right>
  	str</th><td>The location to store the data in
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>The amount of data read
  </td></tr>
  <tr valign=top><th align=right>
  	block</th><td>Whether the read function blocks</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-20"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_bucket_copy_notimpl(apr_bucket *e, apr_bucket **c);</b>
    <dd>
  A place holder function that signifies that the copy function was not
  implemented for this bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to copy
  </td></tr>
  <tr valign=top><th align=right>
  	c</th><td>Returns a pointer to the new bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>APR_ENOTIMPL<p></dl></dl>
  
  <a name="apr_status_t-21"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_bucket_simple_split(apr_bucket *b, apr_off_t point);</b>
    <dd>
  Split a simple bucket into two at the given point.  Most non-reference
  counting buckets that allow multiple references to the same block of
  data (eg transient and immortal) will use this as their split function
  without any additional type-specific handling.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to be split
  </td></tr>
  <tr valign=top><th align=right>
  	point</th><td>The offset of the first byte in the new bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>APR_EINVAL if the point is not within the bucket;
          APR_ENOMEM if allocation failed;
          or APR_SUCCESS<p></dl></dl>
  
  <a name="apr_status_t-22"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_bucket_simple_copy(apr_bucket *a, apr_bucket **b);</b>
    <dd>
  Copy a simple bucket.  Most non-reference-counting buckets that allow
  multiple references to the same block of data (eg transient and immortal)
  will use this as their copy function without any additional type-specific
  handling.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	a</th><td>The bucket to copy
  </td></tr>
  <tr valign=top><th align=right>
  	b</th><td>Returns a pointer to the new bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>APR_ENOMEM if allocation failed;
          or APR_SUCCESS<p></dl></dl>
  
  <a name="apr_status_t-23"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_bucket_shared_split(apr_bucket *b, apr_off_t point);</b>
    <dd>
  Split a bucket into two at the given point, and adjust the refcount
  to the underlying data. Most reference-counting bucket types will
  be able to use this function as their split function without any
  additional type-specific handling.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to be split
  </td></tr>
  <tr valign=top><th align=right>
  	point</th><td>The offset of the first byte in the new bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>APR_EINVAL if the point is not within the bucket;
          APR_ENOMEM if allocation failed;
          or APR_SUCCESS<p></dl></dl>
  
  <a name="apr_status_t-24"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t apr_bucket_shared_copy(apr_bucket *a, apr_bucket **b);</b>
    <dd>
  Copy a refcounted bucket, incrementing the reference count. Most
  reference-counting bucket types will be able to use this function
  as their copy function without any additional type-specific handling.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	a</th><td>The bucket to copy
  </td></tr>
  <tr valign=top><th align=right>
  	b</th><td>Returns a pointer to the new bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>APR_ENOMEM if allocation failed;
             or APR_SUCCESS<p></dl></dl>
  
  <a name="apr_status_t-3"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t ap_bucket_setaside(ap_bucket *e);</b>
    <dd>
  Setaside data so that stack data is not destroyed on returning from
  the function
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to setaside</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-4"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t ap_bucket_split(ap_bucket *e, apr_off_t point);</b>
    <dd>
  Split one bucket in two.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to split
  </td></tr>
  <tr valign=top><th align=right>
  	point</th><td>The offset to split the bucket at</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-5"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t ap_bucket_copy(ap_bucket *e, ap_bucket **c);</b>
    <dd>
  Copy a bucket.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to copy
  </td></tr>
  <tr valign=top><th align=right>
  	c</th><td>Returns a pointer to the new bucket</td></tr>
  </table>
    </dl></dl>
  
  <a name="apr_status_t-6"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t ap_bucket_setaside_notimpl(ap_bucket *data);</b>
    <dd>
  A place holder function that signifies that the setaside function was not
  implemented for this bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The bucket to setaside</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>APR_ENOTIMPL<p></dl></dl>
  
  <a name="apr_status_t-7"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t ap_bucket_split_notimpl(ap_bucket *data);</b>
    <dd>
  A place holder function that signifies that the split function was not
  implemented for this bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The bucket to split
  </td></tr>
  <tr valign=top><th align=right>
  	point</th><td>The location to split the bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>APR_ENOTIMPL<p></dl></dl>
  
  <a name="apr_status_t-8"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t ap_bucket_copy_notimpl(ap_bucket *e, ap_bucket **c);</b>
    <dd>
  A place holder function that signifies that the copy function was not
  implemented for this bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to copy
  </td></tr>
  <tr valign=top><th align=right>
  	c</th><td>Returns a pointer to the new bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>APR_ENOTIMPL<p></dl></dl>
  
  <a name="apr_status_t-9"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>apr_status_t ap_bucket_split_shared(ap_bucket *b, apr_off_t point);</b>
    <dd>
  Split a bucket into two at the given point, and adjust the refcount
  to the underlying data. Most reference-counting bucket types will
  be able to use this function as their split function without any
  additional type-specific handling.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to be split
  </td></tr>
  <tr valign=top><th align=right>
  	point</th><td>The offset of the first byte in the new bucket</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>APR_EINVAL if the point is not within the bucket;
          APR_ENOMEM if allocation failed;
          or APR_SUCCESS<p></dl></dl>
  
  <a name="int-10"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int AP_BUCKET_IS_FILE(ap_bucket *e);</b>
    <dd>
  Determine if a bucket is a FILE bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-11"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int AP_BUCKET_IS_PIPE(ap_bucket *e);</b>
    <dd>
  Determine if a bucket is a PIPE bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-12"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int AP_BUCKET_IS_SOCKET(ap_bucket *e);</b>
    <dd>
  Determine if a bucket is a SOCKET bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-13"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int AP_BUCKET_IS_HEAP(ap_bucket *e);</b>
    <dd>
  Determine if a bucket is a HEAP bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-14"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int AP_BUCKET_IS_TRANSIENT(ap_bucket *e);</b>
    <dd>
  Determine if a bucket is a TRANSIENT bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-15"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int AP_BUCKET_IS_IMMORTAL(ap_bucket *e);</b>
    <dd>
  Determine if a bucket is a IMMORTAL bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-16"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int AP_BUCKET_IS_MMAP(ap_bucket *e);</b>
    <dd>
  Determine if a bucket is a MMAP bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-17"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int AP_BUCKET_IS_POOL(ap_bucket *e);</b>
    <dd>
  Determine if a bucket is a POOL bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-18"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int ap_brigade_to_iovec(ap_bucket_brigade *b, struct iovec *vec, int nvec);;</b>
    <dd>
  create an iovec of the elements in a bucket_brigade... return number 
  of elements used.  This is useful for writing to a file or to the
  network efficiently.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	The</th><td>bucket brigade to create the iovec out of
  </td></tr>
  <tr valign=top><th align=right>
  	The</th><td>iovec to create
  </td></tr>
  <tr valign=top><th align=right>
  	The</th><td>number of elements in the iovec</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The number of iovec elements actually filled out.<p></dl></dl>
  
  <a name="int-19"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int ap_brigade_vputstrs(ap_bucket_brigade *b, va_list va);</b>
    <dd>
  This function writes a list of strings into a bucket brigade.  We just 
  allocate a new heap bucket for each string.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket brigade to add to
  </td></tr>
  <tr valign=top><th align=right>
  	va</th><td>A list of strings to add</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The number of bytes added to the brigade<p></dl></dl>
  
  <a name="int-20"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int ap_brigade_putstrs(ap_bucket_brigade *b, ...);</b>
    <dd>
  This function writes an unspecified number of strings into a bucket brigade.
  We just allocate a new heap bucket for each string.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket brigade to add to
  ... The strings to add</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The number of bytes added to the brigade<p></dl></dl>
  
  <a name="int-21"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int ap_brigade_printf(ap_bucket_brigade *b, const char *fmt, ...) ;</b>
    <dd>
  Evaluate a printf and put the resulting string into a bucket at the end 
  of the bucket brigade.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to write to
  </td></tr>
  <tr valign=top><th align=right>
  	fmt</th><td>The format of the string to write
  ... The arguments to fill out the format</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The number of bytes added to the brigade<p></dl></dl>
  
  <a name="int-22"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int ap_brigade_vprintf(ap_bucket_brigade *b, const char *fmt, va_list va) ;</b>
    <dd>
  Evaluate a printf and put the resulting string into a bucket at the end 
  of the bucket brigade.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to write to
  </td></tr>
  <tr valign=top><th align=right>
  	fmt</th><td>The format of the string to write
  </td></tr>
  <tr valign=top><th align=right>
  	va</th><td>The arguments to fill out the format</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The number of bytes added to the brigade<p></dl></dl>
  
  <a name="int-31"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int APR_BRIGADE_EMPTY(apr_bucket_brigade *b);</b>
    <dd>
  Determine if the bucket brigade is empty
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to check</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-32"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int APR_BUCKET_IS_FLUSH(apr_bucket *e);</b>
    <dd>
  Determine if a bucket is a FLUSH bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-33"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int APR_BUCKET_IS_EOS(apr_bucket *e);</b>
    <dd>
  Determine if a bucket is an EOS bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-34"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int APR_BUCKET_IS_FILE(apr_bucket *e);</b>
    <dd>
  Determine if a bucket is a FILE bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-35"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int APR_BUCKET_IS_PIPE(apr_bucket *e);</b>
    <dd>
  Determine if a bucket is a PIPE bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-36"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int APR_BUCKET_IS_SOCKET(apr_bucket *e);</b>
    <dd>
  Determine if a bucket is a SOCKET bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-37"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int APR_BUCKET_IS_HEAP(apr_bucket *e);</b>
    <dd>
  Determine if a bucket is a HEAP bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-38"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int APR_BUCKET_IS_TRANSIENT(apr_bucket *e);</b>
    <dd>
  Determine if a bucket is a TRANSIENT bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-39"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int APR_BUCKET_IS_IMMORTAL(apr_bucket *e);</b>
    <dd>
  Determine if a bucket is a IMMORTAL bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-40"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int APR_BUCKET_IS_MMAP(apr_bucket *e);</b>
    <dd>
  Determine if a bucket is a MMAP bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-41"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int APR_BUCKET_IS_POOL(apr_bucket *e);</b>
    <dd>
  Determine if a bucket is a POOL bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-42"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_brigade_to_iovec(apr_bucket_brigade *b, struct iovec *vec, int nvec);;</b>
    <dd>
  create an iovec of the elements in a bucket_brigade... return number 
  of elements used.  This is useful for writing to a file or to the
  network efficiently.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	The</th><td>bucket brigade to create the iovec from
  </td></tr>
  <tr valign=top><th align=right>
  	The</th><td>iovec to create
  </td></tr>
  <tr valign=top><th align=right>
  	The</th><td>number of elements in the iovec</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The number of iovec elements actually filled out.<p></dl></dl>
  
  <a name="int-43"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_brigade_vputstrs(apr_bucket_brigade *b, apr_brigade_flush flush, void *ctx, va_list va);</b>
    <dd>
  This function writes a list of strings into a bucket brigade.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket brigade to add to
  </td></tr>
  <tr valign=top><th align=right>
  	va</th><td>A list of strings to add</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The number of bytes added to the brigade<p></dl></dl>
  
  <a name="int-44"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_brigade_write(ap_bucket_brigade *b, apr_brigade_flush flush, void *ctx, const char *str, apr_size_t nbyte);</b>
    <dd>
  This function writes an string into a bucket brigade.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket brigade to add to
  </td></tr>
  <tr valign=top><th align=right>
  	str</th><td>The string to add</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The number of bytes added to the brigade<p></dl></dl>
  
  <a name="int-45"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_brigade_puts(ap_bucket_brigade *b, apr_brigade_flush flush, void *ctx, const char *str);</b>
    <dd>
  This function writes an string into a bucket brigade.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket brigade to add to
  </td></tr>
  <tr valign=top><th align=right>
  	str</th><td>The string to add</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The number of bytes added to the brigade<p></dl></dl>
  
  <a name="int-46"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_brigade_putc(apr_bucket_brigade *b, apr_brigade_flush flush, void *ctx, const char c);</b>
    <dd>
  This function writes a character into a bucket brigade.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket brigade to add to
  </td></tr>
  <tr valign=top><th align=right>
  	c</th><td>The character to add</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The number of bytes added to the brigade<p></dl></dl>
  
  <a name="int-47"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_brigade_putstrs(apr_bucket_brigade *b, apr_brigade_flush flush, void *ctx, ...);</b>
    <dd>
  This function writes an unspecified number of strings into a bucket brigade.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket brigade to add to
  ... The strings to add</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The number of bytes added to the brigade<p></dl></dl>
  
  <a name="int-48"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_brigade_printf(apr_bucket_brigade *b, apr_brigade_flush flush, void *ctx, const char *fmt, ...) ;</b>
    <dd>
  Evaluate a printf and put the resulting string at the end 
  of the bucket brigade.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to write to
  </td></tr>
  <tr valign=top><th align=right>
  	fmt</th><td>The format of the string to write
  ... The arguments to fill out the format</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The number of bytes added to the brigade<p></dl></dl>
  
  <a name="int-49"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_brigade_vprintf(apr_bucket_brigade *b, apr_brigade_flush flush, void *ctx, const char *fmt, va_list va) ;</b>
    <dd>
  Evaluate a printf and put the resulting string at the end 
  of the bucket brigade.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to write to
  </td></tr>
  <tr valign=top><th align=right>
  	fmt</th><td>The format of the string to write
  </td></tr>
  <tr valign=top><th align=right>
  	va</th><td>The arguments to fill out the format</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>The number of bytes added to the brigade<p></dl></dl>
  
  <a name="int-50"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int apr_bucket_shared_destroy(void *data);</b>
    <dd>
  Decrement the refcount of the data in the bucket. This function
  should only be called by type-specific bucket destruction functions.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The private data pointer from the bucket to be destroyed</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>TRUE or FALSE; TRUE if the reference count is now
          zero, indicating that the shared resource itself can
          be destroyed by the caller.<p></dl></dl>
  
  <a name="int-7"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int AP_BRIGADE_SENTINEL(ap_bucket *b);</b>
    <dd>
  Wrappers around the RING macros to reduce the verbosity of the code
  that handles bucket brigades.
   Determine if this bucket is the start of the list
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The bucket to test</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-8"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int AP_BUCKET_IS_FLUSH(ap_bucket *e);</b>
    <dd>
  Determine if a bucket is a FLUSH bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="int-9"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int AP_BUCKET_IS_EOS(ap_bucket *e);</b>
    <dd>
  Determine if a bucket is an EOS bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to inspect</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="void"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void AP_BRIGADE_FOREACH(ap_bucket *e, ap_bucket_brigade *b);</b>
    <dd>
  Iterate through a bucket brigade
  <p><img src="../images//tip.gif"> This is the same as either:
  <pre>
       e = AP_BUCKET_FIRST(b);
       while (!AP_BUCKET_SENTINEL(e)) {
           ...
           e = AP_BUCKET_NEXT(e);
       }
      OR
       for (e = AP_BUCKET_FIRST(b); !AP_BUCKET_SENTINEL(e); e = AP_BUCKET_NEXT(e)) {
           ...
       }
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The current bucket
  </td></tr>
  <tr valign=top><th align=right>
  	b</th><td>The brigade to iterate over</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-10"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void ap_bucket_destroy(ap_bucket *e);</b>
    <dd>
  free the resources used by a bucket. If multiple buckets refer to
  the same resource it is freed when the last one goes away.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to destroy</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-11"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void ap_bucket_destroy(ap_bucket *data);</b>
    <dd>
  A place holder function that signifies that the destroy function was not
  implemented for this bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The bucket to destroy</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-12"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void *ap_bucket_destroy_shared(ap_bucket *b);</b>
    <dd>
  Decrement the refcount of the data in the bucket and free the
  ap_bucket_shared structure. This function should only be called by
  type-specific bucket destruction functions.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The private data pointer from the bucket to be destroyed</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>NULL if nothing needs to be done,
          otherwise a pointer to the private data structure which
          must be destroyed because its reference count is zero<p></dl></dl>
  
  <a name="void-18"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_BRIGADE_FOREACH(apr_bucket *e, apr_bucket_brigade *b);</b>
    <dd>
  Iterate through a bucket brigade
  <p><img src="../images//tip.gif"> This is the same as either:
  <pre>
   e = APR_BUCKET_FIRST(b);
   while (e != APR_BRIGADE_SENTINEL(b)) {
       ...
       e = APR_BUCKET_NEXT(e);
   }
   OR
   for (e = APR_BUCKET_FIRST(b);
            e != APR_BRIGADE_SENTINEL(b);
            e = APR_BUCKET_NEXT(e)) {
       ...
   }
  </pre>
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The current bucket
  </td></tr>
  <tr valign=top><th align=right>
  	b</th><td>The brigade to iterate over</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-19"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_BRIGADE_INSERT_HEAD(apr_bucket_brigade *b, apr_bucket *e);</b>
    <dd>
  Insert a list of buckets at the front of a brigade
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to add to
  </td></tr>
  <tr valign=top><th align=right>
  	e</th><td>The first bucket in a list of buckets to insert</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void AP_BRIGADE_INSERT_HEAD(ap_bucket_brigade *b, ap_bucket *e);</b>
    <dd>
  Insert a list of buckets at the front of a brigade
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to add to
  </td></tr>
  <tr valign=top><th align=right>
  	e</th><td>The first bucket in a list of buckets to insert</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-20"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_BRIGADE_INSERT_TAIL(apr_bucket_brigade *b, apr_bucket *e);</b>
    <dd>
  Insert a list of buckets at the end of a brigade
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to add to
  </td></tr>
  <tr valign=top><th align=right>
  	e</th><td>The first bucket in a list of buckets to insert</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-21"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_BRIGADE_CONCAT(apr_bucket_brigade *a, apr_bucket_brigade *b);</b>
    <dd>
  Concatenate two brigades together
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	a</th><td>The first brigade
  </td></tr>
  <tr valign=top><th align=right>
  	b</th><td>The second brigade</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-22"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_BUCKET_INSERT_BEFORE(apr_bucket *a, apr_bucket *b);</b>
    <dd>
  Insert a list of buckets before a specified bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	a</th><td>The bucket to insert before
  </td></tr>
  <tr valign=top><th align=right>
  	b</th><td>The buckets to insert</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-23"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_BUCKET_INSERT_AFTER(apr_bucket *a, apr_bucket *b);</b>
    <dd>
  Insert a list of buckets after a specified bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	a</th><td>The bucket to insert after
  </td></tr>
  <tr valign=top><th align=right>
  	b</th><td>The buckets to insert</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-24"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_BUCKET_REMOVE(apr_bucket *e);</b>
    <dd>
  Remove a bucket from its bucket brigade
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to remove</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-25"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_brigade_consume(apr_bucket_brigade *b, int nbytes);</b>
    <dd>
  consume nbytes from beginning of b -- call apr_bucket_destroy as
  appropriate, and/or modify start on last element
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to consume data from
  </td></tr>
  <tr valign=top><th align=right>
  	nbytes</th><td>The number of bytes to consume</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-26"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_bucket_destroy(apr_bucket *e);</b>
    <dd>
  Free the resources used by a bucket. If multiple buckets refer to
  the same resource it is freed when the last one goes away.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to destroy</td></tr>
  </table>
    <dt><b>See Also</b><dd>
    <a href="#apr_bucket_delete()">apr_bucket_delete()</a><p></dl></dl>
  
  <a name="void-27"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_bucket_delete(apr_bucket *e);</b>
    <dd>
  Delete a bucket by removing it from its brigade (if any) and then
  destroying it.
  <p><img src="../images//tip.gif"> This mainly acts as an aid in avoiding code verbosity.  It is
  the preferred exact equivalent to:
  <pre>
       APR_BUCKET_REMOVE(e);
       apr_bucket_destroy(e);
  </pre>
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to delete</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-28"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_bucket_destroy_notimpl(void *data);</b>
    <dd>
  A place holder function that signifies that the destroy function was not
  implemented for this bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	data</th><td>The bucket to destroy</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-3"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void AP_BRIGADE_INSERT_HEAD(ap_bucket_brigade *b, ap_bucket *e);</b>
    <dd>
  Insert a list of buckets at the end of a brigade
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to add to
  </td></tr>
  <tr valign=top><th align=right>
  	e</th><td>The first bucket in a list of buckets to insert</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-4"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void AP_BRIGADE_CONCAT(ap_bucket_brigade *a, ap_bucket_brigade *b);</b>
    <dd>
  Concatenate two brigades together
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	a</th><td>The first brigade
  </td></tr>
  <tr valign=top><th align=right>
  	b</th><td>The second brigade</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-5"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void AP_BUCKET_INSERT_BEFORE(ap_bucket *a, ap_bucket *b);</b>
    <dd>
  Insert a list of buckets before a specified bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	a</th><td>The buckets to insert
  </td></tr>
  <tr valign=top><th align=right>
  	b</th><td>The bucket to insert before</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-6"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void AP_BUCKET_INSERT_AFTER(ap_bucket *a, ap_bucket *b);</b>
    <dd>
  Insert a list of buckets after a specified bucket
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	a</th><td>The buckets to insert
  </td></tr>
  <tr valign=top><th align=right>
  	b</th><td>The bucket to insert after</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-7"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void AP_BUCKET_REMOVE(ap_bucket *e);</b>
    <dd>
  Remove a bucket from its bucket brigade
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	e</th><td>The bucket to remove</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-8"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void ap_brigade_consume(ap_bucket_brigade *b, int nbytes);</b>
    <dd>
  consume nbytes from beginning of b -- call ap_bucket_destroy as
  appropriate, and/or modify start on last element
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	b</th><td>The brigade to consume data from
  </td></tr>
  <tr valign=top><th align=right>
  	nbytes</th><td>The number of bytes to consume</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-9"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void ap_init_bucket_types(apr_pool_t *p);</b>
    <dd>
  Initialize the core implemented bucket types.  Once this is done,
  it is possible to add new bucket types to the server
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	p</th><td>The pool to allocate the array out of.</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:57:40 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr-util/General.html
  
  Index: General.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime Utility Library] -- General</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime Utility Library]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: General</h2>
    <b>
  
  </b>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>(void);</b>
    <dd>
  Declare an optional function.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ret</th><td>The return type of the function
  </td></tr>
  <tr valign=top><th align=right>
  	name</th><td>The name of the function
  </td></tr>
  <tr valign=top><th align=right>
  	args</th><td>The function arguments (including brackets)</td></tr>
  </table>
    </dl></dl>
  
  <a name="APR_OPTIONAL_FN_TYPE(name)"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APR_OPTIONAL_FN_TYPE(name) ;</b>
    <dd>
  The type of an optional function.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	name</th><td>The name of the function</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-34"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_REGISTER_OPTIONAL_FN(name);</b>
    <dd>
  Register an optional function. This can be later retrieved, type-safely, by
  name. Like all global functions, the name must be unique. Note that,
  confusingly but correctly, the function itself can be static!
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	name</th><td>The name of the function</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:57:40 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr-util/Rings.html
  
  Index: Rings.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime Utility Library] -- Rings</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime Utility Library]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: Rings</h2>
    <b>
  
  </b>
  <h2>Global Variables</h2>
    <blockquote>
  
    <a name="APR_RING_ENTRY"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APR_RING_ENTRY ;</b>
  <dd>
  Retrieve an optional function. Returns NULL if the function is not present.
  <p>The Ring Element</p>
  A ring element struct is linked to the other elements in the ring
  through its ring entry field, e.g.
  <pre>
       struct my_element_t {
           APR_RING_ENTRY(my_element_t) link;
           int foo;
           char *bar;
       };
  </pre>
  An element struct may be put on more than one ring if it has
  more than one APR_RING_ENTRY field.
  <p><img src="../images//warning.gif" align=left> For strict C standards compliance you should put the APR_RING_ENTRY
  first in the element struct unless the head is always part of a larger
  object with enough earlier fields to accommodate the offsetof() used
  to compute the ring sentinel below. You can usually ignore this caveat.
  <p><dl>
  </dl></dl>
  
    <a name="APR_RING_HEAD"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APR_RING_HEAD ;</b>
  <dd>
  <p>The Ring Head</p>
  Each ring is managed via its head, which is a struct declared like this:
  <pre>
       APR_RING_HEAD(my_ring_t, my_element_t);
       struct my_ring_t ring, *ringp;
  </pre>
  This struct looks just like the element link struct so that we can
  be sure that the typecasting games will work as expected.
  The first element in the ring is next after the head, and the last
  element is just before the head.
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="elem"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>elem *APR_RING_SENTINEL(head *hp, struct elem, APR_RING_ENTRY link);</b>
    <dd>
  <p>The Ring Sentinel</p>
  This is the magic pointer value that occurs before the first and
  after the last elements in the ring, computed from the address of
  the ring's head.  The head itself isn't an element, but in order to
  get rid of all the special cases when dealing with the ends of the
  ring, we play typecasting games to make it look like one.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	hp</th><td>The head of the ring
  </td></tr>
  <tr valign=top><th align=right>
  	elem</th><td>The name of the element struct
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct</td></tr>
  </table>
    </dl></dl>
  
  <a name="elem-2"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>elem *APR_RING_FIRST(head *hp);</b>
    <dd>
  The first element of the ring
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	hp</th><td>The head of the ring</td></tr>
  </table>
    </dl></dl>
  
  <a name="elem-3"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>elem *APR_RING_LAST(head *hp);</b>
    <dd>
  The last element of the ring
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	hp</th><td>The head of the ring</td></tr>
  </table>
    </dl></dl>
  
  <a name="elem-4"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>elem *APR_RING_NEXT(elem *ep, APR_RING_ENTRY link);</b>
    <dd>
  The next element in the ring
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ep</th><td>The current element
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct</td></tr>
  </table>
    </dl></dl>
  
  <a name="elem-5"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>elem *APR_RING_PREV(elem *ep, APR_RING_ENTRY link);</b>
    <dd>
  The previous element in the ring
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ep</th><td>The current element
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct</td></tr>
  </table>
    </dl></dl>
  
  <a name="int-54"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>int APR_RING_EMPTY(head *hp, struct elem, APR_RING_ENTRY link);</b>
    <dd>
  Determine if a ring is empty
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	hp</th><td>The head of the ring
  </td></tr>
  <tr valign=top><th align=right>
  	elem</th><td>The name of the element struct
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct</td></tr>
  </table>
    <dt><b>Return Value</b>
    <dd>true or false<p></dl></dl>
  
  <a name="void-35"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_RING_INIT(head *hp, struct elem, APR_RING_ENTRY link);</b>
    <dd>
  Initialize a ring
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	hp</th><td>The head of the ring
  </td></tr>
  <tr valign=top><th align=right>
  	elem</th><td>The name of the element struct
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-36"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_RING_ELEM_INIT(elem *ep, APR_RING_ENTRY link);</b>
    <dd>
  Initialize a singleton element
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ep</th><td>The element
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-37"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_RING_SPLICE_BEFORE(elem *lep, elem *ep1, elem *epN, APR_RING_ENTRY link);</b>
    <dd>
  Splice the sequence ep1..epN into the ring before element lep
    (..lep.. becomes ..ep1..epN..lep..)
  <p><img src="../images//warning.gif" align=left> This doesn't work for splicing before the first element or on
    empty rings... see APR_RING_SPLICE_HEAD for one that does
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	lep</th><td>Element in the ring to splice before
  </td></tr>
  <tr valign=top><th align=right>
  	ep1</th><td>First element in the sequence to splice in
  </td></tr>
  <tr valign=top><th align=right>
  	epN</th><td>Last element in the sequence to splice in
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-38"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_RING_SPLICE_AFTER(elem *lep, elem *ep1, elem *epN, APR_RING_ENTRY link);</b>
    <dd>
  Splice the sequence ep1..epN into the ring after element lep
    (..lep.. becomes ..lep..ep1..epN..)
  <p><img src="../images//warning.gif" align=left> This doesn't work for splicing after the last element or on
    empty rings... see APR_RING_SPLICE_TAIL for one that does
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	lep</th><td>Element in the ring to splice after
  </td></tr>
  <tr valign=top><th align=right>
  	ep1</th><td>First element in the sequence to splice in
  </td></tr>
  <tr valign=top><th align=right>
  	epN</th><td>Last element in the sequence to splice in
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-39"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_RING_INSERT_BEFORE(elem *lep, elem *nep, APR_RING_ENTRY link);</b>
    <dd>
  Insert the element nep into the ring before element lep
    (..lep.. becomes ..nep..lep..)
  <p><img src="../images//warning.gif" align=left> This doesn't work for inserting before the first element or on
    empty rings... see APR_RING_INSERT_HEAD for one that does
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	lep</th><td>Element in the ring to insert before
  </td></tr>
  <tr valign=top><th align=right>
  	nep</th><td>Element to insert
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-40"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_RING_INSERT_AFTER(elem *lep, elem *nep, APR_RING_ENTRY link);</b>
    <dd>
  Insert the element nep into the ring after element lep
    (..lep.. becomes ..lep..nep..)
  <p><img src="../images//warning.gif" align=left> This doesn't work for inserting after the last element or on
    empty rings... see APR_RING_INSERT_TAIL for one that does
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	lep</th><td>Element in the ring to insert after
  </td></tr>
  <tr valign=top><th align=right>
  	nep</th><td>Element to insert
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-41"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_RING_SPLICE_HEAD(head *hp, elem *ep1, elem *epN, struct elem, APR_RING_ENTRY link);</b>
    <dd>
  Splice the sequence ep1..epN into the ring before the first element
    (..hp.. becomes ..hp..ep1..epN..)
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	hp</th><td>Head of the ring
  </td></tr>
  <tr valign=top><th align=right>
  	ep1</th><td>First element in the sequence to splice in
  </td></tr>
  <tr valign=top><th align=right>
  	epN</th><td>Last element in the sequence to splice in
  </td></tr>
  <tr valign=top><th align=right>
  	elem</th><td>The name of the element struct
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-42"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_RING_SPLICE_TAIL(head *hp, elem *ep1, elem *epN, struct elem, APR_RING_ENTRY link);</b>
    <dd>
  Splice the sequence ep1..epN into the ring after the last element
    (..hp.. becomes ..ep1..epN..hp..)
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	hp</th><td>Head of the ring
  </td></tr>
  <tr valign=top><th align=right>
  	ep1</th><td>First element in the sequence to splice in
  </td></tr>
  <tr valign=top><th align=right>
  	epN</th><td>Last element in the sequence to splice in
  </td></tr>
  <tr valign=top><th align=right>
  	elem</th><td>The name of the element struct
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-43"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_RING_INSERT_HEAD(head *hp, elem *nep, struct elem, APR_RING_ENTRY link);</b>
    <dd>
  Insert the element nep into the ring before the first element
    (..hp.. becomes ..hp..nep..)
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	hp</th><td>Head of the ring
  </td></tr>
  <tr valign=top><th align=right>
  	nep</th><td>Element to insert
  </td></tr>
  <tr valign=top><th align=right>
  	elem</th><td>The name of the element struct
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-44"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_RING_INSERT_TAIL(head *hp, elem *nep, struct elem, APR_RING_ENTRY link);</b>
    <dd>
  Insert the element nep into the ring after the last element
    (..hp.. becomes ..nep..hp..)
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	hp</th><td>Head of the ring
  </td></tr>
  <tr valign=top><th align=right>
  	nep</th><td>Element to insert
  </td></tr>
  <tr valign=top><th align=right>
  	elem</th><td>The name of the element struct
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-45"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_RING_CONCAT(head *h1, head *h2, struct elem, APR_RING_ENTRY link);</b>
    <dd>
  Concatenate ring h2 onto the end of ring h1, leaving h2 empty.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	h1</th><td>Head of the ring to concatenate onto
  </td></tr>
  <tr valign=top><th align=right>
  	h2</th><td>Head of the ring to concatenate
  </td></tr>
  <tr valign=top><th align=right>
  	elem</th><td>The name of the element struct
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-46"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_RING_UNSPLICE(elem *ep1, elem *epN, APR_RING_ENTRY link);</b>
    <dd>
  Unsplice a sequence of elements from a ring
  <p><img src="../images//warning.gif" align=left> The unspliced sequence is left with dangling pointers at either end
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ep1</th><td>First element in the sequence to unsplice
  </td></tr>
  <tr valign=top><th align=right>
  	epN</th><td>Last element in the sequence to unsplice
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-47"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_RING_REMOVE(elem *ep, APR_RING_ENTRY link);</b>
    <dd>
  Remove a single element from a ring
  <p><img src="../images//warning.gif" align=left> The unspliced element is left with dangling pointers at either end
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ep</th><td>Element to remove
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-48"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_RING_FOREACH(elem *ep, head *hp, struct elem, APR_RING_ENTRY link);</b>
    <dd>
  Iterate through a ring
  <p><img src="../images//tip.gif"> This is the same as either:
  <pre>
   ep = APR_RING_FIRST(hp);
   while (ep != APR_RING_SENTINEL(hp, elem, link)) {
       ...
       ep = APR_RING_NEXT(ep, link);
   }
    OR
   for (ep = APR_RING_FIRST(hp);
            ep != APR_RING_SENTINEL(hp, elem, link);
            ep = APR_RING_NEXT(ep, link)) {
       ...
   }
  </pre>
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ep</th><td>The current element
  </td></tr>
  <tr valign=top><th align=right>
  	hp</th><td>The ring to iterate over
  </td></tr>
  <tr valign=top><th align=right>
  	elem</th><td>The name of the element struct
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-49"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_RING_FOREACH_REVERSE(elem *ep, head *hp, struct elem, APR_RING_ENTRY link);</b>
    <dd>
  Iterate through a ring backwards
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ep</th><td>The current element
  </td></tr>
  <tr valign=top><th align=right>
  	hp</th><td>The ring to iterate over
  </td></tr>
  <tr valign=top><th align=right>
  	elem</th><td>The name of the element struct
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct</td></tr>
  </table>
    <dt><b>See Also</b><dd>
    <a href="#APR_RING_FOREACH">APR_RING_FOREACH</a><p></dl></dl>
  
  <a name="void-50"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_RING_CHECK_ONE(char *msg, void *ptr);</b>
    <dd>
  Print a single pointer value to STDERR
    (This is a no-op unless APR_RING_DEBUG is defined.)
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	msg</th><td>Descriptive message
  </td></tr>
  <tr valign=top><th align=right>
  	ptr</th><td>Pointer value to print</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-51"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_RING_CHECK(head *hp, struct elem, APR_RING_ENTRY link, char *msg);</b>
    <dd>
  Dump all ring pointers to STDERR, starting with the head and looping all
  the way around the ring back to the head.  Aborts if an inconsistency
  is found.
    (This is a no-op unless APR_RING_DEBUG is defined.)
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	hp</th><td>Head of the ring
  </td></tr>
  <tr valign=top><th align=right>
  	elem</th><td>The name of the element struct
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct
  </td></tr>
  <tr valign=top><th align=right>
  	msg</th><td>Descriptive message</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-52"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void APR_RING_CHECK_ELEM(elem *ep, struct elem, APR_RING_ENTRY link, char *msg);</b>
    <dd>
  Dump all ring pointers to STDERR, starting with the given element and
  looping all the way around the ring back to that element.  Aborts if
  an inconsistency is found.
    (This is a no-op unless APR_RING_DEBUG is defined.)
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	ep</th><td>The element
  </td></tr>
  <tr valign=top><th align=right>
  	elem</th><td>The name of the element struct
  </td></tr>
  <tr valign=top><th align=right>
  	link</th><td>The name of the APR_RING_ENTRY in the element struct
  </td></tr>
  <tr valign=top><th align=right>
  	msg</th><td>Descriptive message</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:57:40 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr-util/SHA1_library.html
  
  Index: SHA1_library.html
  ===================================================================
  <html>
  <head>
    <title>[Apache Portable RunTime Utility Library] -- SHA1 library</title>
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <font size=6><b>[Apache Portable RunTime Utility Library]</b></font>
      <hr size=4><p>
    </center>
  
    <h2>Package Name: SHA1 library</h2>
    <b>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="SHA1_library.html#AP_SHA1_CTX">struct AP_SHA1_CTX</h3></a>
    <ul>
  <li><a href="SHA1_library.html#AP_SHA1_CTX-count_lo">count_lo</a>
  <li><a href="SHA1_library.html#AP_SHA1_CTX-data">data[16]</a>
  <li><a href="SHA1_library.html#AP_SHA1_CTX-digest">digest[5]</a>
  <li><a href="SHA1_library.html#AP_SHA1_CTX-local">local</a>
  </ul>
  <h3><img src="../images/ball1.gif" width=18 height=17 align=texttop>
    <a href="SHA1_library.html#apr_sha1_ctx_t">struct apr_sha1_ctx_t</h3></a>
    <ul>
  <li><a href="SHA1_library.html#apr_sha1_ctx_t-count_lo">count_lo</a>
  <li><a href="SHA1_library.html#apr_sha1_ctx_t-data">data[16]</a>
  <li><a href="SHA1_library.html#apr_sha1_ctx_t-digest">digest[5]</a>
  <li><a href="SHA1_library.html#apr_sha1_ctx_t-local">local</a>
  </ul>
  
  </b>
  <hr size="4">
    <a name="AP_SHA1_CTX"></a>
    <h1>struct AP_SHA1_CTX</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/ap_sha1.h</td></tr></tr>
  </table>
  <p>
  SHA1 context structure<h2>Member Index</h2>
  <ul><li><a href="SHA1_library.html#AP_SHA1_CTX-count_lo">    apr_uint32_t count_lo</a>
  	<li><a href="SHA1_library.html#AP_SHA1_CTX-data">    apr_uint32_t data[16]</a>
  	<li><a href="SHA1_library.html#AP_SHA1_CTX-digest">    apr_uint32_t digest[5]</a>
  	<li><a href="SHA1_library.html#AP_SHA1_CTX-local">    int local</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="count_lo"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_uint32_t count_lo;</b>
  <dd>
  64-bit bit counts
  <p><dl>
  </dl></dl>
  
    <a name="data"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_uint32_t data[16];</b>
  <dd>
  SHA data buffer
  <p><dl>
  </dl></dl>
  
    <a name="digest"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_uint32_t digest[5];</b>
  <dd>
  message digest
  <p><dl>
  </dl></dl>
  
    <a name="local"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int local;</b>
  <dd>
  unprocessed amount in data
  <p><dl>
  </dl></dl>
  </blockquote>
  <hr size="4">
    <a name="apr_sha1_ctx_t"></a>
    <h1>struct apr_sha1_ctx_t</h1>
    <table bgcolor="ffffff" border="0" cellspacing="4">
      <tr>
        <th align=center colspan=2>
        </th>
      </tr>
   <tr><th width=20% align=right>Source:</th><td>./include/apr_sha1.h</td></tr></tr>
  </table>
  <p>
  SHA1 context structure<h2>Member Index</h2>
  <ul><li><a href="SHA1_library.html#apr_sha1_ctx_t-count_lo">    apr_uint32_t count_lo</a>
  	<li><a href="SHA1_library.html#apr_sha1_ctx_t-data">    apr_uint32_t data[16]</a>
  	<li><a href="SHA1_library.html#apr_sha1_ctx_t-digest">    apr_uint32_t digest[5]</a>
  	<li><a href="SHA1_library.html#apr_sha1_ctx_t-local">    int local</a>
  	</ul><h2>Class Variables</h2>
  <blockquote>
  
    <a name="count_lo"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_uint32_t count_lo;</b>
  <dd>
  64-bit bit counts
  <p><dl>
  </dl></dl>
  
    <a name="data"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_uint32_t data[16];</b>
  <dd>
  SHA data buffer
  <p><dl>
  </dl></dl>
  
    <a name="digest"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    apr_uint32_t digest[5];</b>
  <dd>
  message digest
  <p><dl>
  </dl></dl>
  
    <a name="local"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>    int local;</b>
  <dd>
  unprocessed amount in data
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Global Variables</h2>
    <blockquote>
  
    <a name="APR_SHA1PW_ID"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>APR_SHA1PW_ID "{SHA}";</b>
  <dd>
  Define the Magic String prefix that identifies a password as being
  hashed using our algorithm.
  <p><dl>
  </dl></dl>
  
    <a name="AP_SHA1PW_ID"></a>
      <dl><dt>
  	<b><img src="../images/ball2.gif" width=19 height=17 align=texttop>AP_SHA1PW_ID "{SHA}";</b>
  <dd>
  Define the Magic String prefix that identifies a password as being
  hashed using our algorithm.
  <p><dl>
  </dl></dl>
  </blockquote>
  <h2>Global Functions</h2>
    <blockquote>
  
  <a name="void-53"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_sha1_base64(const char *clear, int len, char *out);</b>
    <dd>
  Provide a means to SHA1 crypt/encode a plaintext password in a way which
  makes password file compatible with those commonly use in netscape web
  and ldap installations.
  <p><img src="../images//tip.gif"> SHA1 support is useful for migration purposes, but is less
      secure than Apache's password format, since Apache's (MD5)
      password format uses a random eight character salt to generate
      one of many possible hashes for the same password.  Netscape
      uses plain SHA1 without a salt, so the same password
      will always generate the same hash, making it easier
      to break since the search space is smaller.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	clear</th><td>The plaintext password
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>The length of the plaintext password
  </td></tr>
  <tr valign=top><th align=right>
  	out</th><td>The encrypted/encoded password</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-54"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_sha1_init(apr_sha1_ctx_t *context);;</b>
    <dd>
  Initialize the SHA digest
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	context</th><td>The SHA context to initialize</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-55"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_sha1_update(apr_sha1_ctx_t *context, const char *input, unsigned int inputLen);</b>
    <dd>
  Update the SHA digest
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	context</th><td>The SHA1 context to update
  </td></tr>
  <tr valign=top><th align=right>
  	input</th><td>The buffer to add to the SHA digest
  </td></tr>
  <tr valign=top><th align=right>
  	inputLen</th><td>The length of the input buffer</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-56"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_sha1_update_binary(apr_sha1_ctx_t *context, const unsigned char *input, unsigned int inputLen);</b>
    <dd>
  Update the SHA digest with binary data
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	context</th><td>The SHA1 context to update
  </td></tr>
  <tr valign=top><th align=right>
  	input</th><td>The buffer to add to the SHA digest
  </td></tr>
  <tr valign=top><th align=right>
  	inputLen</th><td>The length of the input buffer</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-57"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void apr_sha1_final(unsigned char digest[APR_SHA1_DIGESTSIZE], apr_sha1_ctx_t *context);</b>
    <dd>
  Finish computing the SHA digest
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	digest</th><td>the output buffer in which to store the digest
  </td></tr>
  <tr valign=top><th align=right>
  	context</th><td>The context to finalize</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-61"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void ap_sha1_base64(const char *clear, int len, char *out);</b>
    <dd>
  Provide a means to SHA1 crypt/encode a plaintext password in a way which
  makes password file compatible with those commonly use in netscape web
  and ldap installations.
  <p><img src="../images//tip.gif"> SHA1 support is useful for migration purposes, but is less
      secure than Apache's password format, since Apache's (MD5)
      password format uses a random eight character salt to generate
      one of many possible hashes for the same password.  Netscape
      uses plain SHA1 without a salt, so the same password
      will always generate the same hash, making it easier
      to break since the search space is smaller.
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	clear</th><td>The plaintext password
  </td></tr>
  <tr valign=top><th align=right>
  	len</th><td>The length of the plaintext password
  </td></tr>
  <tr valign=top><th align=right>
  	out</th><td>The encrypted/encoded password</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-62"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void ap_SHA1Init(AP_SHA1_CTX *context);;</b>
    <dd>
  Initialize the SHA digest
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	context</th><td>The SHA context to initialize</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-63"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void ap_SHA1Update(AP_SHA1_CTX *context, const char *input, unsigned int inputLen);</b>
    <dd>
  Update the SHA digest
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	context</th><td>The SHA1 context to update
  </td></tr>
  <tr valign=top><th align=right>
  	input</th><td>The buffer to add to the SHA digest
  </td></tr>
  <tr valign=top><th align=right>
  	inputLen</th><td>The length of the input buffer</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-64"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void ap_SHA1Update_binary(AP_SHA1_CTX *context, const unsigned char *input, unsigned int inputLen);</b>
    <dd>
  Update the SHA digest with binary data
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	context</th><td>The SHA1 context to update
  </td></tr>
  <tr valign=top><th align=right>
  	input</th><td>The buffer to add to the SHA digest
  </td></tr>
  <tr valign=top><th align=right>
  	inputLen</th><td>The length of the input buffer</td></tr>
  </table>
    </dl></dl>
  
  <a name="void-65"></a>
  <dl>
    <dt>
     <b><img src="../images/ball2.gif" width=19 height=17 align=texttop>void ap_SHA1Final(unsigned char digest[SHA_DIGESTSIZE], AP_SHA1_CTX *context);</b>
    <dd>
  Finish computing the SHA digest
  <p><dl>
  
    <dt><b>Parameters</b><dd>
  	<table width="85%">
  <tr valign=top><th align=right>
  	digest</th><td>the output buffer in which to store the digest
  </td></tr>
  <tr valign=top><th align=right>
  	context</th><td>The context to finalize</td></tr>
  </table>
    </dl></dl>
  </blockquote>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:57:40 2001
  <br>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr-util/index.html
  
  Index: index.html
  ===================================================================
  <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; iso-8859-1">
      <title>[Apache Portable RunTime Utility Library]</title>
    </head>
    <frameset cols="190,*">
      <frame src="master.html"  name="Master Index" noresize>
      <frame src="packages.html" name="Documentation">
      <noframes>
        <body bgcolor="#FFFFFF" stylesrc="index.html">
          <p>Some Documentation</p>
        </body>
      </noframes>
    </frameset>
  </html>
  
  
  
  1.1                  apr-site/docs/apr-util/master.html
  
  Index: master.html
  ===================================================================
  <html>
    <head>
      <title>Master Index</title>
    </head>
    <body bgcolor="#FFFFFF" text=#0000ff link=#0020ff vlink=#0020ff>
      <center><img src="../images/ScanDocSmall.jpg" border="0" /></center>
      <p>
      <a href="packages.html" target="Documentation">Master Index</a>
      </p>
      <p>
        <font size="2">
          <nobr>
  <a href="General.html" target="Documentation"><b>General</b></a><br>
    <dir>
  <li><a href="General.html#-2" target="Documentation">(void)</a>
  <li><a href="General.html#APR_OPTIONAL_FN_TYPE(name)" target="Documentation">APR_OPTIONAL_FN_TYPE(name) </a>
  <li><a href="General.html#void-34" target="Documentation">void APR_REGISTER_OPTIONAL_FN(name)</a>
  </dir><a href="APR-UTIL_DBM_library.html" target="Documentation"><b>APR-UTIL DBM library</b></a><br>
    <dir>
  <li><a href="APR-UTIL_DBM_library.html#apr_datum_t" target="Documentation">apr_datum_t </a>
  <li><a href="APR-UTIL_DBM_library.html#apr_dbm_close" target="Documentation">void apr_dbm_close(apr_dbm_t *db)</a>
  <li><a href="APR-UTIL_DBM_library.html#apr_dbm_delete" target="Documentation">apr_status_t apr_dbm_delete(apr_dbm_t *dbm, apr_datum_t key)</a>
  <li><a href="APR-UTIL_DBM_library.html#apr_dbm_exists" target="Documentation">int apr_dbm_exists(apr_dbm_t *dbm, apr_datum_t key)</a>
  <li><a href="APR-UTIL_DBM_library.html#apr_dbm_fetch" target="Documentation">apr_status_t apr_dbm_fetch(apr_dbm_t *dbm, apr_datum_t key, apr_datum_t *pvalue)</a>
  <li><a href="APR-UTIL_DBM_library.html#apr_dbm_firstkey" target="Documentation">apr_status_t apr_dbm_firstkey(apr_dbm_t *dbm, apr_datum_t *pkey)</a>
  <li><a href="APR-UTIL_DBM_library.html#apr_dbm_nextkey" target="Documentation">apr_status_t apr_dbm_nextkey(apr_dbm_t *dbm, apr_datum_t *pkey)</a>
  <li><a href="APR-UTIL_DBM_library.html#apr_dbm_open" target="Documentation">apr_status_t apr_dbm_open(apr_dbm_t **dbm, const char *name, int mode, apr_pool_t *cntxt)</a>
  <li><a href="APR-UTIL_DBM_library.html#apr_dbm_store" target="Documentation">apr_status_t apr_dbm_store(apr_dbm_t *dbm, apr_datum_t key, apr_datum_t value)</a>
  <li><a href="APR-UTIL_DBM_library.html#apr_dbm_t" target="Documentation">apr_dbm_t </a>
  </dir><a href="Apache_XML_library.html" target="Documentation"><b>Apache XML library</b></a><br>
    <dir>
  <li><a href="Apache_XML_library.html#apr_text" target="Documentation">struct apr_text</a>
  <li><a href="Apache_XML_library.html#apr_text_header" target="Documentation">struct apr_text_header</a>
  <li><a href="Apache_XML_library.html#apr_xml_attr" target="Documentation">struct apr_xml_attr</a>
  <li><a href="Apache_XML_library.html#apr_xml_doc" target="Documentation">struct apr_xml_doc</a>
  <li><a href="Apache_XML_library.html#apr_xml_elem" target="Documentation">struct apr_xml_elem</a>
  <li><a href="Apache_XML_library.html#-3" target="Documentation">(apr_xml_parser *)</a>
  <li><a href="Apache_XML_library.html#-4" target="Documentation">(apr_status_t)</a>
  <li><a href="Apache_XML_library.html#-5" target="Documentation">(apr_status_t)</a>
  <li><a href="Apache_XML_library.html#-6" target="Documentation">(char *)</a>
  <li><a href="Apache_XML_library.html#const" target="Documentation">const char *apr_xml_empty_elem(apr_pool_t *p, const apr_xml_elem *elem)</a>
  <li><a href="Apache_XML_library.html#const-2" target="Documentation">const char *apr_xml_quote_string(apr_pool_t *p, const char *s, int quotes)</a>
  <li><a href="Apache_XML_library.html#int-55" target="Documentation">int apr_xml_insert_uri(apr_array_header_t *uri_array, const char *uri)</a>
  <li><a href="Apache_XML_library.html#void-58" target="Documentation">void apr_text_append(apr_pool_t *p, apr_text_header *hdr, const char *text)</a>
  <li><a href="Apache_XML_library.html#void-59" target="Documentation">void apr_xml_to_text(apr_pool_t *p, const apr_xml_elem *elem, int style, apr_array_header_t *namespaces, int *ns_map, const char **pbuf, size_t *psize);</a>
  <li><a href="Apache_XML_library.html#void-60" target="Documentation">void apr_xml_quote_elem(apr_pool_t *p, apr_xml_elem *elem)</a>
  </dir><a href="Apache_hooks_functions.html" target="Documentation"><b>Apache hooks functions</b></a><br>
    <dir>
  <li><a href="Apache_hooks_functions.html#" target="Documentation">(apr_array_header_t *)</a>
  <li><a href="Apache_hooks_functions.html#apr_pool_t" target="Documentation">apr_pool_t *ap_global_hook_pool</a>
  <li><a href="Apache_hooks_functions.html#apr_pool_t-2" target="Documentation">apr_pool_t *ap_debug_module_hooks</a>
  <li><a href="Apache_hooks_functions.html#apr_pool_t-3" target="Documentation">apr_pool_t *ap_debug_module_name</a>
  <li><a href="Apache_hooks_functions.html#apr_pool_t-4" target="Documentation">apr_pool_t *apr_global_hook_pool</a>
  <li><a href="Apache_hooks_functions.html#apr_pool_t-5" target="Documentation">apr_pool_t *apr_debug_module_hooks</a>
  <li><a href="Apache_hooks_functions.html#apr_pool_t-6" target="Documentation">apr_pool_t *apr_current_hooking_module</a>
  <li><a href="Apache_hooks_functions.html#int-23" target="Documentation">int AP_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(link, name, args_decl, args_use)</a>
  <li><a href="Apache_hooks_functions.html#int-24" target="Documentation">int AP_IMPLEMENT_HOOK_RUN_FIRST(link, name, args_decl, args_use)</a>
  <li><a href="Apache_hooks_functions.html#int-51" target="Documentation">int APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(link, name, args_decl, args_use)</a>
  <li><a href="Apache_hooks_functions.html#int-52" target="Documentation">int APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(ns, link, name, args_decl, args_use)</a>
  <li><a href="Apache_hooks_functions.html#int-53" target="Documentation">int APR_IMPLEMENT_HOOK_RUN_FIRST(ns, link, name, args_decl, args_use, decline)</a>
  <li><a href="Apache_hooks_functions.html#void-13" target="Documentation">void AP_IMPLEMENT_EXTERNAL_HOOK_VOID(link, name, args_decl, args_use)</a>
  <li><a href="Apache_hooks_functions.html#void-14" target="Documentation">void ap_hook_sort_register(const char *szHookName, ap_arry_header_t **aHooks)</a>
  <li><a href="Apache_hooks_functions.html#void-15" target="Documentation">void ap_sort_hooks(void)</a>
  <li><a href="Apache_hooks_functions.html#void-16" target="Documentation">void ap_show_hook(const char *szName, const char *const *aszPre, const char *const *aszSucc)</a>
  <li><a href="Apache_hooks_functions.html#void-17" target="Documentation">void ap_hook_deregister_all(void)</a>
  <li><a href="Apache_hooks_functions.html#void-29" target="Documentation">void APR_IMPLEMENT_EXTERNAL_HOOK_VOID(ns, link, name, args_decl, args_use)</a>
  <li><a href="Apache_hooks_functions.html#void-30" target="Documentation">void apr_hook_sort_register(const char *szHookName, apr_array_header_t **aHooks)</a>
  <li><a href="Apache_hooks_functions.html#void-31" target="Documentation">void apr_sort_hooks(void)</a>
  <li><a href="Apache_hooks_functions.html#void-32" target="Documentation">void apr_show_hook(const char *szName, const char *const *aszPre, const char *const *aszSucc)</a>
  <li><a href="Apache_hooks_functions.html#void-33" target="Documentation">void apr_hook_deregister_all(void)</a>
  </dir><a href="Base64_Encoding.html" target="Documentation"><b>Base64 Encoding</b></a><br>
    <dir>
  <li><a href="Base64_Encoding.html#int" target="Documentation">int ap_base64encode_len(int len)</a>
  <li><a href="Base64_Encoding.html#int-2" target="Documentation">int ap_base64encode(char *coded_dst, const char *plain_src, int len_plain_src)</a>
  <li><a href="Base64_Encoding.html#int-25" target="Documentation">int apr_base64_encode_len(int len)</a>
  <li><a href="Base64_Encoding.html#int-26" target="Documentation">int apr_base64_encode(char *coded_dst, const char *plain_src, int len_plain_src)</a>
  <li><a href="Base64_Encoding.html#int-27" target="Documentation">int apr_base64_encode_binary(char *coded_dst, const char *plain_src, int len_plain_src)</a>
  <li><a href="Base64_Encoding.html#int-28" target="Documentation">int apr_base64_decode_len(const char *coded_src)</a>
  <li><a href="Base64_Encoding.html#int-29" target="Documentation">int apr_base64_decode(char *plain_dst, const char *coded_src)</a>
  <li><a href="Base64_Encoding.html#int-3" target="Documentation">int ap_base64encode_binary(char *coded_dst, const char *plain_src, int len_plain_src)</a>
  <li><a href="Base64_Encoding.html#int-30" target="Documentation">int apr_base64_decode_binary(char *plain_dst, const char *coded_src)</a>
  <li><a href="Base64_Encoding.html#int-4" target="Documentation">int ap_base64decode_len(const char *coded_src)</a>
  <li><a href="Base64_Encoding.html#int-5" target="Documentation">int ap_base64decode(char *plain_dst, const char *coded_src)</a>
  <li><a href="Base64_Encoding.html#int-6" target="Documentation">int ap_base64decode_binary(char *plain_dst, const char *coded_src)</a>
  </dir><a href="Bucket_Brigades.html" target="Documentation"><b>Bucket Brigades</b></a><br>
    <dir>
  <li><a href="Bucket_Brigades.html#ap_bucket" target="Documentation">struct ap_bucket</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_brigade" target="Documentation">struct ap_bucket_brigade</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_file" target="Documentation">struct ap_bucket_file</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_heap" target="Documentation">struct ap_bucket_heap</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_mmap" target="Documentation">struct ap_bucket_mmap</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_pool" target="Documentation">struct ap_bucket_pool</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_refcount" target="Documentation">struct ap_bucket_refcount</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_shared" target="Documentation">struct ap_bucket_shared</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_simple" target="Documentation">struct ap_bucket_simple</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_type" target="Documentation">struct ap_bucket_type</a>
  <li><a href="Bucket_Brigades.html#apr_bucket" target="Documentation">struct apr_bucket</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_brigade" target="Documentation">struct apr_bucket_brigade</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_file" target="Documentation">struct apr_bucket_file</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_heap" target="Documentation">struct apr_bucket_heap</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_mmap" target="Documentation">struct apr_bucket_mmap</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_pool" target="Documentation">struct apr_bucket_pool</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_refcount" target="Documentation">struct apr_bucket_refcount</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_type_t" target="Documentation">struct apr_bucket_type_t</a>
  <li><a href="Bucket_Brigades.html#AP_BRIGADE_EMPTY(ap_bucket_brigade" target="Documentation">AP_BRIGADE_EMPTY(ap_bucket_brigade *b)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket" target="Documentation">ap_bucket *AP_BUCKET_FIRST(ap_bucket_brigade *b)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-10" target="Documentation">ap_bucket *ap_bucket_make_flush(ap_bucket *b)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-11" target="Documentation">ap_bucket *ap_bucket_create_transient(const char *buf, apr_size_t nbyte, apr_size_t *w)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-12" target="Documentation">ap_bucket *ap_bucket_make_immortal(ap_bucket *b, const char *buf, apr_size_t nbyte, apr_size_t *w)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-13" target="Documentation">ap_bucket *ap_bucket_create_transient(const char *buf, apr_size_t nbyte, apr_size_t *w)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-14" target="Documentation">ap_bucket *ap_bucket_make_transient(ap_bucket *b, const char *buf, apr_size_t nbyte)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-15" target="Documentation">ap_bucket *ap_bucket_create_heap(const char *buf, apr_size_t nbyte, int copy, apr_size_t *w)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-16" target="Documentation">ap_bucket *ap_bucket_make_heap(ap_bucket *b, const char *buf, apr_size_t nbyte, int copy, apr_size_t *w)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-17" target="Documentation">ap_bucket *ap_bucket_create_pool(const char *buf, apr_size_t *length, apr_pool_t *p)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-18" target="Documentation">ap_bucket *ap_bucket_make_pool(ap_bucket *b, const char *buf, apr_size_t *length, apr_pool_t *p)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-19" target="Documentation">ap_bucket *ap_bucket_create_mmap(const apr_mmap_t *mm, apr_size_t start, apr_size_t length)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-2" target="Documentation">ap_bucket *AP_BUCKET_LAST(ap_bucket_brigade *b)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-20" target="Documentation">ap_bucket *ap_bucket_make_mmap(ap_bucket *b, const apr_mmap_t *mm, apr_size_t start, apr_size_t length)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-21" target="Documentation">ap_bucket *ap_bucket_create_socket(apr_socket_t *thissocket)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-22" target="Documentation">ap_bucket *ap_bucket_make_socket(ap_bucket *b, apr_socket_t *thissocket)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-23" target="Documentation">ap_bucket *ap_bucket_create_pipe(apr_file_t *thispipe)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-24" target="Documentation">ap_bucket *ap_bucket_make_pipe(ap_bucket *b, apr_file_t *thispipe)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-25" target="Documentation">ap_bucket *ap_bucket_create_file(apr_file_t *fd, apr_off_t offset, apr_size_t len)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-26" target="Documentation">ap_bucket *ap_bucket_make_file(ap_bucket *b, apr_file_t *fd, apr_off_t offset, apr_size_t len)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-3" target="Documentation">ap_bucket *AP_BUCKET_NEXT(ap_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-4" target="Documentation">ap_bucket *AP_BUCKET_PREV(ap_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-5" target="Documentation">ap_bucket *ap_brigade_partition(ap_bucket_brigade *b, apr_off_t point)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-6" target="Documentation">ap_bucket *ap_bucket_make_shared(ap_bucket_refcount *r, apr_off_t start, apr_off_t end) </a>
  <li><a href="Bucket_Brigades.html#ap_bucket-7" target="Documentation">ap_bucket *ap_bucket_create_eos(void)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-8" target="Documentation">ap_bucket *ap_bucket_make_eos(ap_bucket *b)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket-9" target="Documentation">ap_bucket *ap_bucket_create_flush(void)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_brigade" target="Documentation">ap_bucket_brigade *ap_brigade_create(apr_pool_t *p)</a>
  <li><a href="Bucket_Brigades.html#ap_bucket_brigade-2" target="Documentation">ap_bucket_brigade *ap_brigade_split(ap_bucket_brigade *b, ap_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#ap_eos_type" target="Documentation">APR_DECLARE_DATA extern const ap_bucket_type ap_eos_type</a>
  <li><a href="Bucket_Brigades.html#ap_file_type" target="Documentation">APR_DECLARE_DATA extern const ap_bucket_type ap_file_type</a>
  <li><a href="Bucket_Brigades.html#ap_flush_type" target="Documentation">APR_DECLARE_DATA extern const ap_bucket_type ap_flush_type</a>
  <li><a href="Bucket_Brigades.html#ap_heap_type" target="Documentation">APR_DECLARE_DATA extern const ap_bucket_type ap_heap_type</a>
  <li><a href="Bucket_Brigades.html#ap_immortal_type" target="Documentation">APR_DECLARE_DATA extern const ap_bucket_type ap_immortal_type</a>
  <li><a href="Bucket_Brigades.html#ap_insert_bucket_type" target="Documentation">int ap_insert_bucket_type(const ap_bucket_type *type)</a>
  <li><a href="Bucket_Brigades.html#ap_mmap_type" target="Documentation">APR_DECLARE_DATA extern const ap_bucket_type ap_mmap_type</a>
  <li><a href="Bucket_Brigades.html#ap_pipe_type" target="Documentation">APR_DECLARE_DATA extern const ap_bucket_type ap_pipe_type</a>
  <li><a href="Bucket_Brigades.html#ap_pool_type" target="Documentation">APR_DECLARE_DATA extern const ap_bucket_type ap_pool_type</a>
  <li><a href="Bucket_Brigades.html#ap_socket_type" target="Documentation">APR_DECLARE_DATA extern const ap_bucket_type ap_socket_type</a>
  <li><a href="Bucket_Brigades.html#ap_transient_type" target="Documentation">APR_DECLARE_DATA extern const ap_bucket_type ap_transient_type</a>
  <li><a href="Bucket_Brigades.html#apr_bucket" target="Documentation">apr_bucket *APR_BRIGADE_SENTINEL(apr_bucket_brigade *b)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-10" target="Documentation">apr_bucket *apr_bucket_flush_create(void)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-11" target="Documentation">apr_bucket *apr_bucket_flush_make(apr_bucket *b)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-12" target="Documentation">apr_bucket *apr_bucket_immortal_create(const char *buf, apr_size_t nbyte, apr_size_t *w)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-13" target="Documentation">apr_bucket *apr_bucket_immortal_make(apr_bucket *b, const char *buf, apr_size_t nbyte, apr_size_t *w)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-14" target="Documentation">apr_bucket *apr_bucket_transient_create(const char *buf, apr_size_t nbyte, apr_size_t *w)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-15" target="Documentation">apr_bucket *apr_bucket_transient_make(apr_bucket *b, const char *buf, apr_size_t nbyte)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-16" target="Documentation">apr_bucket *apr_bucket_heap_create(const char *buf, apr_size_t nbyte, int copy, apr_size_t *w)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-17" target="Documentation">apr_bucket *apr_bucket_heap_make(apr_bucket *b, const char *buf, apr_size_t nbyte, int copy, apr_size_t *w)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-18" target="Documentation">apr_bucket *apr_bucket_pool_create(const char *buf, apr_size_t *length, apr_pool_t *pool)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-19" target="Documentation">apr_bucket *apr_bucket_pool_make(apr_bucket *b, const char *buf, apr_size_t *length, apr_pool_t *pool)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-2" target="Documentation">apr_bucket *APR_BUCKET_FIRST(apr_bucket_brigade *b)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-20" target="Documentation">apr_bucket *apr_bucket_mmap_create(const apr_mmap_t *mm, apr_size_t start, apr_size_t length)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-21" target="Documentation">apr_bucket *apr_bucket_mmap_make(apr_bucket *b, const apr_mmap_t *mm, apr_size_t start, apr_size_t length)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-22" target="Documentation">apr_bucket *apr_bucket_socket_create(apr_socket_t *thissocket)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-23" target="Documentation">apr_bucket *apr_bucket_socket_make(apr_bucket *b, apr_socket_t *thissocket)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-24" target="Documentation">apr_bucket *apr_bucket_pipe_create(apr_file_t *thispipe)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-25" target="Documentation">apr_bucket *apr_bucket_pipe_make(apr_bucket *b, apr_file_t *thispipe)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-26" target="Documentation">apr_bucket *apr_bucket_file_create(apr_file_t *fd, apr_off_t offset, apr_size_t len)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-27" target="Documentation">apr_bucket *apr_bucket_file_make(apr_bucket *b, apr_file_t *fd, apr_off_t offset, apr_size_t len)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-3" target="Documentation">apr_bucket *APR_BUCKET_LAST(apr_bucket_brigade *b)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-4" target="Documentation">apr_bucket *APR_BUCKET_NEXT(apr_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-5" target="Documentation">apr_bucket *APR_BUCKET_PREV(apr_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-6" target="Documentation">apr_bucket *apr_brigade_partition(apr_bucket_brigade *b, apr_off_t point)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-7" target="Documentation">apr_bucket *apr_bucket_shared_make(apr_bucket_refcount *r, apr_off_t start, apr_off_t length) </a>
  <li><a href="Bucket_Brigades.html#apr_bucket-8" target="Documentation">apr_bucket *apr_bucket_eos_create(void)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket-9" target="Documentation">apr_bucket *apr_bucket_eos_make(apr_bucket *b)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_brigade" target="Documentation">apr_bucket_brigade *apr_brigade_create(apr_pool_t *p)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_brigade-2" target="Documentation">apr_bucket_brigade *apr_brigade_split(apr_bucket_brigade *b, apr_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_type_eos" target="Documentation">APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_eos</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_type_file" target="Documentation">APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_file</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_type_flush" target="Documentation">APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_flush</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_type_heap" target="Documentation">APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_heap</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_type_immortal" target="Documentation">APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_immortal</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_type_mmap" target="Documentation">APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_mmap</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_type_pipe" target="Documentation">APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_pipe</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_type_pool" target="Documentation">APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_pool</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_type_socket" target="Documentation">APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_socket</a>
  <li><a href="Bucket_Brigades.html#apr_bucket_type_transient" target="Documentation">APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_transient</a>
  <li><a href="Bucket_Brigades.html#apr_status_t" target="Documentation">apr_status_t ap_brigade_destroy(ap_bucket_brigade *b)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-10" target="Documentation">apr_status_t ap_bucket_copy_shared(ap_bucket *a, ap_bucket **c)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-11" target="Documentation">apr_status_t apr_brigade_destroy(apr_bucket_brigade *b)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-12" target="Documentation">apr_status_t apr_brigade_cleanup(apr_bucket_brigade *b)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-13" target="Documentation">apr_status_t apr_brigade_length(apr_bucket_brigade *bb, int read_all)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-14" target="Documentation">apr_status_t apr_bucket_read(apr_bucket *e, const char **str, apr_size_t *len, apr_read_type_e block)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-15" target="Documentation">apr_status_t apr_bucket_setaside(apr_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-16" target="Documentation">apr_status_t apr_bucket_split(apr_bucket *e, apr_off_t point)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-17" target="Documentation">apr_status_t apr_bucket_copy(apr_bucket *e, apr_bucket **c)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-18" target="Documentation">apr_status_t apr_bucket_setaside_notimpl(apr_bucket *data)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-19" target="Documentation">apr_status_t apr_bucket_split_notimpl(apr_bucket *data, apr_off_t point)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-2" target="Documentation">apr_status_t ap_bucket_read(ap_bucket *e, const char **str, apr_size_t *len, ap_read_type block)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-20" target="Documentation">apr_status_t apr_bucket_copy_notimpl(apr_bucket *e, apr_bucket **c)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-21" target="Documentation">apr_status_t apr_bucket_simple_split(apr_bucket *b, apr_off_t point)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-22" target="Documentation">apr_status_t apr_bucket_simple_copy(apr_bucket *a, apr_bucket **b)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-23" target="Documentation">apr_status_t apr_bucket_shared_split(apr_bucket *b, apr_off_t point)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-24" target="Documentation">apr_status_t apr_bucket_shared_copy(apr_bucket *a, apr_bucket **b)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-3" target="Documentation">apr_status_t ap_bucket_setaside(ap_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-4" target="Documentation">apr_status_t ap_bucket_split(ap_bucket *e, apr_off_t point)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-5" target="Documentation">apr_status_t ap_bucket_copy(ap_bucket *e, ap_bucket **c)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-6" target="Documentation">apr_status_t ap_bucket_setaside_notimpl(ap_bucket *data)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-7" target="Documentation">apr_status_t ap_bucket_split_notimpl(ap_bucket *data)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-8" target="Documentation">apr_status_t ap_bucket_copy_notimpl(ap_bucket *e, ap_bucket **c)</a>
  <li><a href="Bucket_Brigades.html#apr_status_t-9" target="Documentation">apr_status_t ap_bucket_split_shared(ap_bucket *b, apr_off_t point)</a>
  <li><a href="Bucket_Brigades.html#int-10" target="Documentation">int AP_BUCKET_IS_FILE(ap_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#int-11" target="Documentation">int AP_BUCKET_IS_PIPE(ap_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#int-12" target="Documentation">int AP_BUCKET_IS_SOCKET(ap_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#int-13" target="Documentation">int AP_BUCKET_IS_HEAP(ap_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#int-14" target="Documentation">int AP_BUCKET_IS_TRANSIENT(ap_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#int-15" target="Documentation">int AP_BUCKET_IS_IMMORTAL(ap_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#int-16" target="Documentation">int AP_BUCKET_IS_MMAP(ap_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#int-17" target="Documentation">int AP_BUCKET_IS_POOL(ap_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#int-18" target="Documentation">int ap_brigade_to_iovec(ap_bucket_brigade *b, struct iovec *vec, int nvec);</a>
  <li><a href="Bucket_Brigades.html#int-19" target="Documentation">int ap_brigade_vputstrs(ap_bucket_brigade *b, va_list va)</a>
  <li><a href="Bucket_Brigades.html#int-20" target="Documentation">int ap_brigade_putstrs(ap_bucket_brigade *b, ...)</a>
  <li><a href="Bucket_Brigades.html#int-21" target="Documentation">int ap_brigade_printf(ap_bucket_brigade *b, const char *fmt, ...) </a>
  <li><a href="Bucket_Brigades.html#int-22" target="Documentation">int ap_brigade_vprintf(ap_bucket_brigade *b, const char *fmt, va_list va) </a>
  <li><a href="Bucket_Brigades.html#int-31" target="Documentation">int APR_BRIGADE_EMPTY(apr_bucket_brigade *b)</a>
  <li><a href="Bucket_Brigades.html#int-32" target="Documentation">int APR_BUCKET_IS_FLUSH(apr_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#int-33" target="Documentation">int APR_BUCKET_IS_EOS(apr_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#int-34" target="Documentation">int APR_BUCKET_IS_FILE(apr_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#int-35" target="Documentation">int APR_BUCKET_IS_PIPE(apr_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#int-36" target="Documentation">int APR_BUCKET_IS_SOCKET(apr_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#int-37" target="Documentation">int APR_BUCKET_IS_HEAP(apr_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#int-38" target="Documentation">int APR_BUCKET_IS_TRANSIENT(apr_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#int-39" target="Documentation">int APR_BUCKET_IS_IMMORTAL(apr_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#int-40" target="Documentation">int APR_BUCKET_IS_MMAP(apr_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#int-41" target="Documentation">int APR_BUCKET_IS_POOL(apr_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#int-42" target="Documentation">int apr_brigade_to_iovec(apr_bucket_brigade *b, struct iovec *vec, int nvec);</a>
  <li><a href="Bucket_Brigades.html#int-43" target="Documentation">int apr_brigade_vputstrs(apr_bucket_brigade *b, apr_brigade_flush flush, void *ctx, va_list va)</a>
  <li><a href="Bucket_Brigades.html#int-44" target="Documentation">int apr_brigade_write(ap_bucket_brigade *b, apr_brigade_flush flush, void *ctx, const char *str, apr_size_t nbyte)</a>
  <li><a href="Bucket_Brigades.html#int-45" target="Documentation">int apr_brigade_puts(ap_bucket_brigade *b, apr_brigade_flush flush, void *ctx, const char *str)</a>
  <li><a href="Bucket_Brigades.html#int-46" target="Documentation">int apr_brigade_putc(apr_bucket_brigade *b, apr_brigade_flush flush, void *ctx, const char c)</a>
  <li><a href="Bucket_Brigades.html#int-47" target="Documentation">int apr_brigade_putstrs(apr_bucket_brigade *b, apr_brigade_flush flush, void *ctx, ...)</a>
  <li><a href="Bucket_Brigades.html#int-48" target="Documentation">int apr_brigade_printf(apr_bucket_brigade *b, apr_brigade_flush flush, void *ctx, const char *fmt, ...) </a>
  <li><a href="Bucket_Brigades.html#int-49" target="Documentation">int apr_brigade_vprintf(apr_bucket_brigade *b, apr_brigade_flush flush, void *ctx, const char *fmt, va_list va) </a>
  <li><a href="Bucket_Brigades.html#int-50" target="Documentation">int apr_bucket_shared_destroy(void *data)</a>
  <li><a href="Bucket_Brigades.html#int-7" target="Documentation">int AP_BRIGADE_SENTINEL(ap_bucket *b)</a>
  <li><a href="Bucket_Brigades.html#int-8" target="Documentation">int AP_BUCKET_IS_FLUSH(ap_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#int-9" target="Documentation">int AP_BUCKET_IS_EOS(ap_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#void" target="Documentation">void AP_BRIGADE_FOREACH(ap_bucket *e, ap_bucket_brigade *b)</a>
  <li><a href="Bucket_Brigades.html#void-10" target="Documentation">void ap_bucket_destroy(ap_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#void-11" target="Documentation">void ap_bucket_destroy(ap_bucket *data)</a>
  <li><a href="Bucket_Brigades.html#void-12" target="Documentation">void *ap_bucket_destroy_shared(ap_bucket *b)</a>
  <li><a href="Bucket_Brigades.html#void-18" target="Documentation">void APR_BRIGADE_FOREACH(apr_bucket *e, apr_bucket_brigade *b)</a>
  <li><a href="Bucket_Brigades.html#void-19" target="Documentation">void APR_BRIGADE_INSERT_HEAD(apr_bucket_brigade *b, apr_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#void-2" target="Documentation">void AP_BRIGADE_INSERT_HEAD(ap_bucket_brigade *b, ap_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#void-20" target="Documentation">void APR_BRIGADE_INSERT_TAIL(apr_bucket_brigade *b, apr_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#void-21" target="Documentation">void APR_BRIGADE_CONCAT(apr_bucket_brigade *a, apr_bucket_brigade *b)</a>
  <li><a href="Bucket_Brigades.html#void-22" target="Documentation">void APR_BUCKET_INSERT_BEFORE(apr_bucket *a, apr_bucket *b)</a>
  <li><a href="Bucket_Brigades.html#void-23" target="Documentation">void APR_BUCKET_INSERT_AFTER(apr_bucket *a, apr_bucket *b)</a>
  <li><a href="Bucket_Brigades.html#void-24" target="Documentation">void APR_BUCKET_REMOVE(apr_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#void-25" target="Documentation">void apr_brigade_consume(apr_bucket_brigade *b, int nbytes)</a>
  <li><a href="Bucket_Brigades.html#void-26" target="Documentation">void apr_bucket_destroy(apr_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#void-27" target="Documentation">void apr_bucket_delete(apr_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#void-28" target="Documentation">void apr_bucket_destroy_notimpl(void *data)</a>
  <li><a href="Bucket_Brigades.html#void-3" target="Documentation">void AP_BRIGADE_INSERT_HEAD(ap_bucket_brigade *b, ap_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#void-4" target="Documentation">void AP_BRIGADE_CONCAT(ap_bucket_brigade *a, ap_bucket_brigade *b)</a>
  <li><a href="Bucket_Brigades.html#void-5" target="Documentation">void AP_BUCKET_INSERT_BEFORE(ap_bucket *a, ap_bucket *b)</a>
  <li><a href="Bucket_Brigades.html#void-6" target="Documentation">void AP_BUCKET_INSERT_AFTER(ap_bucket *a, ap_bucket *b)</a>
  <li><a href="Bucket_Brigades.html#void-7" target="Documentation">void AP_BUCKET_REMOVE(ap_bucket *e)</a>
  <li><a href="Bucket_Brigades.html#void-8" target="Documentation">void ap_brigade_consume(ap_bucket_brigade *b, int nbytes)</a>
  <li><a href="Bucket_Brigades.html#void-9" target="Documentation">void ap_init_bucket_types(apr_pool_t *p)</a>
  </dir><a href="Rings.html" target="Documentation"><b>Rings</b></a><br>
    <dir>
  <li><a href="Rings.html#APR_RING_ENTRY" target="Documentation">APR_RING_ENTRY </a>
  <li><a href="Rings.html#APR_RING_HEAD" target="Documentation">APR_RING_HEAD </a>
  <li><a href="Rings.html#elem" target="Documentation">elem *APR_RING_SENTINEL(head *hp, struct elem, APR_RING_ENTRY link)</a>
  <li><a href="Rings.html#elem-2" target="Documentation">elem *APR_RING_FIRST(head *hp)</a>
  <li><a href="Rings.html#elem-3" target="Documentation">elem *APR_RING_LAST(head *hp)</a>
  <li><a href="Rings.html#elem-4" target="Documentation">elem *APR_RING_NEXT(elem *ep, APR_RING_ENTRY link)</a>
  <li><a href="Rings.html#elem-5" target="Documentation">elem *APR_RING_PREV(elem *ep, APR_RING_ENTRY link)</a>
  <li><a href="Rings.html#int-54" target="Documentation">int APR_RING_EMPTY(head *hp, struct elem, APR_RING_ENTRY link)</a>
  <li><a href="Rings.html#void-35" target="Documentation">void APR_RING_INIT(head *hp, struct elem, APR_RING_ENTRY link)</a>
  <li><a href="Rings.html#void-36" target="Documentation">void APR_RING_ELEM_INIT(elem *ep, APR_RING_ENTRY link)</a>
  <li><a href="Rings.html#void-37" target="Documentation">void APR_RING_SPLICE_BEFORE(elem *lep, elem *ep1, elem *epN, APR_RING_ENTRY link)</a>
  <li><a href="Rings.html#void-38" target="Documentation">void APR_RING_SPLICE_AFTER(elem *lep, elem *ep1, elem *epN, APR_RING_ENTRY link)</a>
  <li><a href="Rings.html#void-39" target="Documentation">void APR_RING_INSERT_BEFORE(elem *lep, elem *nep, APR_RING_ENTRY link)</a>
  <li><a href="Rings.html#void-40" target="Documentation">void APR_RING_INSERT_AFTER(elem *lep, elem *nep, APR_RING_ENTRY link)</a>
  <li><a href="Rings.html#void-41" target="Documentation">void APR_RING_SPLICE_HEAD(head *hp, elem *ep1, elem *epN, struct elem, APR_RING_ENTRY link)</a>
  <li><a href="Rings.html#void-42" target="Documentation">void APR_RING_SPLICE_TAIL(head *hp, elem *ep1, elem *epN, struct elem, APR_RING_ENTRY link)</a>
  <li><a href="Rings.html#void-43" target="Documentation">void APR_RING_INSERT_HEAD(head *hp, elem *nep, struct elem, APR_RING_ENTRY link)</a>
  <li><a href="Rings.html#void-44" target="Documentation">void APR_RING_INSERT_TAIL(head *hp, elem *nep, struct elem, APR_RING_ENTRY link)</a>
  <li><a href="Rings.html#void-45" target="Documentation">void APR_RING_CONCAT(head *h1, head *h2, struct elem, APR_RING_ENTRY link)</a>
  <li><a href="Rings.html#void-46" target="Documentation">void APR_RING_UNSPLICE(elem *ep1, elem *epN, APR_RING_ENTRY link)</a>
  <li><a href="Rings.html#void-47" target="Documentation">void APR_RING_REMOVE(elem *ep, APR_RING_ENTRY link)</a>
  <li><a href="Rings.html#void-48" target="Documentation">void APR_RING_FOREACH(elem *ep, head *hp, struct elem, APR_RING_ENTRY link)</a>
  <li><a href="Rings.html#void-49" target="Documentation">void APR_RING_FOREACH_REVERSE(elem *ep, head *hp, struct elem, APR_RING_ENTRY link)</a>
  <li><a href="Rings.html#void-50" target="Documentation">void APR_RING_CHECK_ONE(char *msg, void *ptr)</a>
  <li><a href="Rings.html#void-51" target="Documentation">void APR_RING_CHECK(head *hp, struct elem, APR_RING_ENTRY link, char *msg)</a>
  <li><a href="Rings.html#void-52" target="Documentation">void APR_RING_CHECK_ELEM(elem *ep, struct elem, APR_RING_ENTRY link, char *msg)</a>
  </dir><a href="SHA1_library.html" target="Documentation"><b>SHA1 library</b></a><br>
    <dir>
  <li><a href="SHA1_library.html#AP_SHA1_CTX" target="Documentation">struct AP_SHA1_CTX</a>
  <li><a href="SHA1_library.html#apr_sha1_ctx_t" target="Documentation">struct apr_sha1_ctx_t</a>
  <li><a href="SHA1_library.html#APR_SHA1PW_ID" target="Documentation">APR_SHA1PW_ID "{SHA}"</a>
  <li><a href="SHA1_library.html#AP_SHA1PW_ID" target="Documentation">AP_SHA1PW_ID "{SHA}"</a>
  <li><a href="SHA1_library.html#void-53" target="Documentation">void apr_sha1_base64(const char *clear, int len, char *out)</a>
  <li><a href="SHA1_library.html#void-54" target="Documentation">void apr_sha1_init(apr_sha1_ctx_t *context);</a>
  <li><a href="SHA1_library.html#void-55" target="Documentation">void apr_sha1_update(apr_sha1_ctx_t *context, const char *input, unsigned int inputLen)</a>
  <li><a href="SHA1_library.html#void-56" target="Documentation">void apr_sha1_update_binary(apr_sha1_ctx_t *context, const unsigned char *input, unsigned int inputLen)</a>
  <li><a href="SHA1_library.html#void-57" target="Documentation">void apr_sha1_final(unsigned char digest[APR_SHA1_DIGESTSIZE], apr_sha1_ctx_t *context)</a>
  <li><a href="SHA1_library.html#void-61" target="Documentation">void ap_sha1_base64(const char *clear, int len, char *out)</a>
  <li><a href="SHA1_library.html#void-62" target="Documentation">void ap_SHA1Init(AP_SHA1_CTX *context);</a>
  <li><a href="SHA1_library.html#void-63" target="Documentation">void ap_SHA1Update(AP_SHA1_CTX *context, const char *input, unsigned int inputLen)</a>
  <li><a href="SHA1_library.html#void-64" target="Documentation">void ap_SHA1Update_binary(AP_SHA1_CTX *context, const unsigned char *input, unsigned int inputLen)</a>
  <li><a href="SHA1_library.html#void-65" target="Documentation">void ap_SHA1Final(unsigned char digest[SHA_DIGESTSIZE], AP_SHA1_CTX *context)</a>
  </dir>
            <a href="to-do.html" target="Documentation"><b>To-Do List</b></a><br>
          </nobr>
        </font>
      </p>
    </body>
  </html>
  
  
  
  1.1                  apr-site/docs/apr-util/packages.html
  
  Index: packages.html
  ===================================================================
  <html>
    <head>
      <title>[Apache Portable RunTime Utility Library] -- Packages</title>
    </head>
    <body bgcolor="#FFFFFF">
  
      <center>
      <h1>Documentation for [Apache Portable RunTime Utility Library]</h1>
      </center>
      <h2>Package List</h2>
  <a href = "General.html">General</a><br>
  <a href = "APR-UTIL_DBM_library.html">APR-UTIL DBM library</a><br>
  <a href = "Apache_XML_library.html">Apache XML library</a><br>
  <a href = "Apache_hooks_functions.html">Apache hooks functions</a><br>
  <a href = "Base64_Encoding.html">Base64 Encoding</a><br>
  <a href = "Bucket_Brigades.html">Bucket Brigades</a><br>
  <a href = "Rings.html">Rings</a><br>
  <a href = "SHA1_library.html">SHA1 library</a><br>
  
      <p>
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:57:40 2001
  <br>
    </body>
  </html>
  
  
  
  
  1.1                  apr-site/docs/apr-util/to-do.html
  
  Index: to-do.html
  ===================================================================
  <html>
    <head>
      <title>[Apache Portable RunTime Utility Library] -- To-Do list</title>
    </head>
    <body bgcolor="#FFFFFF">
  
      
  
      <h1>To-do list for [Apache Portable RunTime Utility Library]</h1>
  
      <hr size=4>
      &copy 2000 [Apache Software Foundation]<br>
      Generated by <a href="http://scandoc.sourceforge.net/"><b>ScanDoc 0.12</b></a><br>
      Last Updated: Mon Apr  9 14:57:40 2001
  <br>
    </body>
  </html>
  
  
  

Mime
View raw message