ack/modules/src/alloc/st_alloc.c
1987-01-05 14:44:25 +00:00

47 lines
901 B
C

/* st_alloc - get a structure from a free list. If no structures left,
create new ones. The structures for which this works are
supposed to have as their first tag the string "next", which
should be a pointer type.
The counterpart, st_free, is a macro, defined in alloc.h
*/
#include "alloc.h"
struct xxx {
char *next;
};
char *
st_alloc(phead, size, count)
char **phead;
register unsigned int size;
{
register char *p;
char *retval;
if (*phead == 0) {
p = Malloc(size * count);
((struct xxx *) p)->next = 0;
while (--count) {
p += size;
((struct xxx *) p)->next = p - size;
}
*phead = p;
}
else p = *phead;
*phead = ((struct xxx *)p)->next;
retval = p;
if (size >= sizeof(long)) {
register long *q = (long *) p;
do {
*q++ = 0;
size -= sizeof(long);
} while (size >= sizeof(long));
p = (char *) q;
}
while (size--) *p++ = 0;
return retval;
}