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

📄 storage.c

📁 早期freebsd实现
💻 C
字号:
/* * ++Copyright++ 1985, 1989 * - * Copyright (c) 1985, 1989 *    The Regents of the University of California.  All rights reserved. *  * 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. * - * Portions Copyright (c) 1993 by Digital Equipment Corporation. *  * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies, and that * the name of Digital Equipment Corporation not be used in advertising or * publicity pertaining to distribution of the document or software without * specific, written prior permission. *  * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * - * --Copyright-- */#include <sys/param.h>#include <syslog.h>#include "../conf/portability.h"#include "../conf/options.h"#ifdef DSTORAGE/* *			S T O R A G E . C * * Ray Tracing program, storage manager. * *  Functions - *	rt_malloc	Allocate storage, with visibility & checking *	rt_free		Similarly, free storage *	rt_prmem	When debugging, print memory map *	calloc, cfree	Which call rt_malloc, rt_free * *  Author - *	Michael John Muuss *   *  Source - *	SECAD/VLD Computing Consortium, Bldg 394 *	The U. S. Army Ballistic Research Laboratory *	Aberdeen Proving Ground, Maryland  21005-5066 *   *  Copyright Notice - *	This software is Copyright (C) 1987 by the United States Army. *	All rights reserved. */#ifndef lintstatic char RCSid[] = "$Id: storage.c,v 4.9.1.2 1993/09/08 00:01:17 vixie Exp $";#endif#undef malloc#undef free#define MDB_SIZE	20000#define MDB_MAGIC	0x12348969struct memdebug {	char	*mdb_addr;	char	*mdb_str;	int	mdb_len;} rt_mdb[MDB_SIZE];/* *			R T _ M A L L O C */char *rt_malloc(cnt)unsigned int cnt;{	register char *ptr;	cnt = (cnt+2*sizeof(int)-1)&(~(sizeof(int)-1));	ptr = malloc(cnt);	if( ptr==(char *)0 ) {		syslog(LOG_ERR, "rt_malloc: malloc failure");		abort();	} else 	{		register struct memdebug *mp = rt_mdb;		for( ; mp < &rt_mdb[MDB_SIZE]; mp++ )  {			if( mp->mdb_len > 0 )  continue;			mp->mdb_addr = ptr;			mp->mdb_len = cnt;			mp->mdb_str = "???";			goto ok;		}		syslog(LOG_ERR, "rt_malloc:  memdebug overflow\n");	}ok:	;	{		register int *ip = (int *)(ptr+cnt-sizeof(int));		*ip = MDB_MAGIC;	}	return(ptr);}/* *			R T _ F R E E */voidrt_free(ptr)char *ptr;{	register struct memdebug *mp = rt_mdb;	for( ; mp < &rt_mdb[MDB_SIZE]; mp++ )  {			if( mp->mdb_len <= 0 )  continue;		if( mp->mdb_addr != ptr )  continue;		{			register int *ip = (int *)(ptr+mp->mdb_len-sizeof(int));			if( *ip != MDB_MAGIC )  {				syslog(LOG_ERR, "ERROR rt_free(x%x, %s) corrupted! x%x!=x%x\n", ptr, "???", *ip, MDB_MAGIC);				abort();			}		}		mp->mdb_len = 0;	/* successful free */		goto ok;	}	syslog(LOG_ERR, "ERROR rt_free(x%x, %s) bad pointer!\n", ptr, "???");	abort();ok:	;	*((int *)ptr) = -1;	/* zappo! */	free(ptr);}/* *			R T _ P R M E M *  *  Print map of memory currently in use. */voidrt_prmem(str)char *str;{	register struct memdebug *mp = rt_mdb;	register int *ip;	printf("\nRT memory use\t\t%s\n", str);	for( ; mp < &rt_mdb[MDB_SIZE]; mp++ )  {		if( mp->mdb_len <= 0 )  continue;		ip = (int *)(mp->mdb_addr+mp->mdb_len-sizeof(int));		printf("%7x %5x %s %s\n",			mp->mdb_addr, mp->mdb_len, mp->mdb_str,			*ip!=MDB_MAGIC ? "-BAD-" : "" );		if( *ip != MDB_MAGIC )			printf("\t%x\t%x\n", *ip, MDB_MAGIC);	}}char *calloc(num, size)	register unsigned num, size;{	register char *p;	size *= num;	if (p = rt_malloc(size))		bzero(p, size);	return (p);}cfree(p, num, size)	char *p;	unsigned num;	unsigned size;{	rt_free(p);}#endif /*DSTORAGE*/

⌨️ 快捷键说明

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