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

📄 db_int.in

📁 这是国外的resip协议栈
💻 IN
📖 第 1 页 / 共 2 页
字号:
/*- * See the file LICENSE for redistribution information. * * Copyright (c) 1996-2004 *	Sleepycat Software.  All rights reserved. * * $Id: db_int.in,v 11.155 2004/10/28 16:07:38 ubell Exp $ */#ifndef _DB_INTERNAL_H_#define	_DB_INTERNAL_H_/******************************************************* * System includes, db.h, a few general DB includes.  The DB includes are * here because it's OK if db_int.h includes queue structure declarations. *******************************************************/#ifndef NO_SYSTEM_INCLUDES#if defined(STDC_HEADERS) || defined(__cplusplus)#include <stdarg.h>#else#include <varargs.h>#endif#include <errno.h>#endif#include "db.h"#include "dbinc/queue.h"#include "dbinc/shqueue.h"#if defined(__cplusplus)extern "C" {#endif/******************************************************* * General purpose constants and macros. *******************************************************/#ifndef	UINT16_MAX#define	UINT16_MAX	65535		/* Maximum 16-bit unsigned. */#endif#ifndef	UINT32_MAX#ifdef __STDC__#define	UINT32_MAX	4294967295U	/* Maximum 32-bit unsigned. */#else#define	UINT32_MAX	0xffffffff	/* Maximum 32-bit unsigned. */#endif#endif#if defined(HAVE_LONG_LONG) && defined(HAVE_UNSIGNED_LONG_LONG)#undef	INT64_MAX#undef	INT64_MIN#undef	UINT64_MAX#ifdef	DB_WIN32#define	INT64_MAX	_I64_MAX#define	INT64_MIN	_I64_MIN#define	UINT64_MAX	_UI64_MAX#define	INT64_FMT	"%l64d"#define	UINT64_FMT	"%l64u"#else/* * Override the system's 64-bit min/max constants.  AIX's 32-bit compiler can * handle 64-bit values, but the system's constants don't include the LL/ULL * suffix, and so can't be compiled using the 32-bit compiler. */#define	INT64_MAX	9223372036854775807LL#define	INT64_MIN	(-INT64_MAX-1)#define	UINT64_MAX	18446744073709551615ULL#define	INT64_FMT	"%lld"#define	UINT64_FMT	"%llu"#endif	/* DB_WIN32 */#endif	/* HAVE_LONG_LONG && HAVE_UNSIGNED_LONG_LONG */#define	MEGABYTE	1048576#define	GIGABYTE	1073741824#define	MS_PER_SEC	1000		/* Milliseconds in a second. */#define	USEC_PER_MS	1000		/* Microseconds in a millisecond. */#define	RECNO_OOB	0		/* Illegal record number. *//* Test for a power-of-two (tests true for zero, which doesn't matter here). */#define	POWER_OF_TWO(x)	(((x) & ((x) - 1)) == 0)/* Test for valid page sizes. */#define	DB_MIN_PGSIZE	0x000200	/* Minimum page size (512). */#define	DB_MAX_PGSIZE	0x010000	/* Maximum page size (65536). */#define	IS_VALID_PAGESIZE(x)						\	(POWER_OF_TWO(x) && (x) >= DB_MIN_PGSIZE && ((x) <= DB_MAX_PGSIZE))/* Minimum number of pages cached, by default. */#define	DB_MINPAGECACHE	16/* * If we are unable to determine the underlying filesystem block size, use * 8K on the grounds that most OS's use less than 8K for a VM page size. */#define	DB_DEF_IOSIZE	(8 * 1024)/* Align an integer to a specific boundary. */#undef	DB_ALIGN#define	DB_ALIGN(v, bound)						\	(((v) + (bound) - 1) & ~(((uintmax_t)bound) - 1))/* Increment a pointer to a specific boundary. */#undef	ALIGNP_INC#define	ALIGNP_INC(p, bound)						\	(void *)(((uintptr_t)(p) + (bound) - 1) & ~(((uintptr_t)bound) - 1))/* Decrement a pointer to a specific boundary. */#undef	ALIGNP_DEC#define	ALIGNP_DEC(p, bound)						\	(void *)((uintptr_t)(p) & ~(((uintptr_t)bound) - 1))/* * Print an address as a u_long (a u_long is the largest type we can print * portably).  Most 64-bit systems have made longs 64-bits, so this should * work. */#define	P_TO_ULONG(p)	((u_long)(uintptr_t)(p))/* * Convert a pointer to a small integral value. * * The (u_int16_t)(uintptr_t) cast avoids warnings: the (uintptr_t) cast * converts the value to an integral type, and the (u_int16_t) cast converts * it to a small integral type so we don't get complaints when we assign the * final result to an integral type smaller than uintptr_t. */#define	P_TO_UINT32(p)	((u_int32_t)(uintptr_t)(p))#define	P_TO_UINT16(p)	((u_int16_t)(uintptr_t)(p))/* * There are several on-page structures that are declared to have a number of * fields followed by a variable length array of items.  The structure size * without including the variable length array or the address of the first of * those elements can be found using SSZ. * * This macro can also be used to find the offset of a structure element in a * structure.  This is used in various places to copy structure elements from * unaligned memory references, e.g., pointers into a packed page. * * There are two versions because compilers object if you take the address of * an array. */#undef	SSZ#define	SSZ(name, field)  P_TO_UINT16(&(((name *)0)->field))#undef	SSZA#define	SSZA(name, field) P_TO_UINT16(&(((name *)0)->field[0]))/* Structure used to print flag values. */typedef struct __fn {	u_int32_t mask;			/* Flag value. */	const char *name;		/* Flag name. */} FN;/* Set, clear and test flags. */#define	FLD_CLR(fld, f)		(fld) &= ~(f)#define	FLD_ISSET(fld, f)	((fld) & (f))#define	FLD_SET(fld, f)		(fld) |= (f)#define	F_CLR(p, f)		(p)->flags &= ~(f)#define	F_ISSET(p, f)		((p)->flags & (f))#define	F_SET(p, f)		(p)->flags |= (f)#define	LF_CLR(f)		((flags) &= ~(f))#define	LF_ISSET(f)		((flags) & (f))#define	LF_SET(f)		((flags) |= (f))/* * Calculate a percentage.  The values can overflow 32-bit integer arithmetic * so we use floating point. * * When calculating a bytes-vs-page size percentage, we're getting the inverse * of the percentage in all cases, that is, we want 100 minus the percentage we * calculate. */#define	DB_PCT(v, total)						\	((int)((total) == 0 ? 0 : ((double)(v) * 100) / (total)))#define	DB_PCT_PG(v, total, pgsize)					\	((int)((total) == 0 ? 0 :					\	    100 - ((double)(v) * 100) / ((total) * (pgsize))))/* * Structure used for callback message aggregation. * * Display values in XXX_stat_print calls. */typedef struct __db_msgbuf {	char *buf;			/* Heap allocated buffer. */	char *cur;			/* Current end of message. */	size_t len;			/* Allocated length of buffer. */} DB_MSGBUF;#define	DB_MSGBUF_INIT(a) do {						\	(a)->buf = (a)->cur = NULL;					\	(a)->len = 0;							\} while (0)#define	DB_MSGBUF_FLUSH(dbenv, a) do {					\	if ((a)->buf != NULL) {						\		if ((a)->cur != (a)->buf)				\			__db_msg(dbenv, "%s", (a)->buf);		\		__os_free(dbenv, (a)->buf);				\		DB_MSGBUF_INIT(a);					\	}								\} while (0)#define	STAT_FMT(msg, fmt, type, v) do {				\	DB_MSGBUF __mb;							\	DB_MSGBUF_INIT(&__mb);						\	__db_msgadd(dbenv, &__mb, fmt, (type)(v));			\	__db_msgadd(dbenv, &__mb, "\t%s", msg);				\	DB_MSGBUF_FLUSH(dbenv, &__mb);					\} while (0)#define	STAT_HEX(msg, v)						\	__db_msg(dbenv, "%#lx\t%s", (u_long)(v), msg)#define	STAT_ISSET(msg, p)						\	__db_msg(dbenv, "%sSet\t%s", (p) == NULL ? "!" : " ", msg)#define	STAT_LONG(msg, v)						\	__db_msg(dbenv, "%ld\t%s", (long)(v), msg)#define	STAT_LSN(msg, lsnp)						\	__db_msg(dbenv, "%lu/%lu\t%s",					\	    (u_long)(lsnp)->file, (u_long)(lsnp)->offset, msg)#define	STAT_STRING(msg, p) do {					\	const char *__p = p;	/* p may be a function call. */		\	__db_msg(dbenv, "%s\t%s", __p == NULL ? "!Set" : __p, msg);	\} while (0)#define	STAT_ULONG(msg, v)						\	__db_msg(dbenv, "%lu\t%s", (u_long)(v), msg)/******************************************************* * API return values *******************************************************//* * Return values that are OK for each different call.  Most calls have a * standard 'return of 0 is only OK value', but some, like db->get have * DB_NOTFOUND as a return value, but it really isn't an error. */#define	DB_RETOK_STD(ret)	((ret) == 0)#define	DB_RETOK_DBCDEL(ret)	((ret) == 0 || (ret) == DB_KEYEMPTY || \				    (ret) == DB_NOTFOUND)#define	DB_RETOK_DBCGET(ret)	((ret) == 0 || (ret) == DB_KEYEMPTY || \				    (ret) == DB_NOTFOUND)#define	DB_RETOK_DBCPUT(ret)	((ret) == 0 || (ret) == DB_KEYEXIST || \				    (ret) == DB_NOTFOUND)#define	DB_RETOK_DBDEL(ret)	DB_RETOK_DBCDEL(ret)#define	DB_RETOK_DBGET(ret)	DB_RETOK_DBCGET(ret)#define	DB_RETOK_DBPUT(ret)	((ret) == 0 || (ret) == DB_KEYEXIST)#define	DB_RETOK_LGGET(ret)	((ret) == 0 || (ret) == DB_NOTFOUND)#define	DB_RETOK_MPGET(ret)	((ret) == 0 || (ret) == DB_PAGE_NOTFOUND)#define	DB_RETOK_REPPMSG(ret)	((ret) == 0 || \				    (ret) == DB_REP_ISPERM || \				    (ret) == DB_REP_NEWMASTER || \				    (ret) == DB_REP_NEWSITE || \				    (ret) == DB_REP_NOTPERM || \				    (ret) == DB_REP_STARTUPDONE)/* Find a reasonable operation-not-supported error. */#ifdef	EOPNOTSUPP#define	DB_OPNOTSUP	EOPNOTSUPP#else#ifdef	ENOTSUP#define	DB_OPNOTSUP	ENOTSUP#else#define	DB_OPNOTSUP	EINVAL#endif#endif/******************************************************* * Files. *******************************************************//* * We use 1024 as the maximum path length.  It's too hard to figure out what * the real path length is, as it was traditionally stored in <sys/param.h>, * and that file isn't always available. */#undef	MAXPATHLEN#define	MAXPATHLEN	1024#define	PATH_DOT	"."	/* Current working directory. */				/* Path separator character(s). */#define	PATH_SEPARATOR	"@PATH_SEPARATOR@"/******************************************************* * Environment. *******************************************************//* Type passed to __db_appname(). */typedef enum {	DB_APP_NONE=0,			/* No type (region). */	DB_APP_DATA,			/* Data file. */	DB_APP_LOG,			/* Log file. */	DB_APP_TMP			/* Temporary file. */} APPNAME;/* * CDB_LOCKING	CDB product locking. * CRYPTO_ON	Security has been configured.

⌨️ 快捷键说明

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