/usr/include/lwres/lwbuffer.h is in libbind-dev 1:9.11.3+dfsg-1ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 | /*
* Copyright (C) 2000, 2001, 2004-2007, 2016 Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/* $Id: lwbuffer.h,v 1.22 2007/06/19 23:47:23 tbox Exp $ */
/*! \file lwres/lwbuffer.h
*
* A buffer is a region of memory, together with a set of related subregions.
* Buffers are used for parsing and I/O operations.
*
* The 'used region' and the 'available' region are disjoint, and their
* union is the buffer's region. The used region extends from the beginning
* of the buffer region to the last used byte. The available region
* extends from one byte greater than the last used byte to the end of the
* buffer's region. The size of the used region can be changed using various
* buffer commands. Initially, the used region is empty.
*
* The used region is further subdivided into two disjoint regions: the
* 'consumed region' and the 'remaining region'. The union of these two
* regions is the used region. The consumed region extends from the beginning
* of the used region to the byte before the 'current' offset (if any). The
* 'remaining' region the current pointer to the end of the used
* region. The size of the consumed region can be changed using various
* buffer commands. Initially, the consumed region is empty.
*
* The 'active region' is an (optional) subregion of the remaining region.
* It extends from the current offset to an offset in the remaining region
* that is selected with lwres_buffer_setactive(). Initially, the active
* region is empty. If the current offset advances beyond the chosen offset,
* the active region will also be empty.
*
* \verbatim
* /----- used region -----\/-- available --\
* +----------------------------------------+
* | consumed | remaining | |
* +----------------------------------------+
* a b c d e
*
* a == base of buffer.
* b == current pointer. Can be anywhere between a and d.
* c == active pointer. Meaningful between b and d.
* d == used pointer.
* e == length of buffer.
*
* a-e == entire (length) of buffer.
* a-d == used region.
* a-b == consumed region.
* b-d == remaining region.
* b-c == optional active region.
* \endverbatim
*
* The following invariants are maintained by all routines:
*
*\verbatim
* length > 0
*
* base is a valid pointer to length bytes of memory
*
* 0 <= used <= length
*
* 0 <= current <= used
*
* 0 <= active <= used
* (although active < current implies empty active region)
*\endverbatim
*
* \li MP:
* Buffers have no synchronization. Clients must ensure exclusive
* access.
*
* \li Reliability:
* No anticipated impact.
*
* \li Resources:
* Memory: 1 pointer + 6 unsigned integers per buffer.
*
* \li Security:
* No anticipated impact.
*
* \li Standards:
* None.
*/
#ifndef LWRES_LWBUFFER_H
#define LWRES_LWBUFFER_H 1
/***
*** Imports
***/
#include <lwres/lang.h>
#include <lwres/int.h>
LWRES_LANG_BEGINDECLS
/***
*** Magic numbers
***/
#define LWRES_BUFFER_MAGIC 0x4275663fU /* Buf?. */
#define LWRES_BUFFER_VALID(b) ((b) != NULL && \
(b)->magic == LWRES_BUFFER_MAGIC)
/*!
* The following macros MUST be used only on valid buffers. It is the
* caller's responsibility to ensure this by using the LWRES_BUFFER_VALID
* check above, or by calling another lwres_buffer_*() function (rather than
* another macro.)
*/
/*!
* Get the length of the used region of buffer "b"
*/
#define LWRES_BUFFER_USEDCOUNT(b) ((b)->used)
/*!
* Get the length of the available region of buffer "b"
*/
#define LWRES_BUFFER_AVAILABLECOUNT(b) ((b)->length - (b)->used)
#define LWRES_BUFFER_REMAINING(b) ((b)->used - (b)->current)
/*!
* Note that the buffer structure is public. This is principally so buffer
* operations can be implemented using macros. Applications are strongly
* discouraged from directly manipulating the structure.
*/
typedef struct lwres_buffer lwres_buffer_t;
/*!
* Buffer data structure
*/
struct lwres_buffer {
unsigned int magic;
unsigned char *base;
/* The following integers are byte offsets from 'base'. */
unsigned int length;
unsigned int used;
unsigned int current;
unsigned int active;
};
/***
*** Functions
***/
void
lwres_buffer_init(lwres_buffer_t *b, void *base, unsigned int length);
/**<
* Make 'b' refer to the 'length'-byte region starting at base.
*
* Requires:
*
* 'length' > 0
*
* 'base' is a pointer to a sequence of 'length' bytes.
*
*/
void
lwres_buffer_invalidate(lwres_buffer_t *b);
/**<
* Make 'b' an invalid buffer.
*
* Requires:
* 'b' is a valid buffer.
*
* Ensures:
* If assertion checking is enabled, future attempts to use 'b' without
* calling lwres_buffer_init() on it will cause an assertion failure.
*/
void
lwres_buffer_add(lwres_buffer_t *b, unsigned int n);
/**<
* Increase the 'used' region of 'b' by 'n' bytes.
*
* Requires:
*
* 'b' is a valid buffer
*
* used + n <= length
*
*/
void
lwres_buffer_subtract(lwres_buffer_t *b, unsigned int n);
/**<
* Decrease the 'used' region of 'b' by 'n' bytes.
*
* Requires:
*
* 'b' is a valid buffer
*
* used >= n
*
*/
void
lwres_buffer_clear(lwres_buffer_t *b);
/**<
* Make the used region empty.
*
* Requires:
*
* 'b' is a valid buffer
*
* Ensures:
*
* used = 0
*
*/
void
lwres_buffer_first(lwres_buffer_t *b);
/**<
* Make the consumed region empty.
*
* Requires:
*
* 'b' is a valid buffer
*
* Ensures:
*
* current == 0
*
*/
void
lwres_buffer_forward(lwres_buffer_t *b, unsigned int n);
/**<
* Increase the 'consumed' region of 'b' by 'n' bytes.
*
* Requires:
*
* 'b' is a valid buffer
*
* current + n <= used
*
*/
void
lwres_buffer_back(lwres_buffer_t *b, unsigned int n);
/**<
* Decrease the 'consumed' region of 'b' by 'n' bytes.
*
* Requires:
*
* 'b' is a valid buffer
*
* n <= current
*
*/
lwres_uint8_t
lwres_buffer_getuint8(lwres_buffer_t *b);
/**<
* Read an unsigned 8-bit integer from 'b' and return it.
*
* Requires:
*
* 'b' is a valid buffer.
*
* The length of the available region of 'b' is at least 1.
*
* Ensures:
*
* The current pointer in 'b' is advanced by 1.
*
* Returns:
*
* A 8-bit unsigned integer.
*/
void
lwres_buffer_putuint8(lwres_buffer_t *b, lwres_uint8_t val);
/**<
* Store an unsigned 8-bit integer from 'val' into 'b'.
*
* Requires:
* 'b' is a valid buffer.
*
* The length of the unused region of 'b' is at least 1.
*
* Ensures:
* The used pointer in 'b' is advanced by 1.
*/
lwres_uint16_t
lwres_buffer_getuint16(lwres_buffer_t *b);
/**<
* Read an unsigned 16-bit integer in network byte order from 'b', convert
* it to host byte order, and return it.
*
* Requires:
*
* 'b' is a valid buffer.
*
* The length of the available region of 'b' is at least 2.
*
* Ensures:
*
* The current pointer in 'b' is advanced by 2.
*
* Returns:
*
* A 16-bit unsigned integer.
*/
void
lwres_buffer_putuint16(lwres_buffer_t *b, lwres_uint16_t val);
/**<
* Store an unsigned 16-bit integer in host byte order from 'val'
* into 'b' in network byte order.
*
* Requires:
* 'b' is a valid buffer.
*
* The length of the unused region of 'b' is at least 2.
*
* Ensures:
* The used pointer in 'b' is advanced by 2.
*/
lwres_uint32_t
lwres_buffer_getuint32(lwres_buffer_t *b);
/**<
* Read an unsigned 32-bit integer in network byte order from 'b', convert
* it to host byte order, and return it.
*
* Requires:
*
* 'b' is a valid buffer.
*
* The length of the available region of 'b' is at least 2.
*
* Ensures:
*
* The current pointer in 'b' is advanced by 2.
*
* Returns:
*
* A 32-bit unsigned integer.
*/
void
lwres_buffer_putuint32(lwres_buffer_t *b, lwres_uint32_t val);
/**<
* Store an unsigned 32-bit integer in host byte order from 'val'
* into 'b' in network byte order.
*
* Requires:
* 'b' is a valid buffer.
*
* The length of the unused region of 'b' is at least 4.
*
* Ensures:
* The used pointer in 'b' is advanced by 4.
*/
void
lwres_buffer_putmem(lwres_buffer_t *b, const unsigned char *base,
unsigned int length);
/**<
* Copy 'length' bytes of memory at 'base' into 'b'.
*
* Requires:
* 'b' is a valid buffer.
*
* 'base' points to 'length' bytes of valid memory.
*
*/
void
lwres_buffer_getmem(lwres_buffer_t *b, unsigned char *base,
unsigned int length);
/**<
* Copy 'length' bytes of memory from 'b' into 'base'.
*
* Requires:
* 'b' is a valid buffer.
*
* 'base' points to at least 'length' bytes of valid memory.
*
* 'b' have at least 'length' bytes remaining.
*/
LWRES_LANG_ENDDECLS
#endif /* LWRES_LWBUFFER_H */
|