lwres_buffer.html revision ddccd5811feff696ba460dabfb666ce61040f545
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<!--
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe - Copyright (C) 2000, 2001 Internet Software Consortium.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe -
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe - Permission to use, copy, modify, and distribute this software for any
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe - purpose with or without fee is hereby granted, provided that the above
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe - copyright notice and this permission notice appear in all copies.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe -
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe - THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe - DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe - INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe - FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov - NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
506aa7c68b127eefb0197e329af7e9abcc3ebc98Garrett D'Amore - WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov-->
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<HTML
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><HEAD
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe><TITLE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>lwres_buffer</TITLE
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe><META
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovNAME="GENERATOR"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCONTENT="Modular DocBook HTML Stylesheet Version 1.61
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov"></HEAD
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><BODY
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="REFENTRY"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovBGCOLOR="#FFFFFF"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovTEXT="#000000"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovLINK="#0000FF"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovVLINK="#840084"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovALINK="#0000FF"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><H1
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><A
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovNAME="AEN1"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>lwres_buffer</A
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></H1
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><DIV
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="REFNAMEDIV"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><A
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovNAME="AEN8"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></A
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><H2
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>Name</H2
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>lwres_buffer_init, lwres_buffer_invalidate, lwres_buffer_add, lwres_buffer_subtract, lwres_buffer_clear, lwres_buffer_first, lwres_buffer_forward, lwres_buffer_back, lwres_buffer_getuint8, lwres_buffer_putuint8, lwres_buffer_getuint16, lwres_buffer_putuint16, lwres_buffer_getuint32, lwres_buffer_putuint32, lwres_buffer_putmem, lwres_buffer_getmem&nbsp;--&nbsp;lightweight resolver buffer management</DIV
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><DIV
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="REFSYNOPSISDIV"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><A
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovNAME="AEN26"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></A
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><H2
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>Synopsis</H2
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><DIV
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="FUNCSYNOPSIS"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><A
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovNAME="AEN27"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></A
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><PRE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="FUNCSYNOPSISINFO"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>#include &lt;lwres/lwbuffer.h&gt;</PRE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="FUNCDEF"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>void
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovlwres_buffer_init</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>(lwres_buffer_t *b, void *base, unsigned int length);</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="FUNCDEF"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>void
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovlwres_buffer_invalidate</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>(lwres_buffer_t *b);</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="FUNCDEF"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>void
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovlwres_buffer_add</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>(lwres_buffer_t *b, unsigned int n);</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="FUNCDEF"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>void
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovlwres_buffer_subtract</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>(lwres_buffer_t *b, unsigned int n);</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="FUNCDEF"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>void
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovlwres_buffer_clear</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>(lwres_buffer_t *b);</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="FUNCDEF"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>void
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovlwres_buffer_first</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>(lwres_buffer_t *b);</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="FUNCDEF"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>void
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovlwres_buffer_forward</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>(lwres_buffer_t *b, unsigned int n);</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="FUNCDEF"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>void
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovlwres_buffer_back</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>(lwres_buffer_t *b, unsigned int n);</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="FUNCDEF"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>lwres_uint8_t
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovlwres_buffer_getuint8</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>(lwres_buffer_t *b);</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="FUNCDEF"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>void
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovlwres_buffer_putuint8</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>(lwres_buffer_t *b, lwres_uint8_t val);</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="FUNCDEF"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>lwres_uint16_t
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovlwres_buffer_getuint16</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>(lwres_buffer_t *b);</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="FUNCDEF"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>void
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovlwres_buffer_putuint16</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>(lwres_buffer_t *b, lwres_uint16_t val);</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="FUNCDEF"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>lwres_uint32_t
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovlwres_buffer_getuint32</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>(lwres_buffer_t *b);</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="FUNCDEF"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>void
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovlwres_buffer_putuint32</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>(lwres_buffer_t *b, lwres_uint32_t val);</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="FUNCDEF"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>void
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovlwres_buffer_putmem</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>(lwres_buffer_t *b, const unsigned char *base, unsigned int length);</CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov></P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><CODE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="FUNCDEF"
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe>void
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovlwres_buffer_getmem</CODE
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe>(lwres_buffer_t *b, unsigned char *base, unsigned int length);</CODE
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe></P
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe><P
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe></P
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe></DIV
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe></DIV
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe><DIV
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweCLASS="REFSECT1"
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe><A
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweNAME="AEN106"
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe></A
7ffba875a0c7cf118aef7a2c9bfd00c3935e230aGarrett D'Amore><H2
7ffba875a0c7cf118aef7a2c9bfd00c3935e230aGarrett D'Amore>DESCRIPTION</H2
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe><P
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe>These functions provide bounds checked access to a region of memory
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowewhere data is being read or written.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweThey are based on, and similar to, the
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<TT
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweCLASS="LITERAL"
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe>isc_buffer_</TT
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe>
8bf58058bb64c24ccf6da9141b2f10037725b137Richard Lowefunctions in the ISC library.</P
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe><P
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe>A buffer is a region of memory, together with a set of related
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowesubregions.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweThe <I
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry JelinekCLASS="EMPHASIS"
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe>used region</I
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe> and the
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<I
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweCLASS="EMPHASIS"
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe>available</I
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe> region are disjoint, and
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowetheir union is the buffer's region.
6d8b5bf1bbeb8c7f1357b3e5836fe664fb0fcc46Richard LoweThe used region extends from the beginning of the buffer region to the
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowelast used byte.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweThe available region extends from one byte greater than the last used
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowebyte to the end of the buffer's region.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweThe size of the used region can be changed using various
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowebuffer commands.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweInitially, the used region is empty.</P
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe><P
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe>The used region is further subdivided into two disjoint regions: the
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<I
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweCLASS="EMPHASIS"
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe>consumed region</I
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe> and the <I
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweCLASS="EMPHASIS"
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe>remaining region</I
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe>.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweThe union of these two regions is the used region.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweThe consumed region extends from the beginning of the used region to
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovthe byte before the <I
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweCLASS="EMPHASIS"
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe>current</I
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe> offset (if any).
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweThe <I
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweCLASS="EMPHASIS"
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe>remaining</I
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe> region the current pointer to the end of the used
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweregion.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweThe size of the consumed region can be changed using various
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowebuffer commands.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweInitially, the consumed region is empty.</P
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe><P
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe>The <I
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweCLASS="EMPHASIS"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>active region</I
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov> is an (optional) subregion of the remaining
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovregion.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweIt extends from the current offset to an offset in the
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovremaining region.
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovInitially, the active region is empty.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweIf the current offset advances beyond the chosen offset,
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankovthe active region will also be empty.</P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><P
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe><PRE
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="PROGRAMLISTING"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov /------------entire length---------------\\
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe /----- used region -----\\/-- available --\\
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov +----------------------------------------+
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe | consumed | remaining | |
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov +----------------------------------------+
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov a b c d e
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov a == base of buffer.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe b == current pointer. Can be anywhere between a and d.
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov c == active pointer. Meaningful between b and d.
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov d == used pointer.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe e == length of buffer.
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe a-e == entire length of buffer.
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov a-d == used region.
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov a-b == consumed region.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe b-d == remaining region.
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov b-c == optional active region.</PRE
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe></P
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov><P
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe><TT
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri PankovCLASS="FUNCTION"
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe>lwres_buffer_init()</TT
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweinitializes the
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov<SPAN
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweCLASS="TYPE"
a9478106a12424322498e53cf7cd75bd8a4d6004Yuri Pankov>lwres_buffer_t</SPAN
>
<TT
CLASS="PARAMETER"
><I
>*b</I
></TT
>
and assocates it with the memory region of size
<TT
CLASS="PARAMETER"
><I
>length</I
></TT
>
bytes starting at location
<TT
CLASS="PARAMETER"
><I
>base.</I
></TT
></P
><P
><TT
CLASS="FUNCTION"
>lwres_buffer_invalidate()</TT
>
marks the buffer
<TT
CLASS="PARAMETER"
><I
>*b</I
></TT
>
as invalid. Invalidating a buffer after use is not required,
but makes it possible to catch its possible accidental use.</P
><P
>The functions
<TT
CLASS="FUNCTION"
>lwres_buffer_add()</TT
>
and
<TT
CLASS="FUNCTION"
>lwres_buffer_subtract()</TT
>
respectively increase and decrease the used space in
buffer
<TT
CLASS="PARAMETER"
><I
>*b</I
></TT
>
by
<TT
CLASS="PARAMETER"
><I
>n</I
></TT
>
bytes.
<TT
CLASS="FUNCTION"
>lwres_buffer_add()</TT
>
checks for buffer overflow and
<TT
CLASS="FUNCTION"
>lwres_buffer_subtract()</TT
>
checks for underflow.
These functions do not allocate or deallocate memory.
They just change the value of
<TT
CLASS="STRUCTFIELD"
><I
>used</I
></TT
>.</P
><P
>A buffer is re-initialised by
<TT
CLASS="FUNCTION"
>lwres_buffer_clear()</TT
>.
The function sets
<TT
CLASS="STRUCTFIELD"
><I
>used</I
></TT
> ,
<TT
CLASS="STRUCTFIELD"
><I
>current</I
></TT
>
and
<TT
CLASS="STRUCTFIELD"
><I
>active</I
></TT
>
to zero.</P
><P
><TT
CLASS="FUNCTION"
>lwres_buffer_first</TT
>
makes the consumed region of buffer
<TT
CLASS="PARAMETER"
><I
>*p</I
></TT
>
empty by setting
<TT
CLASS="STRUCTFIELD"
><I
>current</I
></TT
>
to zero (the start of the buffer).</P
><P
><TT
CLASS="FUNCTION"
>lwres_buffer_forward()</TT
>
increases the consumed region of buffer
<TT
CLASS="PARAMETER"
><I
>*b</I
></TT
>
by
<TT
CLASS="PARAMETER"
><I
>n</I
></TT
>
bytes, checking for overflow.
Similarly,
<TT
CLASS="FUNCTION"
>lwres_buffer_back()</TT
>
decreases buffer
<TT
CLASS="PARAMETER"
><I
>b</I
></TT
>'s
consumed region by
<TT
CLASS="PARAMETER"
><I
>n</I
></TT
>
bytes and checks for underflow.</P
><P
><TT
CLASS="FUNCTION"
>lwres_buffer_getuint8()</TT
>
reads an unsigned 8-bit integer from
<TT
CLASS="PARAMETER"
><I
>*b</I
></TT
>
and returns it.
<TT
CLASS="FUNCTION"
>lwres_buffer_putuint8()</TT
>
writes the unsigned 8-bit integer
<TT
CLASS="PARAMETER"
><I
>val</I
></TT
>
to buffer
<TT
CLASS="PARAMETER"
><I
>*b</I
></TT
>.</P
><P
><TT
CLASS="FUNCTION"
>lwres_buffer_getuint16()</TT
>
and
<TT
CLASS="FUNCTION"
>lwres_buffer_getuint32()</TT
>
are identical to
<TT
CLASS="FUNCTION"
>lwres_buffer_putuint8()</TT
>
except that they respectively read an unsigned 16-bit or 32-bit integer
in network byte order from
<TT
CLASS="PARAMETER"
><I
>b</I
></TT
>.
Similarly,
<TT
CLASS="FUNCTION"
>lwres_buffer_putuint16()</TT
>
and
<TT
CLASS="FUNCTION"
>lwres_buffer_putuint32()</TT
>
writes the unsigned 16-bit or 32-bit integer
<TT
CLASS="PARAMETER"
><I
>val</I
></TT
>
to buffer
<TT
CLASS="PARAMETER"
><I
>b</I
></TT
>,
in network byte order.</P
><P
>Arbitrary amounts of data are read or written from a lightweight
resolver buffer with
<TT
CLASS="FUNCTION"
>lwres_buffer_getmem()</TT
>
and
<TT
CLASS="FUNCTION"
>lwres_buffer_putmem()</TT
>
respectively.
<TT
CLASS="FUNCTION"
>lwres_buffer_putmem()</TT
>
copies
<TT
CLASS="PARAMETER"
><I
>length</I
></TT
>
bytes of memory at
<TT
CLASS="PARAMETER"
><I
>base</I
></TT
>
to
<TT
CLASS="PARAMETER"
><I
>b</I
></TT
>.
Conversely,
<TT
CLASS="FUNCTION"
>lwres_buffer_getmem()</TT
>
copies
<TT
CLASS="PARAMETER"
><I
>length</I
></TT
>
bytes of memory from
<TT
CLASS="PARAMETER"
><I
>b</I
></TT
>
to
<TT
CLASS="PARAMETER"
><I
>base</I
></TT
>.</P
></DIV
></BODY
></HTML
>