ftp.nice.ch/pub/next/text/framemaker/fmbib.1.3.s.tar.gz#/mem.c

This is mem.c in view mode; [Download] [Up]

/* mem.c
 * memory allocation routines to reduce malloc calls.
 */

/*
 * Copyright (c) 1991 Carnegie Mellon University
 * All Rights Reserved.
 * 
 * Permission to use, copy, modify and distribute this software and its
 * documentation is hereby granted, provided that both the copyright
 * notice and this permission notice appear in all copies of the
 * software, derivative works or modified versions, and any portions
 * thereof, and that both notices appear in supporting documentation.
 *
 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
 * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
 *
 * Carnegie Mellon requests users of this software to return to
 *
 *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
 *  School of Computer Science
 *  Carnegie Mellon University
 *  Pittsburgh PA 15213-3890
 *
 * any improvements or extensions that they make and grant Carnegie Mellon
 * the rights to redistribute these changes.
 */
#include <mif.h>

#define CHUNKSIZE (6*1024)	/* memory to allocated per chunk */

extern int  errno;
extern char *malloc();
extern char *calloc();

static char *chunk;	/* ->current memory chunk to store field data */
static char *bp;	/* ->next available point in chunk to store data */
static char *ep;	/* ->end of current data chunk */


/* return pointer to newly allocated memory.
 */
char *
getmem( nbytes )
	register nbytes;
{
	register char *cp;
	register	n;

#ifdef STRINGS_ALIGNED
	/* align pointers on quadwords */
	if( n = (int)bp & 3 )
		bp += 4-n;
#endif

	if( !chunk || (bp+nbytes >= ep))
	{
		init_chunk();
#ifdef STRINGS_ALIGNED
		if( n = (int)bp & 3 )
			bp += 4-n;
#endif
	}

	cp=bp;
	bp+=nbytes;
	return( cp );
}


/* allocate new chunk of memory. exit on malloc failure
 */
static 
init_chunk()
{
	if(( chunk = malloc( CHUNKSIZE )) == (char *)0 )
		err( FATAL, "Malloc failed, errno=%d\n", errno );

	bp = chunk;
	ep=chunk+CHUNKSIZE;
}
		

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.