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

📄 bt_conv.c

📁 asterisk 一个模拟IPPBX的源代码
💻 C
字号:
/*- * Copyright (c) 1990, 1993, 1994 *	The Regents of the University of California.  All rights reserved. * * This code is derived from software contributed to Berkeley by * Mike Olson. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */#if defined(LIBC_SCCS) && !defined(lint)static char sccsid[] = "@(#)bt_conv.c	8.5 (Berkeley) 8/17/94";#endif /* LIBC_SCCS and not lint */#include <sys/param.h>#include <stdio.h>#include "../include/db.h"#include "btree.h"static void mswap __P((PAGE *));/* * __BT_BPGIN, __BT_BPGOUT -- *	Convert host-specific number layout to/from the host-independent *	format stored on disk. * * Parameters: *	t:	tree *	pg:	page number *	h:	page to convert */void__bt_pgin(t, pg, pp)	void *t;	pgno_t pg;	void *pp;{	PAGE *h;	indx_t i, top;	u_char flags;	char *p;	if (!F_ISSET(((BTREE *)t), B_NEEDSWAP))		return;	if (pg == P_META) {		mswap(pp);		return;	}	h = pp;	M_32_SWAP(h->pgno);	M_32_SWAP(h->prevpg);	M_32_SWAP(h->nextpg);	M_32_SWAP(h->flags);	M_16_SWAP(h->lower);	M_16_SWAP(h->upper);	top = NEXTINDEX(h);	if ((h->flags & P_TYPE) == P_BINTERNAL)		for (i = 0; i < top; i++) {			M_16_SWAP(h->linp[i]);			p = (char *)GETBINTERNAL(h, i);			P_32_SWAP(p);			p += sizeof(u_int32_t);			P_32_SWAP(p);			p += sizeof(pgno_t);			if (*(u_char *)p & P_BIGKEY) {				p += sizeof(u_char);				P_32_SWAP(p);				p += sizeof(pgno_t);				P_32_SWAP(p);			}		}	else if ((h->flags & P_TYPE) == P_BLEAF)		for (i = 0; i < top; i++) {			M_16_SWAP(h->linp[i]);			p = (char *)GETBLEAF(h, i);			P_32_SWAP(p);			p += sizeof(u_int32_t);			P_32_SWAP(p);			p += sizeof(u_int32_t);			flags = *(u_char *)p;			if (flags & (P_BIGKEY | P_BIGDATA)) {				p += sizeof(u_char);				if (flags & P_BIGKEY) {					P_32_SWAP(p);					p += sizeof(pgno_t);					P_32_SWAP(p);				}				if (flags & P_BIGDATA) {					p += sizeof(u_int32_t);					P_32_SWAP(p);					p += sizeof(pgno_t);					P_32_SWAP(p);				}			}		}}void__bt_pgout(t, pg, pp)	void *t;	pgno_t pg;	void *pp;{	PAGE *h;	indx_t i, top;	u_char flags;	char *p;	if (!F_ISSET(((BTREE *)t), B_NEEDSWAP))		return;	if (pg == P_META) {		mswap(pp);		return;	}	h = pp;	top = NEXTINDEX(h);	if ((h->flags & P_TYPE) == P_BINTERNAL)		for (i = 0; i < top; i++) {			p = (char *)GETBINTERNAL(h, i);			P_32_SWAP(p);			p += sizeof(u_int32_t);			P_32_SWAP(p);			p += sizeof(pgno_t);			if (*(u_char *)p & P_BIGKEY) {				p += sizeof(u_char);				P_32_SWAP(p);				p += sizeof(pgno_t);				P_32_SWAP(p);			}			M_16_SWAP(h->linp[i]);		}	else if ((h->flags & P_TYPE) == P_BLEAF)		for (i = 0; i < top; i++) {			p = (char *)GETBLEAF(h, i);			P_32_SWAP(p);			p += sizeof(u_int32_t);			P_32_SWAP(p);			p += sizeof(u_int32_t);			flags = *(u_char *)p;			if (flags & (P_BIGKEY | P_BIGDATA)) {				p += sizeof(u_char);				if (flags & P_BIGKEY) {					P_32_SWAP(p);					p += sizeof(pgno_t);					P_32_SWAP(p);				}				if (flags & P_BIGDATA) {					p += sizeof(u_int32_t);					P_32_SWAP(p);					p += sizeof(pgno_t);					P_32_SWAP(p);				}			}			M_16_SWAP(h->linp[i]);		}	M_32_SWAP(h->pgno);	M_32_SWAP(h->prevpg);	M_32_SWAP(h->nextpg);	M_32_SWAP(h->flags);	M_16_SWAP(h->lower);	M_16_SWAP(h->upper);}/* * MSWAP -- Actually swap the bytes on the meta page. * * Parameters: *	p:	page to convert */static voidmswap(pg)	PAGE *pg;{	char *p;	p = (char *)pg;	P_32_SWAP(p);		/* magic */	p += sizeof(u_int32_t);	P_32_SWAP(p);		/* version */	p += sizeof(u_int32_t);	P_32_SWAP(p);		/* psize */	p += sizeof(u_int32_t);	P_32_SWAP(p);		/* free */	p += sizeof(u_int32_t);	P_32_SWAP(p);		/* nrecs */	p += sizeof(u_int32_t);	P_32_SWAP(p);		/* flags */	p += sizeof(u_int32_t);}

⌨️ 快捷键说明

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