2
* Copyright 1999 Silicon Graphics, Inc.
14
static Node *freeList = NULL;
17
void *malloc(size_t size)
22
/* header */ sizeof(Node) + /* round up */ (sizeof(Node) - 1);
23
size -= size % sizeof(Node);
26
while ((*free != NULL) && ((*free)->size < size))
27
free = &((*free)->next);
31
if (mem->size > size) {
32
Node *split = mem + (size / sizeof(Node));
34
split->size = mem->size - size;
35
split->next = mem->next;
43
return ((void *) mem);
50
Node *mem = ((Node *) ptr) - 1;
51
Node **free = &freeList;
53
while ((*free != NULL) && (*free < mem)) {
55
(*free + ((*free)->size / sizeof(Node)))) {
56
(*free)->size += mem->size;
60
free = &((*free)->next);
68
if (mem->next == (mem + (mem->size / sizeof(Node)))) {
69
mem->size += mem->next->size;
70
mem->next = mem->next->next;
76
void *realloc(void *ptr, size_t size)
81
Node *mem = ((Node *) ptr) - 1;
84
/* header */ sizeof(Node) +
85
/* round up */ (sizeof(Node) - 1);
86
size -= size % sizeof(Node);
88
if (size > mem->size) {
89
/* Should try to grow */
95
mem->size - sizeof(Node));
98
} else if (size < mem->size) {
99
Node *split = mem + (size / sizeof(Node));
101
split->size = mem->size - size;
102
split->next = mem->next;
104
free((void *) (split + 1));
112
void arclib_malloc_add(ULONG start, ULONG size)
114
Node *node = (Node *) start;
116
node->size = size - (size % sizeof(Node));
117
free((void *) (node + 1));