⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buffer.h

📁 bind 9.3结合mysql数据库
💻 H
📖 第 1 页 / 共 2 页
字号:
 * */voidisc_buffer_compact(isc_buffer_t *b);/* * Compact the used region by moving the remaining region so it occurs * at the start of the buffer.  The used region is shrunk by the size of * the consumed region, and the consumed region is then made empty. * * Requires: * *	'b' is a valid buffer * * Ensures: * *	current == 0 * *	The size of the used region is now equal to the size of the remaining *	region (as it was before the call).  The contents of the used region *	are those of the remaining region (as it was before the call). */isc_uint8_tisc_buffer_getuint8(isc_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. */voidisc__buffer_putuint8(isc_buffer_t *b, isc_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. */isc_uint16_tisc_buffer_getuint16(isc_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. */voidisc__buffer_putuint16(isc_buffer_t *b, isc_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. */isc_uint32_tisc_buffer_getuint32(isc_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 4. * * Ensures: * *	The current pointer in 'b' is advanced by 4. * * Returns: * *	A 32-bit unsigned integer. */voidisc__buffer_putuint32(isc_buffer_t *b, isc_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. */voidisc__buffer_putmem(isc_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. * */voidisc__buffer_putstr(isc_buffer_t *b, const char *source);/* * Copy 'source' into 'b', not including terminating NUL. * * Requires: *	'b' is a valid buffer. * *	'source' to be a valid NULL terminated string. * *	strlen(source) <= isc_buffer_available(b) */isc_result_tisc_buffer_copyregion(isc_buffer_t *b, const isc_region_t *r);/* * Copy the contents of 'r' into 'b'. * * Requires: *	'b' is a valid buffer. * *	'r' is a valid region. * * Returns: * *	ISC_R_SUCCESS *	ISC_R_NOSPACE			The available region of 'b' is not *					big enough. */ISC_LANG_ENDDECLS/* * Inline macro versions of the functions.  These should never be called * directly by an application, but will be used by the functions within * buffer.c.  The callers should always use "isc_buffer_*()" names, never * ones beginning with "isc__" *//* * XXXDCL Something more could be done with initializing buffers that * point to const data.  For example, a new function, isc_buffer_initconst, * could be used, and a new boolean flag in the buffer structure could * indicate whether the buffer was initialized with that function. * (isc_bufer_init itself would be reprototyped to *not* have its "base" * parameter be const.)  Then if the boolean were true, the isc_buffer_put* * functions could assert a contractual requirement for a non-const buffer. * One drawback is that the isc_buffer_* functions (macros) that return * pointers would still need to return non-const pointers to avoid compiler * warnings, so it would be up to code that uses them to have to deal * with the possibility that the buffer was initialized as const -- * a problem that they *already* have to deal with but have absolutely * no ability to.  With a new isc_buffer_isconst() function returning * true/false, they could at least assert a contractual requirement for * non-const buffers when needed. */#define ISC__BUFFER_INIT(_b, _base, _length) \	do { \		union { \			const void *	konst; \			void *		var; \		} _u; \		_u.konst = (_base); \		(_b)->base = _u.var; \		(_b)->length = (_length); \		(_b)->used = 0; \		(_b)->current = 0; \		(_b)->active = 0; \		(_b)->mctx = NULL; \		ISC_LINK_INIT(_b, link); \		(_b)->magic = ISC_BUFFER_MAGIC; \	} while (0)#define ISC__BUFFER_INVALIDATE(_b) \	do { \		(_b)->magic = 0; \		(_b)->base = NULL; \		(_b)->length = 0; \		(_b)->used = 0; \		(_b)->current = 0; \		(_b)->active = 0; \	} while (0)#define ISC__BUFFER_REGION(_b, _r) \	do { \		(_r)->base = (_b)->base; \		(_r)->length = (_b)->length; \	} while (0)#define ISC__BUFFER_USEDREGION(_b, _r) \	do { \		(_r)->base = (_b)->base; \		(_r)->length = (_b)->used; \	} while (0)#define ISC__BUFFER_AVAILABLEREGION(_b, _r) \	do { \		(_r)->base = isc_buffer_used(_b); \		(_r)->length = isc_buffer_availablelength(_b); \	} while (0)#define ISC__BUFFER_ADD(_b, _n) \	do { \		(_b)->used += (_n); \	} while (0)#define ISC__BUFFER_SUBTRACT(_b, _n) \	do { \		(_b)->used -= (_n); \		if ((_b)->current > (_b)->used) \			(_b)->current = (_b)->used; \		if ((_b)->active > (_b)->used) \			(_b)->active = (_b)->used; \	} while (0)#define ISC__BUFFER_CLEAR(_b) \	do { \		(_b)->used = 0; \		(_b)->current = 0; \		(_b)->active = 0; \	} while (0)#define ISC__BUFFER_CONSUMEDREGION(_b, _r) \	do { \		(_r)->base = (_b)->base; \		(_r)->length = (_b)->current; \	} while (0)#define ISC__BUFFER_REMAININGREGION(_b, _r) \	do { \		(_r)->base = isc_buffer_current(_b); \		(_r)->length = isc_buffer_remaininglength(_b); \	} while (0)#define ISC__BUFFER_ACTIVEREGION(_b, _r) \	do { \		if ((_b)->current < (_b)->active) { \			(_r)->base = isc_buffer_current(_b); \			(_r)->length = isc_buffer_activelength(_b); \		} else { \			(_r)->base = NULL; \			(_r)->length = 0; \		} \	} while (0)#define ISC__BUFFER_SETACTIVE(_b, _n) \	do { \		(_b)->active = (_b)->current + (_n); \	} while (0)#define ISC__BUFFER_FIRST(_b) \	do { \		(_b)->current = 0; \	} while (0)#define ISC__BUFFER_FORWARD(_b, _n) \	do { \		(_b)->current += (_n); \	} while (0)#define ISC__BUFFER_BACK(_b, _n) \	do { \		(_b)->current -= (_n); \	} while (0)#define ISC__BUFFER_PUTMEM(_b, _base, _length) \	do { \		memcpy(isc_buffer_used(_b), (_base), (_length)); \		(_b)->used += (_length); \	} while (0)#define ISC__BUFFER_PUTSTR(_b, _source) \	do { \		unsigned int _length; \		unsigned char *_cp; \		_length = strlen(_source); \		_cp = isc_buffer_used(_b); \		memcpy(_cp, (_source), _length); \		(_b)->used += (_length); \	} while (0)#define ISC__BUFFER_PUTUINT8(_b, _val) \	do { \		unsigned char *_cp; \		isc_uint8_t _val2 = (_val); \		_cp = isc_buffer_used(_b); \		(_b)->used++; \		_cp[0] = _val2 & 0x00ff; \	} while (0)#define ISC__BUFFER_PUTUINT16(_b, _val) \	do { \		unsigned char *_cp; \		isc_uint16_t _val2 = (_val); \		_cp = isc_buffer_used(_b); \		(_b)->used += 2; \		_cp[0] = (unsigned char)((_val2 & 0xff00U) >> 8); \		_cp[1] = (unsigned char)(_val2 & 0x00ffU); \	} while (0)#define ISC__BUFFER_PUTUINT32(_b, _val) \	do { \		unsigned char *_cp; \		isc_uint32_t _val2 = (_val); \		_cp = isc_buffer_used(_b); \		(_b)->used += 4; \		_cp[0] = (unsigned char)((_val2 & 0xff000000) >> 24); \		_cp[1] = (unsigned char)((_val2 & 0x00ff0000) >> 16); \		_cp[2] = (unsigned char)((_val2 & 0x0000ff00) >> 8); \		_cp[3] = (unsigned char)((_val2 & 0x000000ff)); \	} while (0)#if defined(ISC_BUFFER_USEINLINE)#define isc_buffer_init			ISC__BUFFER_INIT#define isc_buffer_invalidate		ISC__BUFFER_INVALIDATE#define isc_buffer_region		ISC__BUFFER_REGION#define isc_buffer_usedregion		ISC__BUFFER_USEDREGION#define isc_buffer_availableregion	ISC__BUFFER_AVAILABLEREGION#define isc_buffer_add			ISC__BUFFER_ADD#define isc_buffer_subtract		ISC__BUFFER_SUBTRACT#define isc_buffer_clear		ISC__BUFFER_CLEAR#define isc_buffer_consumedregion	ISC__BUFFER_CONSUMEDREGION#define isc_buffer_remainingregion	ISC__BUFFER_REMAININGREGION#define isc_buffer_activeregion		ISC__BUFFER_ACTIVEREGION#define isc_buffer_setactive		ISC__BUFFER_SETACTIVE#define isc_buffer_first		ISC__BUFFER_FIRST#define isc_buffer_forward		ISC__BUFFER_FORWARD#define isc_buffer_back			ISC__BUFFER_BACK#define isc_buffer_putmem		ISC__BUFFER_PUTMEM#define isc_buffer_putstr		ISC__BUFFER_PUTSTR#define isc_buffer_putuint8		ISC__BUFFER_PUTUINT8#define isc_buffer_putuint16		ISC__BUFFER_PUTUINT16#define isc_buffer_putuint32		ISC__BUFFER_PUTUINT32#else#define isc_buffer_init			isc__buffer_init#define isc_buffer_invalidate		isc__buffer_invalidate#define isc_buffer_region		isc__buffer_region#define isc_buffer_usedregion		isc__buffer_usedregion#define isc_buffer_availableregion	isc__buffer_availableregion#define isc_buffer_add			isc__buffer_add#define isc_buffer_subtract		isc__buffer_subtract#define isc_buffer_clear		isc__buffer_clear#define isc_buffer_consumedregion	isc__buffer_consumedregion#define isc_buffer_remainingregion	isc__buffer_remainingregion#define isc_buffer_activeregion		isc__buffer_activeregion#define isc_buffer_setactive		isc__buffer_setactive#define isc_buffer_first		isc__buffer_first#define isc_buffer_forward		isc__buffer_forward#define isc_buffer_back			isc__buffer_back#define isc_buffer_putmem		isc__buffer_putmem#define isc_buffer_putstr		isc__buffer_putstr#define isc_buffer_putuint8		isc__buffer_putuint8#define isc_buffer_putuint16		isc__buffer_putuint16#define isc_buffer_putuint32		isc__buffer_putuint32#endif#endif /* ISC_BUFFER_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -