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:
<PRE>
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.
</PRE>
</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:
<PRE>
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
</PRE>
</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 < 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>
© 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">
<PRE>
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.
</PRE>
<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>
© 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>
© 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:
<PRE>
APR_MMAP_READ MMap opened for reading
APR_MMAP_WRITE MMap opened for writing
</PRE>
</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>
© 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">
<PRE>
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.
</PRE>
<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">
<PRE>
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.
</PRE>
<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">
<PRE>
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.
</PRE>
<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:
<PRE>
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
</PRE></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:
<PRE>
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
</PRE></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:
<PRE>
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
</PRE></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:
<PRE>
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.
</PRE>
</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:
<PRE>
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
</PRE></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:
<PRE>
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 < 0 mean wait forever. 0 means
don't wait at all.
APR_SO_SNDBUF -- Set the SendBufferSize
APR_SO_RCVBUF -- Set the ReceiveBufferSize
</PRE>
</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:
<PRE>
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 < 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)
</PRE>
</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">
<PRE>
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.
</PRE>
<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>
© 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:
<PRE>
APR_CHILD_DONE -- child is no longer running.
APR_CHILD_NOTDONE -- child is still running.
</PRE>
<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->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:
<PRE>
APR_SHELLCMD -- Shell script
APR_PROGRAM -- Executable program (default)
</PRE></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:
<PRE>
APR_LIMIT_CPU
APR_LIMIT_MEM
APR_LIMIT_NPROC
</PRE>
</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:
<PRE>
APR_WAIT -- block until the child process dies.
APR_NOWAIT -- return immediately regardless of if the
child is dead or not.
</PRE></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:
<PRE>
APR_WAIT -- block until the child process dies.
APR_NOWAIT -- return immediately regardless of if the
child is dead or not.
</PRE>
</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:
<PRE>
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
</PRE></td></tr>
</table>
</dl></dl>
</blockquote>
<hr size=4>
© 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>
© 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>
© 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. <PRE>
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 </PRE>
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>
© 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>
© 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>
© 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:
<PRE>
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.
</PRE><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:
<PRE>
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.
</PRE>
When APR_SUCCESS is returned, os->ind gives the index of the first
non-option argument. On error, a message will be printed to stdout unless
os->err is set to 0. If os->interleave is set to nonzero, options can
come
after arguments, and os->argv will be permuted to leave non-option
arguments
at the end (the original argv is unaffected).<p></dl></dl>
</blockquote>
<hr size=4>
© 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:
<PRE>
"/foo/bar/gum" -> "gum"
"/foo/bar/gum/" -> ""
"gum" -> "gum"
"wi\\n32\\stuff" -> "stuff"
</PRE>
<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"> <PRE>
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 >= 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.
</PRE>
<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>
© 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:
<PRE>
APR_MUTEX
APR_READWRITE
</PRE>
</td></tr>
<tr valign=top><th align=right>
scope</th><td>The scope of the lock to create, one of:
<PRE>
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.
</PRE>
</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>
© 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>
© 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>
© 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>
<p><img src="../images//tip.gif">
<PRE>
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.
</PRE>
<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 <0, 0, or >0. If the first string is less than the second
this returns <0, if they are equivalent it returns 0, and if the
first string is greater than second string it retuns
>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 <0, 0, or >0. If the first string is less than the second
this returns <0, if they are equivalent it returns 0, and if the
first string is greater than second string it retuns
>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>
© 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>
© 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>
© 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:
<PRE>
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.
</PRE></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>
© 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.
<PRE>
<b>APR ERROR VALUES</b>
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
</PRE>
<PRE>
<b>APR STATUS VALUES</b>
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.
</PRE>
<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>
© 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:
<PRE><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.
</PRE>
<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>
© 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>
© 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>
© 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>
© 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>
© 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 '<', '>', and '&'.
<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
'"'.</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>
© 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>
© 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>
© 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>
© 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>
© 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>
© 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>
© 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>
© 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>
© 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>