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

📄 db_method.c

📁 这是国外的resip协议栈
💻 C
📖 第 1 页 / 共 2 页
字号:
	if ((ret = __db_set_flags(dbp, DB_DUPSORT)) != 0)		return (ret);	dbp->dup_compare = func;	return (0);}/* * __db_get_encrypt_flags -- */static int__db_get_encrypt_flags(dbp, flagsp)	DB *dbp;	u_int32_t *flagsp;{	DB_ILLEGAL_IN_ENV(dbp, "DB->get_encrypt_flags");	return (__dbenv_get_encrypt_flags(dbp->dbenv, flagsp));}/* * __db_set_encrypt -- *	Set database passwd. */static int__db_set_encrypt(dbp, passwd, flags)	DB *dbp;	const char *passwd;	u_int32_t flags;{	DB_CIPHER *db_cipher;	int ret;	DB_ILLEGAL_IN_ENV(dbp, "DB->set_encrypt");	DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_encrypt");	if ((ret = __dbenv_set_encrypt(dbp->dbenv, passwd, flags)) != 0)		return (ret);	/*	 * In a real env, this gets initialized with the region.  In a local	 * env, we must do it here.	 */	db_cipher = (DB_CIPHER *)dbp->dbenv->crypto_handle;	if (!F_ISSET(db_cipher, CIPHER_ANY) &&	    (ret = db_cipher->init(dbp->dbenv, db_cipher)) != 0)		return (ret);	return (__db_set_flags(dbp, DB_ENCRYPT));}static void__db_set_errcall(dbp, errcall)	DB *dbp;	void (*errcall) __P((const DB_ENV *, const char *, const char *));{	__dbenv_set_errcall(dbp->dbenv, errcall);}static void__db_get_errfile(dbp, errfilep)	DB *dbp;	FILE **errfilep;{	__dbenv_get_errfile(dbp->dbenv, errfilep);}static void__db_set_errfile(dbp, errfile)	DB *dbp;	FILE *errfile;{	__dbenv_set_errfile(dbp->dbenv, errfile);}static void__db_get_errpfx(dbp, errpfxp)	DB *dbp;	const char **errpfxp;{	__dbenv_get_errpfx(dbp->dbenv, errpfxp);}static void__db_set_errpfx(dbp, errpfx)	DB *dbp;	const char *errpfx;{	__dbenv_set_errpfx(dbp->dbenv, errpfx);}static int__db_set_feedback(dbp, feedback)	DB *dbp;	void (*feedback) __P((DB *, int, int));{	dbp->db_feedback = feedback;	return (0);}/* * __db_map_flags -- *	Maps between public and internal flag values. *      This function doesn't check for validity, so it can't fail. */static void__db_map_flags(dbp, inflagsp, outflagsp)	DB *dbp;	u_int32_t *inflagsp, *outflagsp;{	COMPQUIET(dbp, NULL);	if (FLD_ISSET(*inflagsp, DB_CHKSUM)) {		FLD_SET(*outflagsp, DB_AM_CHKSUM);		FLD_CLR(*inflagsp, DB_CHKSUM);	}	if (FLD_ISSET(*inflagsp, DB_ENCRYPT)) {		FLD_SET(*outflagsp, DB_AM_ENCRYPT | DB_AM_CHKSUM);		FLD_CLR(*inflagsp, DB_ENCRYPT);	}	if (FLD_ISSET(*inflagsp, DB_TXN_NOT_DURABLE)) {		FLD_SET(*outflagsp, DB_AM_NOT_DURABLE);		FLD_CLR(*inflagsp, DB_TXN_NOT_DURABLE);	}}/* * __db_get_flags -- *	The DB->get_flags method. * * PUBLIC: int __db_get_flags __P((DB *, u_int32_t *)); */int__db_get_flags(dbp, flagsp)	DB *dbp;	u_int32_t *flagsp;{	static const u_int32_t db_flags[] = {		DB_CHKSUM,		DB_DUP,		DB_DUPSORT,		DB_ENCRYPT,		DB_INORDER,		DB_RECNUM,		DB_RENUMBER,		DB_REVSPLITOFF,		DB_SNAPSHOT,		DB_TXN_NOT_DURABLE,		0	};	u_int32_t f, flags, mapped_flag;	int i;	flags = 0;	for (i = 0; (f = db_flags[i]) != 0; i++) {		mapped_flag = 0;		__db_map_flags(dbp, &f, &mapped_flag);		__bam_map_flags(dbp, &f, &mapped_flag);		__ram_map_flags(dbp, &f, &mapped_flag);#ifdef HAVE_QUEUE		__qam_map_flags(dbp, &f, &mapped_flag);#endif		DB_ASSERT(f == 0);		if (F_ISSET(dbp, mapped_flag) == mapped_flag)			LF_SET(db_flags[i]);	}	*flagsp = flags;	return (0);}/* * __db_set_flags -- *	DB->set_flags. * * PUBLIC: int  __db_set_flags __P((DB *, u_int32_t)); */int__db_set_flags(dbp, flags)	DB *dbp;	u_int32_t flags;{	DB_ENV *dbenv;	int ret;	dbenv = dbp->dbenv;	if (LF_ISSET(DB_ENCRYPT) && !CRYPTO_ON(dbenv)) {		__db_err(dbenv,		    "Database environment not configured for encryption");		return (EINVAL);	}	if (LF_ISSET(DB_TXN_NOT_DURABLE))		ENV_REQUIRES_CONFIG(dbenv,		    dbenv->tx_handle, "DB_NOT_DURABLE", DB_INIT_TXN);	__db_map_flags(dbp, &flags, &dbp->flags);	if ((ret = __bam_set_flags(dbp, &flags)) != 0)		return (ret);	if ((ret = __ram_set_flags(dbp, &flags)) != 0)		return (ret);#ifdef HAVE_QUEUE	if ((ret = __qam_set_flags(dbp, &flags)) != 0)		return (ret);#endif	return (flags == 0 ? 0 : __db_ferr(dbenv, "DB->set_flags", 0));}/* * __db_get_lorder -- *	Get whether lorder is swapped or not. * * PUBLIC: int  __db_get_lorder __P((DB *, int *)); */int__db_get_lorder(dbp, db_lorderp)	DB *dbp;	int *db_lorderp;{	int ret;	/* Flag if the specified byte order requires swapping. */	switch (ret = __db_byteorder(dbp->dbenv, 1234)) {	case 0:		*db_lorderp = F_ISSET(dbp, DB_AM_SWAP) ? 4321 : 1234;		break;	case DB_SWAPBYTES:		*db_lorderp = F_ISSET(dbp, DB_AM_SWAP) ? 1234 : 4321;		break;	default:		return (ret);		/* NOTREACHED */	}	return (0);}/* * __db_set_lorder -- *	Set whether lorder is swapped or not. * * PUBLIC: int  __db_set_lorder __P((DB *, int)); */int__db_set_lorder(dbp, db_lorder)	DB *dbp;	int db_lorder;{	int ret;	DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_lorder");	/* Flag if the specified byte order requires swapping. */	switch (ret = __db_byteorder(dbp->dbenv, db_lorder)) {	case 0:		F_CLR(dbp, DB_AM_SWAP);		break;	case DB_SWAPBYTES:		F_SET(dbp, DB_AM_SWAP);		break;	default:		return (ret);		/* NOTREACHED */	}	return (0);}static int__db_set_alloc(dbp, mal_func, real_func, free_func)	DB *dbp;	void *(*mal_func) __P((size_t));	void *(*real_func) __P((void *, size_t));	void (*free_func) __P((void *));{	DB_ILLEGAL_IN_ENV(dbp, "DB->set_alloc");	DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_alloc");	return (__dbenv_set_alloc(dbp->dbenv, mal_func, real_func, free_func));}static void__db_set_msgcall(dbp, msgcall)	DB *dbp;	void (*msgcall) __P((const DB_ENV *, const char *));{	__dbenv_set_msgcall(dbp->dbenv, msgcall);}static void__db_get_msgfile(dbp, msgfilep)	DB *dbp;	FILE **msgfilep;{	__dbenv_get_msgfile(dbp->dbenv, msgfilep);}static void__db_set_msgfile(dbp, msgfile)	DB *dbp;	FILE *msgfile;{	__dbenv_set_msgfile(dbp->dbenv, msgfile);}static int__db_get_pagesize(dbp, db_pagesizep)	DB *dbp;	u_int32_t *db_pagesizep;{	*db_pagesizep = dbp->pgsize;	return (0);}/* * __db_set_pagesize -- *	DB->set_pagesize * * PUBLIC: int  __db_set_pagesize __P((DB *, u_int32_t)); */int__db_set_pagesize(dbp, db_pagesize)	DB *dbp;	u_int32_t db_pagesize;{	DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_pagesize");	if (db_pagesize < DB_MIN_PGSIZE) {		__db_err(dbp->dbenv, "page sizes may not be smaller than %lu",		    (u_long)DB_MIN_PGSIZE);		return (EINVAL);	}	if (db_pagesize > DB_MAX_PGSIZE) {		__db_err(dbp->dbenv, "page sizes may not be larger than %lu",		    (u_long)DB_MAX_PGSIZE);		return (EINVAL);	}	/*	 * We don't want anything that's not a power-of-2, as we rely on that	 * for alignment of various types on the pages.	 */	if (!POWER_OF_TWO(db_pagesize)) {		__db_err(dbp->dbenv, "page sizes must be a power-of-2");		return (EINVAL);	}	/*	 * XXX	 * Should we be checking for a page size that's not a multiple of 512,	 * so that we never try and write less than a disk sector?	 */	dbp->pgsize = db_pagesize;	return (0);}static int__db_set_paniccall(dbp, paniccall)	DB *dbp;	void (*paniccall) __P((DB_ENV *, int));{	return (__dbenv_set_paniccall(dbp->dbenv, paniccall));}#ifdef HAVE_RPC/* * __dbcl_init -- *	Initialize a DB structure on the server. */static int__dbcl_init(dbp, dbenv, flags)	DB *dbp;	DB_ENV *dbenv;	u_int32_t flags;{	TAILQ_INIT(&dbp->free_queue);	TAILQ_INIT(&dbp->active_queue);	/* !!!	 * Note that we don't need to initialize the join_queue;  it's	 * not used in RPC clients.  See the comment in __dbcl_db_join_ret().	 */	dbp->associate = __dbcl_db_associate;	dbp->close = __dbcl_db_close;	dbp->cursor = __dbcl_db_cursor;	dbp->del = __dbcl_db_del;	dbp->err = __dbh_err;	dbp->errx = __dbh_errx;	dbp->fd = __dbcl_db_fd;	dbp->get = __dbcl_db_get;	dbp->get_byteswapped = __db_get_byteswapped;	dbp->get_transactional = __db_get_transactional;	dbp->get_type = __db_get_type;	dbp->join = __dbcl_db_join;	dbp->key_range = __dbcl_db_key_range;	dbp->get_dbname = __dbcl_db_get_name;	dbp->get_open_flags = __dbcl_db_get_open_flags;	dbp->open = __dbcl_db_open_wrap;	dbp->pget = __dbcl_db_pget;	dbp->put = __dbcl_db_put;	dbp->remove = __dbcl_db_remove;	dbp->rename = __dbcl_db_rename;	dbp->set_alloc = __dbcl_db_alloc;	dbp->set_append_recno = __dbcl_db_set_append_recno;	dbp->get_cachesize = __dbcl_db_get_cachesize;	dbp->set_cachesize = __dbcl_db_cachesize;	dbp->set_dup_compare = __dbcl_db_dup_compare;	dbp->get_encrypt_flags = __dbcl_db_get_encrypt_flags;	dbp->set_encrypt = __dbcl_db_encrypt;	dbp->set_errcall = __db_set_errcall;	dbp->get_errfile = __db_get_errfile;	dbp->set_errfile = __db_set_errfile;	dbp->get_errpfx = __db_get_errpfx;	dbp->set_errpfx = __db_set_errpfx;	dbp->set_feedback = __dbcl_db_feedback;	dbp->get_flags = __dbcl_db_get_flags;	dbp->set_flags = __dbcl_db_flags;	dbp->get_lorder = __dbcl_db_get_lorder;	dbp->set_lorder = __dbcl_db_lorder;	dbp->get_pagesize = __dbcl_db_get_pagesize;	dbp->set_pagesize = __dbcl_db_pagesize;	dbp->set_paniccall = __dbcl_db_panic;	dbp->stat = __dbcl_db_stat;	dbp->sync = __dbcl_db_sync;	dbp->truncate = __dbcl_db_truncate;	dbp->upgrade = __dbcl_db_upgrade;	dbp->verify = __dbcl_db_verify;	/*	 * Set all the method specific functions to client funcs as well.	 */	dbp->set_bt_compare = __dbcl_db_bt_compare;	dbp->set_bt_maxkey = __dbcl_db_bt_maxkey;	dbp->get_bt_minkey = __dbcl_db_get_bt_minkey;	dbp->set_bt_minkey = __dbcl_db_bt_minkey;	dbp->set_bt_prefix = __dbcl_db_bt_prefix;	dbp->get_h_ffactor = __dbcl_db_get_h_ffactor;	dbp->set_h_ffactor = __dbcl_db_h_ffactor;	dbp->set_h_hash = __dbcl_db_h_hash;	dbp->get_h_nelem = __dbcl_db_get_h_nelem;	dbp->set_h_nelem = __dbcl_db_h_nelem;	dbp->get_q_extentsize = __dbcl_db_get_extentsize;	dbp->set_q_extentsize = __dbcl_db_extentsize;	dbp->get_re_delim = __dbcl_db_get_re_delim;	dbp->set_re_delim = __dbcl_db_re_delim;	dbp->get_re_len = __dbcl_db_get_re_len;	dbp->set_re_len = __dbcl_db_re_len;	dbp->get_re_pad = __dbcl_db_get_re_pad;	dbp->set_re_pad = __dbcl_db_re_pad;	dbp->get_re_source = __dbcl_db_get_re_source;	dbp->set_re_source = __dbcl_db_re_source;	return (__dbcl_db_create(dbp, dbenv, flags));}#endif

⌨️ 快捷键说明

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