| 52 |
|
register char *p; |
| 53 |
|
|
| 54 |
|
if (pagesz == 0) { /* initialize */ |
| 55 |
< |
amnt = pagesz = getpagesize(); |
| 55 |
> |
pagesz = amnt = getpagesize(); |
| 56 |
|
nrem = (int)sbrk(0); /* page align break */ |
| 57 |
|
nrem = pagesz - (nrem&(pagesz-1)); |
| 58 |
|
bpos = sbrk(nrem); /* word aligned! */ |
| 83 |
|
|
| 84 |
|
|
| 85 |
|
bfree(p, n) /* free n bytes of random memory */ |
| 86 |
< |
char *p; |
| 87 |
< |
unsigned n; |
| 86 |
> |
register char *p; |
| 87 |
> |
register unsigned n; |
| 88 |
|
{ |
| 89 |
– |
register M_HEAD *mp; |
| 89 |
|
register int bucket; |
| 90 |
|
register unsigned bsiz; |
| 91 |
|
/* find largest bucket */ |
| 92 |
|
bucket = 0; |
| 93 |
|
for (bsiz = 1; bsiz+sizeof(M_HEAD) <= n; bsiz <<= 1) |
| 94 |
|
bucket++; |
| 96 |
– |
mp = (M_HEAD *)p; |
| 95 |
|
while (bucket > FIRSTBUCKET) { |
| 96 |
|
bsiz >>= 1; |
| 97 |
|
bucket--; |
| 98 |
|
if (n < bsiz+sizeof(M_HEAD)) /* nothing for this bucket */ |
| 99 |
|
continue; |
| 100 |
< |
mp->next = free_list[bucket]; |
| 101 |
< |
free_list[bucket] = mp; |
| 102 |
< |
(char *)mp += bsiz+sizeof(M_HEAD); |
| 100 |
> |
((M_HEAD *)p)->next = free_list[bucket]; |
| 101 |
> |
free_list[bucket] = (M_HEAD *)p; |
| 102 |
> |
p += bsiz+sizeof(M_HEAD); |
| 103 |
|
n -= bsiz+sizeof(M_HEAD); |
| 104 |
|
} |
| 105 |
|
} |
| 113 |
|
register int bucket; |
| 114 |
|
register unsigned bsiz; |
| 115 |
|
|
| 116 |
+ |
if (n == 0) |
| 117 |
+ |
return(NULL); |
| 118 |
+ |
/* find first bucket that fits */ |
| 119 |
|
bucket = FIRSTBUCKET; |
| 120 |
|
for (bsiz = 1<<FIRSTBUCKET; bsiz < n; bsiz <<= 1) |
| 121 |
|
bucket++; |
| 147 |
|
if (n <= on && n > on>>1) |
| 148 |
|
return(op); /* same bucket */ |
| 149 |
|
p = malloc(n); |
| 150 |
< |
if (p == NULL) |
| 150 |
< |
return(NULL); |
| 150 |
> |
if (p != NULL) |
| 151 |
|
#ifdef BSD |
| 152 |
< |
bcopy(op, p, n>on ? on : n); |
| 152 |
> |
bcopy(op, p, n>on ? on : n); |
| 153 |
|
#else |
| 154 |
< |
(void)memcpy(p, op, n>on ? on : n); |
| 154 |
> |
(void)memcpy(p, op, n>on ? on : n); |
| 155 |
|
#endif |
| 156 |
|
free(op); |
| 157 |
|
return(p); |
| 164 |
|
register M_HEAD *mp; |
| 165 |
|
register int bucket; |
| 166 |
|
|
| 167 |
+ |
if (p == NULL) |
| 168 |
+ |
return; |
| 169 |
|
mp = (M_HEAD *)p - 1; |
| 170 |
|
bucket = mp->bucket; |
| 171 |
|
mp->next = free_list[bucket]; |