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

📄 db_err.c

📁 这是国外的resip协议栈
💻 C
📖 第 1 页 / 共 2 页
字号:
	va_list ap;{	FILE *fp;	fp = dbenv == NULL ||	    dbenv->db_errfile == NULL ? stderr : dbenv->db_errfile;	if (dbenv != NULL && dbenv->db_errpfx != NULL)		(void)fprintf(fp, "%s: ", dbenv->db_errpfx);	if (fmt != NULL) {		(void)vfprintf(fp, fmt, ap);		if (error_set)			(void)fprintf(fp, ": ");	}	if (error_set)		(void)fprintf(fp, "%s", db_strerror(error));	(void)fprintf(fp, "\n");	(void)fflush(fp);}/* * __db_msgadd -- *	Aggregate a set of strings into a buffer for the callback API. * * PUBLIC: void __db_msgadd __P((DB_ENV *, DB_MSGBUF *, const char *, ...)) * PUBLIC:    __attribute__ ((__format__ (__printf__, 3, 4))); */void#ifdef STDC_HEADERS__db_msgadd(DB_ENV *dbenv, DB_MSGBUF *mbp, const char *fmt, ...)#else__db_msgadd(dbenv, mbp, fmt, va_alist)	DB_ENV *dbenv;	DB_MSGBUF *mbp;	const char *fmt;	va_dcl#endif{	va_list ap;	size_t len, olen;	char buf[2048];		/* !!!: END OF THE STACK DON'T TRUST SPRINTF. */#ifdef STDC_HEADERS	va_start(ap, fmt);#else	va_start(ap);#endif	len = (size_t)vsnprintf(buf, sizeof(buf), fmt, ap);	va_end(ap);	/*	 * There's a heap buffer in the DB_ENV handle we use to aggregate the	 * message chunks.  We maintain a pointer to the buffer, the next slot	 * to be filled in in the buffer, and a total buffer length.	 */	olen = (size_t)(mbp->cur - mbp->buf);	if (olen + len >= mbp->len) {		if (__os_realloc(dbenv, mbp->len + len + 256, &mbp->buf))			return;		mbp->len += (len + 256);		mbp->cur = mbp->buf + olen;	}	memcpy(mbp->cur, buf, len + 1);	mbp->cur += len;}/* * __db_msg -- *	Standard DB stat message routine. * * PUBLIC: void __db_msg __P((const DB_ENV *, const char *, ...)) * PUBLIC:    __attribute__ ((__format__ (__printf__, 2, 3))); */void#ifdef STDC_HEADERS__db_msg(const DB_ENV *dbenv, const char *fmt, ...)#else__db_msg(dbenv, fmt, va_alist)	const DB_ENV *dbenv;	const char *fmt;	va_dcl#endif{	DB_REAL_MSG(dbenv, fmt);}/* * __db_msgcall -- *	Do the message work for callback functions. */static void__db_msgcall(dbenv, fmt, ap)	const DB_ENV *dbenv;	const char *fmt;	va_list ap;{	char buf[2048];		/* !!!: END OF THE STACK DON'T TRUST SPRINTF. */	(void)vsnprintf(buf, sizeof(buf), fmt, ap);	dbenv->db_msgcall(dbenv, buf);}/* * __db_msgfile -- *	Do the message work for FILE *s. */static void__db_msgfile(dbenv, fmt, ap)	const DB_ENV *dbenv;	const char *fmt;	va_list ap;{	FILE *fp;	fp = dbenv == NULL ||	    dbenv->db_msgfile == NULL ? stdout : dbenv->db_msgfile;	(void)vfprintf(fp, fmt, ap);	(void)fprintf(fp, "\n");	(void)fflush(fp);}/* * __db_logmsg -- *	Write information into the DB log. * * PUBLIC: void __db_logmsg __P((const DB_ENV *, * PUBLIC:     DB_TXN *, const char *, u_int32_t, const char *, ...)) * PUBLIC:    __attribute__ ((__format__ (__printf__, 5, 6))); */void#ifdef STDC_HEADERS__db_logmsg(const DB_ENV *dbenv,    DB_TXN *txnid, const char *opname, u_int32_t flags, const char *fmt, ...)#else__db_logmsg(dbenv, txnid, opname, flags, fmt, va_alist)	const DB_ENV *dbenv;	DB_TXN *txnid;	const char *opname, *fmt;	u_int32_t flags;	va_dcl#endif{	DBT opdbt, msgdbt;	DB_LSN lsn;	va_list ap;	char __logbuf[2048];	/* !!!: END OF THE STACK DON'T TRUST SPRINTF. */	if (!LOGGING_ON(dbenv))		return;#ifdef STDC_HEADERS	va_start(ap, fmt);#else	va_start(ap);#endif	memset(&opdbt, 0, sizeof(opdbt));	opdbt.data = (void *)opname;	opdbt.size = (u_int32_t)(strlen(opname) + 1);	memset(&msgdbt, 0, sizeof(msgdbt));	msgdbt.data = __logbuf;	msgdbt.size = (u_int32_t)vsnprintf(__logbuf, sizeof(__logbuf), fmt, ap);	va_end(ap);	/*	 * XXX	 * Explicitly discard the const.  Otherwise, we have to const DB_ENV	 * references throughout the logging subsystem.	 */	(void)__db_debug_log(	    (DB_ENV *)dbenv, txnid, &lsn, flags, &opdbt, -1, &msgdbt, NULL, 0);}/* * __db_unknown_flag -- report internal error * * PUBLIC: int __db_unknown_flag __P((DB_ENV *, char *, u_int32_t)); */int__db_unknown_flag(dbenv, routine, flag)	DB_ENV *dbenv;	char *routine;	u_int32_t flag;{	__db_err(dbenv, "%s: Unknown flag: %#x", routine, (u_int)flag);	DB_ASSERT(0);	return (EINVAL);}/* * __db_unknown_type -- report internal error * * PUBLIC: int __db_unknown_type __P((DB_ENV *, char *, DBTYPE)); */int__db_unknown_type(dbenv, routine, type)	DB_ENV *dbenv;	char *routine;	DBTYPE type;{	__db_err(dbenv,	    "%s: Unexpected DB type: %s", routine, __db_dbtype_to_string(type));	DB_ASSERT(0);	return (EINVAL);}/* * __db_check_txn -- *	Check for common transaction errors. * * PUBLIC: int __db_check_txn __P((DB *, DB_TXN *, u_int32_t, int)); */int__db_check_txn(dbp, txn, assoc_lid, read_op)	DB *dbp;	DB_TXN *txn;	u_int32_t assoc_lid;	int read_op;{	DB_ENV *dbenv;	int isp, ret;	dbenv = dbp->dbenv;	/*	 * If we are in recovery or aborting a transaction, then we	 * don't need to enforce the rules about dbp's not allowing	 * transactional operations in non-transactional dbps and	 * vica-versa.  This happens all the time as the dbp during	 * an abort may be transactional, but we undo operations	 * outside a transaction since we're aborting.	 */	if (IS_RECOVERING(dbenv) || F_ISSET(dbp, DB_AM_RECOVER))		return (0);	/*	 * Check for common transaction errors:	 *	Failure to pass a transaction handle to a DB operation	 *	Failure to configure the DB handle in a proper environment	 *	Operation on a handle whose open commit hasn't completed.	 *	 * Read operations don't require a txn even if we've used one before	 * with this handle, although if they do have a txn, we'd better be	 * prepared for it.	 */	if (txn == NULL) {		if (!read_op && F_ISSET(dbp, DB_AM_TXN)) {			__db_err(dbenv,    "DB handle previously used in transaction, missing transaction handle");			return (EINVAL);		}		if (dbp->cur_lid >= TXN_MINIMUM)			goto open_err;	} else {		if (F_ISSET(txn, TXN_DEADLOCK)) {			__db_err(dbenv,			    "Previous deadlock return not resolved");			return (EINVAL);		}		if (dbp->cur_lid >= TXN_MINIMUM &&		    dbp->cur_lid != txn->txnid) {			if ((ret = __lock_locker_is_parent(dbenv,			     dbp->cur_lid, txn->txnid, &isp)) != 0)				return (ret);			if (!isp)				goto open_err;		}		if (!TXN_ON(dbenv))			 return (__db_not_txn_env(dbenv));		if (!F_ISSET(dbp, DB_AM_TXN)) {			__db_err(dbenv,    "Transaction specified for a DB handle opened outside a transaction");			return (EINVAL);		}	}	/*	 * If dbp->associate_lid is not DB_LOCK_INVALIDID, that means we're in	 * the middle of a DB->associate with DB_CREATE (i.e., a secondary index	 * creation).	 *	 * In addition to the usual transaction rules, we need to lock out	 * non-transactional updates that aren't part of the associate (and	 * thus are using some other locker ID).	 *	 * Transactional updates should simply block;  from the time we	 * decide to build the secondary until commit, we'll hold a write	 * lock on all of its pages, so it should be safe to attempt to update	 * the secondary in another transaction (presumably by updating the	 * primary).	 */	if (!read_op && dbp->associate_lid != DB_LOCK_INVALIDID &&	    txn != NULL && dbp->associate_lid != assoc_lid) {		__db_err(dbenv,	    "Operation forbidden while secondary index is being created");		return (EINVAL);	}	return (0);open_err:	__db_err(dbenv,	    "Transaction that opened the DB handle is still active");	return (EINVAL);}/* * __db_not_txn_env -- *	DB handle must be in an environment that supports transactions. * * PUBLIC: int __db_not_txn_env __P((DB_ENV *)); */int__db_not_txn_env(dbenv)	DB_ENV *dbenv;{	__db_err(dbenv, "DB environment not configured for transactions");	return (EINVAL);}/* * __db_rec_toobig -- *	Fixed record length exceeded error message. * * PUBLIC: int __db_rec_toobig __P((DB_ENV *, u_int32_t, u_int32_t)); */int__db_rec_toobig(dbenv, data_len, fixed_rec_len)	DB_ENV *dbenv;	u_int32_t data_len, fixed_rec_len;{	__db_err(dbenv, "%s: length of %lu larger than database's value of %lu",	    "Record length error", (u_long)data_len, (u_long)fixed_rec_len);	return (EINVAL);}/* * __db_rec_repl -- *	Fixed record replacement length error message. * * PUBLIC: int __db_rec_repl __P((DB_ENV *, u_int32_t, u_int32_t)); */int__db_rec_repl(dbenv, data_size, data_dlen)	DB_ENV *dbenv;	u_int32_t data_size, data_dlen;{	__db_err(dbenv,	    "%s: replacement length %lu differs from replaced length %lu",	    "Record length error", (u_long)data_size, (u_long)data_dlen);	return (EINVAL);}/* * __db_check_lsn -- *	Display the log sequence error message. * * PUBLIC: int __db_check_lsn __P((DB_ENV *, DB_LSN *, DB_LSN *)); */int__db_check_lsn(dbenv, lsn, prev)	DB_ENV *dbenv;	DB_LSN *lsn, *prev;{	__db_err(dbenv,	    "Log sequence error: page LSN %lu %lu; previous LSN %lu %lu",	    (u_long)(lsn)->file, (u_long)(lsn)->offset,	    (u_long)(prev)->file, (u_long)(prev)->offset);	return (EINVAL);}

⌨️ 快捷键说明

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