--- ray/src/common/malloc.c 1991/08/26 10:49:08 1.15 +++ ray/src/common/malloc.c 1992/02/07 15:10:32 2.3 @@ -1,4 +1,4 @@ -/* Copyright (c) 1991 Regents of the University of California */ +/* Copyright (c) 1992 Regents of the University of California */ #ifndef lint static char SCCSid[] = "$SunId$ LBL"; @@ -43,10 +43,8 @@ static unsigned m_nwasted = 0; #endif #define BYTES_WORD sizeof(ALIGN) +#ifndef MAXINCR #define MAXINCR (1<<16) /* largest sbrk(2) increment */ - -#ifdef NOVMEM -#define getpagesize() 1024 #endif /* malloc free lists */ typedef union m_head { @@ -235,12 +233,17 @@ register unsigned n; pagesz = amnt = getpagesize(); nrem = (int)sbrk(0); /* page align break */ nrem = pagesz - (nrem&(pagesz-1)); - bpos = sbrk(nrem); /* word aligned! */ + bpos = sbrk(nrem); if ((int)bpos == -1) return(NULL); #ifdef MSTATS b_nsbrked += nrem; #endif + thisamnt = BYTES_WORD - ((unsigned)bpos&(BYTES_WORD-1)); + if (thisamnt < BYTES_WORD) { /* align pointer */ + bpos += thisamnt; + nrem -= thisamnt; + } } n = (n+(BYTES_WORD-1))&~(BYTES_WORD-1); /* word align rqst. */ @@ -381,12 +384,14 @@ char *p; register M_HEAD *mp; register int bucket; - if (p == NULL || p == DUMMYLOC) + if (p == NULL | p == DUMMYLOC) return(1); mp = (M_HEAD *)p - 1; if (mp->a.magic != MAGIC) /* sanity check */ return(0); bucket = mp->a.bucket; + if (bucket < FIRSTBUCKET | bucket >= NBUCKETS) + return(0); mp->next = free_list[bucket]; free_list[bucket] = mp; #ifdef MSTATS @@ -394,21 +399,6 @@ char *p; #endif return(1); } - - -#ifndef NOVMEM -#ifndef BSD -#include -int -getpagesize() /* use SYSV var structure to get page size */ -{ - struct var v; - - uvar(&v); - return(1 << v.v_pageshift); -} -#endif -#endif #ifdef MSTATS