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

📄 db_pr.c

📁 这是linux下运行的mysql软件包,可用于linux 下安装 php + mysql + apach 的网络配置
💻 C
📖 第 1 页 / 共 3 页
字号:
/*- * See the file LICENSE for redistribution information. * * Copyright (c) 1996-2002 *	Sleepycat Software.  All rights reserved. */#include "db_config.h"#ifndef lintstatic const char revid[] = "$Id: db_pr.c,v 11.84 2002/09/10 02:45:20 bostic Exp $";#endif /* not lint */#ifndef NO_SYSTEM_INCLUDES#include <sys/types.h>#include <ctype.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#endif#include "db_int.h"#include "dbinc/db_page.h"#include "dbinc/db_shash.h"#include "dbinc/btree.h"#include "dbinc/hash.h"#include "dbinc/mp.h"#include "dbinc/qam.h"#include "dbinc/db_verify.h"static int	 __db_bmeta __P((DB *, FILE *, BTMETA *, u_int32_t));static int	 __db_hmeta __P((DB *, FILE *, HMETA *, u_int32_t));static void	 __db_meta __P((DB *, DBMETA *, FILE *, FN const *, u_int32_t));static const char *__db_pagetype_to_string __P((u_int32_t));static void	 __db_prdb __P((DB *, FILE *));static void	 __db_proff __P((void *, FILE *));static int	 __db_prtree __P((DB *, FILE *, u_int32_t));static int	 __db_qmeta __P((DB *, FILE *, QMETA *, u_int32_t));/* * __db_loadme -- *	A nice place to put a breakpoint. * * PUBLIC: void __db_loadme __P((void)); */void__db_loadme(){	u_int32_t id;	__os_id(&id);}/* * __db_dump -- *	Dump the tree to a file. * * PUBLIC: int __db_dump __P((DB *, char *, char *)); */int__db_dump(dbp, op, name)	DB *dbp;	char *op, *name;{	FILE *fp;	u_int32_t flags;	int ret;	for (flags = 0; *op != '\0'; ++op)		switch (*op) {		case 'a':			LF_SET(DB_PR_PAGE);			break;		case 'h':			break;		case 'r':			LF_SET(DB_PR_RECOVERYTEST);			break;		default:			return (EINVAL);		}	if (name == NULL)		fp = stdout;	else {		if ((fp = fopen(name, "w")) == NULL)			return (__os_get_errno());	}	__db_prdb(dbp, fp);	fprintf(fp, "%s\n", DB_LINE);	ret = __db_prtree(dbp, fp, flags);	fflush(fp);	if (name != NULL)		fclose(fp);	return (ret);}/* * __db_inmemdbflags -- *	Call a callback for printing or other handling of strings associated * with whatever in-memory DB structure flags are set. * * PUBLIC: void __db_inmemdbflags __P((u_int32_t, void *, * PUBLIC:     void (*)(u_int32_t, const FN *, void *))); */void__db_inmemdbflags(flags, cookie, callback)	u_int32_t flags;	void *cookie;	void (*callback) __P((u_int32_t, const FN *, void *));{	static const FN fn[] = {		{ DB_AM_CHKSUM,		"checksumming" },		{ DB_AM_CL_WRITER,	"client replica writer" },		{ DB_AM_COMPENSATE,	"created by compensating transaction" },		{ DB_AM_CREATED,	"database created" },		{ DB_AM_CREATED_MSTR,	"encompassing file created" },		{ DB_AM_DBM_ERROR,	"dbm/ndbm error" },		{ DB_AM_DELIMITER,	"variable length" },		{ DB_AM_DIRTY,		"dirty reads" },		{ DB_AM_DISCARD,	"discard cached pages" },		{ DB_AM_DUP,		"duplicates" },		{ DB_AM_DUPSORT,	"sorted duplicates" },		{ DB_AM_ENCRYPT,	"encrypted" },		{ DB_AM_FIXEDLEN,	"fixed-length records" },		{ DB_AM_INMEM,		"in-memory" },		{ DB_AM_IN_RENAME,	"file is being renamed" },		{ DB_AM_OPEN_CALLED,	"DB->open called" },		{ DB_AM_PAD,		"pad value" },		{ DB_AM_PGDEF,		"default page size" },		{ DB_AM_RDONLY,		"read-only" },		{ DB_AM_RECNUM,		"Btree record numbers" },		{ DB_AM_RECOVER,	"opened for recovery" },		{ DB_AM_RENUMBER,	"renumber" },		{ DB_AM_REVSPLITOFF,	"no reverse splits" },		{ DB_AM_SECONDARY,	"secondary" },		{ DB_AM_SNAPSHOT,	"load on open" },		{ DB_AM_SUBDB,		"subdatabases" },		{ DB_AM_SWAP,		"needswap" },		{ DB_AM_TXN,		"transactional" },		{ DB_AM_VERIFYING,	"verifier" },		{ 0,			NULL }	};	callback(flags, fn, cookie);}/* * __db_prdb -- *	Print out the DB structure information. */static void__db_prdb(dbp, fp)	DB *dbp;	FILE *fp;{	BTREE *bt;	HASH *h;	QUEUE *q;	fprintf(fp,	    "In-memory DB structure:\n%s: %#lx",	    __db_dbtype_to_string(dbp->type), (u_long)dbp->flags);	__db_inmemdbflags(dbp->flags, fp, __db_prflags);	fprintf(fp, "\n");	switch (dbp->type) {	case DB_BTREE:	case DB_RECNO:		bt = dbp->bt_internal;		fprintf(fp, "bt_meta: %lu bt_root: %lu\n",		    (u_long)bt->bt_meta, (u_long)bt->bt_root);		fprintf(fp, "bt_maxkey: %lu bt_minkey: %lu\n",		    (u_long)bt->bt_maxkey, (u_long)bt->bt_minkey);		fprintf(fp, "bt_compare: %#lx bt_prefix: %#lx\n",		    P_TO_ULONG(bt->bt_compare), P_TO_ULONG(bt->bt_prefix));		fprintf(fp, "bt_lpgno: %lu\n", (u_long)bt->bt_lpgno);		if (dbp->type == DB_RECNO) {			fprintf(fp,		    "re_pad: %#lx re_delim: %#lx re_len: %lu re_source: %s\n",			    (u_long)bt->re_pad, (u_long)bt->re_delim,			    (u_long)bt->re_len,			    bt->re_source == NULL ? "" : bt->re_source);			fprintf(fp, "re_modified: %d re_eof: %d re_last: %lu\n",			    bt->re_modified, bt->re_eof, (u_long)bt->re_last);		}		break;	case DB_HASH:		h = dbp->h_internal;		fprintf(fp, "meta_pgno: %lu\n", (u_long)h->meta_pgno);		fprintf(fp, "h_ffactor: %lu\n", (u_long)h->h_ffactor);		fprintf(fp, "h_nelem: %lu\n", (u_long)h->h_nelem);		fprintf(fp, "h_hash: %#lx\n", P_TO_ULONG(h->h_hash));		break;	case DB_QUEUE:		q = dbp->q_internal;		fprintf(fp, "q_meta: %lu\n", (u_long)q->q_meta);		fprintf(fp, "q_root: %lu\n", (u_long)q->q_root);		fprintf(fp, "re_pad: %#lx re_len: %lu\n",		    (u_long)q->re_pad, (u_long)q->re_len);		fprintf(fp, "rec_page: %lu\n", (u_long)q->rec_page);		fprintf(fp, "page_ext: %lu\n", (u_long)q->page_ext);		break;	default:		break;	}}/* * __db_prtree -- *	Print out the entire tree. */static int__db_prtree(dbp, fp, flags)	DB *dbp;	FILE *fp;	u_int32_t flags;{	DB_MPOOLFILE *mpf;	PAGE *h;	db_pgno_t i, last;	int ret;	mpf = dbp->mpf;	if (dbp->type == DB_QUEUE)		return (__db_prqueue(dbp, fp, flags));	/*	 * Find out the page number of the last page in the database, then	 * dump each page.	 */	mpf->last_pgno(mpf, &last);	for (i = 0; i <= last; ++i) {		if ((ret = mpf->get(mpf, &i, 0, &h)) != 0)			return (ret);		(void)__db_prpage(dbp, h, fp, flags);		if ((ret = mpf->put(mpf, h, 0)) != 0)			return (ret);	}	return (0);}/* * __db_meta -- *	Print out common metadata information. */static void__db_meta(dbp, dbmeta, fp, fn, flags)	DB *dbp;	DBMETA *dbmeta;	FILE *fp;	FN const *fn;	u_int32_t flags;{	DB_MPOOLFILE *mpf;	PAGE *h;	db_pgno_t pgno;	u_int8_t *p;	int cnt, ret;	const char *sep;	mpf = dbp->mpf;	fprintf(fp, "\tmagic: %#lx\n", (u_long)dbmeta->magic);	fprintf(fp, "\tversion: %lu\n", (u_long)dbmeta->version);	fprintf(fp, "\tpagesize: %lu\n", (u_long)dbmeta->pagesize);	fprintf(fp, "\ttype: %lu\n", (u_long)dbmeta->type);	fprintf(fp, "\tkeys: %lu\trecords: %lu\n",	    (u_long)dbmeta->key_count, (u_long)dbmeta->record_count);	if (!LF_ISSET(DB_PR_RECOVERYTEST)) {		/*		 * If we're doing recovery testing, don't display the free		 * list, it may have changed and that makes the dump diff		 * not work.		 */		fprintf(fp, "\tfree list: %lu", (u_long)dbmeta->free);		for (pgno = dbmeta->free,		    cnt = 0, sep = ", "; pgno != PGNO_INVALID;) {			if ((ret = mpf->get(mpf, &pgno, 0, &h)) != 0) {				fprintf(fp,			    "Unable to retrieve free-list page: %lu: %s\n",				    (u_long)pgno, db_strerror(ret));				break;			}			pgno = h->next_pgno;			(void)mpf->put(mpf, h, 0);			fprintf(fp, "%s%lu", sep, (u_long)pgno);			if (++cnt % 10 == 0) {				fprintf(fp, "\n");				cnt = 0;				sep = "\t";			} else				sep = ", ";		}		fprintf(fp, "\n");		fprintf(fp, "\tlast_pgno: %lu\n", (u_long)dbmeta->last_pgno);	}	if (fn != NULL) {		fprintf(fp, "\tflags: %#lx", (u_long)dbmeta->flags);		__db_prflags(dbmeta->flags, fn, fp);		fprintf(fp, "\n");	}	fprintf(fp, "\tuid: ");	for (p = (u_int8_t *)dbmeta->uid,	    cnt = 0; cnt < DB_FILE_ID_LEN; ++cnt) {		fprintf(fp, "%x", *p++);		if (cnt < DB_FILE_ID_LEN - 1)			fprintf(fp, " ");	}	fprintf(fp, "\n");}/* * __db_bmeta -- *	Print out the btree meta-data page. */static int__db_bmeta(dbp, fp, h, flags)	DB *dbp;	FILE *fp;	BTMETA *h;	u_int32_t flags;{	static const FN mfn[] = {		{ BTM_DUP,	"duplicates" },		{ BTM_RECNO,	"recno" },		{ BTM_RECNUM,	"btree:recnum" },		{ BTM_FIXEDLEN,	"recno:fixed-length" },		{ BTM_RENUMBER,	"recno:renumber" },		{ BTM_SUBDB,	"multiple-databases" },		{ 0,		NULL }	};	__db_meta(dbp, (DBMETA *)h, fp, mfn, flags);	fprintf(fp, "\tmaxkey: %lu minkey: %lu\n",	    (u_long)h->maxkey, (u_long)h->minkey);	if (dbp->type == DB_RECNO)		fprintf(fp, "\tre_len: %#lx re_pad: %lu\n",		    (u_long)h->re_len, (u_long)h->re_pad);	fprintf(fp, "\troot: %lu\n", (u_long)h->root);	return (0);}/* * __db_hmeta -- *	Print out the hash meta-data page. */static int__db_hmeta(dbp, fp, h, flags)	DB *dbp;	FILE *fp;	HMETA *h;	u_int32_t flags;{	static const FN mfn[] = {		{ DB_HASH_DUP,	 "duplicates" },		{ DB_HASH_SUBDB, "multiple-databases" },		{ 0,		 NULL }	};	int i;	__db_meta(dbp, (DBMETA *)h, fp, mfn, flags);	fprintf(fp, "\tmax_bucket: %lu\n", (u_long)h->max_bucket);	fprintf(fp, "\thigh_mask: %#lx\n", (u_long)h->high_mask);	fprintf(fp, "\tlow_mask:  %#lx\n", (u_long)h->low_mask);	fprintf(fp, "\tffactor: %lu\n", (u_long)h->ffactor);	fprintf(fp, "\tnelem: %lu\n", (u_long)h->nelem);	fprintf(fp, "\th_charkey: %#lx\n", (u_long)h->h_charkey);	fprintf(fp, "\tspare points: ");	for (i = 0; i < NCACHED; i++)		fprintf(fp, "%lu ", (u_long)h->spares[i]);	fprintf(fp, "\n");	return (0);}/* * __db_qmeta -- *	Print out the queue meta-data page. */static int__db_qmeta(dbp, fp, h, flags)	DB *dbp;	FILE *fp;	QMETA *h;	u_int32_t flags;{	__db_meta(dbp, (DBMETA *)h, fp, NULL, flags);	fprintf(fp, "\tfirst_recno: %lu\n", (u_long)h->first_recno);	fprintf(fp, "\tcur_recno: %lu\n", (u_long)h->cur_recno);	fprintf(fp, "\tre_len: %#lx re_pad: %lu\n",	    (u_long)h->re_len, (u_long)h->re_pad);	fprintf(fp, "\trec_page: %lu\n", (u_long)h->rec_page);	fprintf(fp, "\tpage_ext: %lu\n", (u_long)h->page_ext);	return (0);}/* * __db_prnpage *	-- Print out a specific page. * * PUBLIC: int __db_prnpage __P((DB *, db_pgno_t, FILE *)); */int__db_prnpage(dbp, pgno, fp)	DB *dbp;	db_pgno_t pgno;	FILE *fp;{	DB_MPOOLFILE *mpf;	PAGE *h;	int ret, t_ret;	mpf = dbp->mpf;	if ((ret = mpf->get(mpf, &pgno, 0, &h)) != 0)

⌨️ 快捷键说明

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