--- ray/src/common/malloc.c 1991/08/26 10:49:08 1.15 +++ ray/src/common/malloc.c 1992/06/29 22:39:51 2.5 @@ -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,14 @@ 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 + bpos += nrem & (BYTES_WORD-1); /* align pointer */ + nrem &= ~(BYTES_WORD-1); } n = (n+(BYTES_WORD-1))&~(BYTES_WORD-1); /* word align rqst. */ @@ -362,7 +362,7 @@ unsigned n; if (n <= on && (n > on>>1 || on == 1<on ? on : n); @@ -381,12 +381,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 +396,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