1 |
< |
/* Copyright (c) 1991 Regents of the University of California */ |
1 |
> |
/* Copyright (c) 1992 Regents of the University of California */ |
2 |
|
|
3 |
|
#ifndef lint |
4 |
|
static char SCCSid[] = "$SunId$ LBL"; |
43 |
|
#endif |
44 |
|
#define BYTES_WORD sizeof(ALIGN) |
45 |
|
|
46 |
+ |
#ifndef MAXINCR |
47 |
|
#define MAXINCR (1<<16) /* largest sbrk(2) increment */ |
47 |
– |
|
48 |
– |
#ifdef NOVMEM |
49 |
– |
#define getpagesize() 1024 |
48 |
|
#endif |
49 |
|
/* malloc free lists */ |
50 |
|
typedef union m_head { |
233 |
|
pagesz = amnt = getpagesize(); |
234 |
|
nrem = (int)sbrk(0); /* page align break */ |
235 |
|
nrem = pagesz - (nrem&(pagesz-1)); |
236 |
< |
bpos = sbrk(nrem); /* word aligned! */ |
236 |
> |
bpos = sbrk(nrem); |
237 |
|
if ((int)bpos == -1) |
238 |
|
return(NULL); |
239 |
|
#ifdef MSTATS |
240 |
|
b_nsbrked += nrem; |
241 |
|
#endif |
242 |
+ |
bpos += nrem & (BYTES_WORD-1); /* align pointer */ |
243 |
+ |
nrem &= ~(BYTES_WORD-1); |
244 |
|
} |
245 |
|
|
246 |
|
n = (n+(BYTES_WORD-1))&~(BYTES_WORD-1); /* word align rqst. */ |
381 |
|
register M_HEAD *mp; |
382 |
|
register int bucket; |
383 |
|
|
384 |
< |
if (p == NULL || p == DUMMYLOC) |
384 |
> |
if (p == NULL | p == DUMMYLOC) |
385 |
|
return(1); |
386 |
|
mp = (M_HEAD *)p - 1; |
387 |
|
if (mp->a.magic != MAGIC) /* sanity check */ |
388 |
|
return(0); |
389 |
|
bucket = mp->a.bucket; |
390 |
+ |
if (bucket < FIRSTBUCKET | bucket >= NBUCKETS) |
391 |
+ |
return(0); |
392 |
|
mp->next = free_list[bucket]; |
393 |
|
free_list[bucket] = mp; |
394 |
|
#ifdef MSTATS |
396 |
|
#endif |
397 |
|
return(1); |
398 |
|
} |
397 |
– |
|
398 |
– |
|
399 |
– |
#ifndef NOVMEM |
400 |
– |
#ifndef BSD |
401 |
– |
#include <sys/var.h> |
402 |
– |
int |
403 |
– |
getpagesize() /* use SYSV var structure to get page size */ |
404 |
– |
{ |
405 |
– |
struct var v; |
406 |
– |
|
407 |
– |
uvar(&v); |
408 |
– |
return(1 << v.v_pageshift); |
409 |
– |
} |
410 |
– |
#endif |
411 |
– |
#endif |
399 |
|
|
400 |
|
|
401 |
|
#ifdef MSTATS |