--- ray/src/common/bmalloc.c 1991/11/12 16:55:20 2.1 +++ ray/src/common/bmalloc.c 2004/10/23 18:55:52 2.9 @@ -1,49 +1,48 @@ -/* Copyright (c) 1991 Regents of the University of California */ - #ifndef lint -static char SCCSid[] = "$SunId$ LBL"; +static const char RCSid[] = "$Id: bmalloc.c,v 2.9 2004/10/23 18:55:52 schorsch Exp $"; #endif - /* * Bmalloc provides basic memory allocation without overhead (no free lists). * Use only to take the load off of malloc for all those * piddling little requests that you never expect to free. * Bmalloc defers to malloc for big requests. * Bfree should hand memory to bmalloc, but it usually fails here. + * + * External symbols declared in standard.h */ -#define NULL 0 +#include "copyright.h" +#include + +#include "rtmisc.h" + #ifndef MBLKSIZ #define MBLKSIZ 16376 /* size of memory allocation block */ #endif #define WASTEFRAC 12 /* don't waste more than a fraction */ -#ifndef ALIGN -#define ALIGN int /* type for alignment */ +#ifndef ALIGNT +#define ALIGNT double /* type for alignment */ #endif -#define BYTES_WORD sizeof(ALIGN) +#define BYTES_WORD sizeof(ALIGNT) -extern char *malloc(); - static char *bposition = NULL; -static unsigned nremain = 0; +static size_t nremain = 0; -char * -bmalloc(n) /* allocate a block of n bytes, no refunds */ -register unsigned n; +void * +bmalloc( /* allocate a block of n bytes */ +register size_t n +) { if (n > nremain && (n > MBLKSIZ || nremain > MBLKSIZ/WASTEFRAC)) return(malloc(n)); /* too big */ n = (n+(BYTES_WORD-1))&~(BYTES_WORD-1); /* word align */ - if (n > nremain) { - if ((bposition = malloc((unsigned)MBLKSIZ)) == NULL) { - nremain = 0; - return(NULL); - } - nremain = MBLKSIZ; + if (n > nremain && (bposition = malloc(nremain = MBLKSIZ)) == NULL) { + nremain = 0; + return(NULL); } bposition += n; nremain -= n; @@ -51,13 +50,16 @@ register unsigned n; } -bfree(p, n) /* free random memory */ -register char *p; -register unsigned n; +void +bfree( /* free random memory */ +register void *pp, +register size_t n +) { - register unsigned bsiz; + register char *p = pp; + register size_t bsiz; /* check alignment */ - bsiz = BYTES_WORD - ((unsigned)p&(BYTES_WORD-1)); + bsiz = BYTES_WORD - ((size_t)p&(BYTES_WORD-1)); if (bsiz < BYTES_WORD) { p += bsiz; n -= bsiz;