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]; |