xref: /openbsd-src/usr.bin/dig/lib/isc/include/isc/region.h (revision 8bc8da422db0ed3576cc9fbc611c7cad7bbc911c)
1 /*
2  * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
9  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
10  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
11  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
12  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
13  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14  * PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 /* $Id: region.h,v 1.4 2020/02/24 15:09:14 jsg Exp $ */
18 
19 #ifndef ISC_REGION_H
20 #define ISC_REGION_H 1
21 
22 /*! \file isc/region.h */
23 
24 #include <isc/types.h>
25 
26 struct isc_region {
27 	unsigned char *	base;
28 	unsigned int	length;
29 };
30 
31 struct isc_textregion {
32 	char *		base;
33 	unsigned int	length;
34 };
35 
36 /*@{*/
37 /*!
38  * The region structure is not opaque, and is usually directly manipulated.
39  * Some macros are defined below for convenience.
40  */
41 
42 #define isc_region_consume(r,l) \
43 	do { \
44 		isc_region_t *_r = (r); \
45 		unsigned int _l = (l); \
46 		INSIST(_r->length >= _l); \
47 		_r->base += _l; \
48 		_r->length -= _l; \
49 	} while (0)
50 /*@}*/
51 
52 #endif /* ISC_REGION_H */
53