Lines Matching full:header

23 #define finsh_block_get_data(header)    (uint8_t*)((struct finsh_block_header*)header + 1)  argument
31 static void finsh_block_insert(struct finsh_block_header** list, struct finsh_block_header* header);
32 static void finsh_block_remove(struct finsh_block_header** list, struct finsh_block_header* header);
33 static void finsh_block_split(struct finsh_block_header* header, size_t size);
34 static void finsh_block_merge(struct finsh_block_header** list, struct finsh_block_header* header);
56 struct finsh_block_header* header; in finsh_heap_allocate() local
61 for (header = free_list; in finsh_heap_allocate()
62 ((header != NULL) && (header->length <= size + sizeof(struct finsh_block_header))); in finsh_heap_allocate()
63 header = header->next) ; in finsh_heap_allocate()
65 if (header == NULL) in finsh_heap_allocate()
70 for (header = free_list; in finsh_heap_allocate()
71 ((header != NULL) && (header->length < size + sizeof(struct finsh_block_header))); in finsh_heap_allocate()
72 header = header->next) ; in finsh_heap_allocate()
75 if (header == NULL) return NULL; in finsh_heap_allocate()
79 finsh_block_split(header, size); in finsh_heap_allocate()
82 finsh_block_remove(&free_list, header); in finsh_heap_allocate()
83 header->next = NULL; in finsh_heap_allocate()
86 finsh_block_insert(&allocate_list, header); in finsh_heap_allocate()
88 memset(finsh_block_get_data(header), 0, size); in finsh_heap_allocate()
90 return finsh_block_get_data(header); in finsh_heap_allocate()
98 struct finsh_block_header* header; in finsh_heap_free() local
100 /* get block header */ in finsh_heap_free()
101 header = finsh_block_get_header(ptr); in finsh_heap_free()
104 finsh_block_remove(&allocate_list, header); in finsh_heap_free()
107 finsh_block_insert(&free_list, header); in finsh_heap_free()
108 finsh_block_merge(&free_list, header); in finsh_heap_free()
117 struct finsh_block_header *header, *temp; in finsh_heap_gc() local
122 for (header = allocate_list; header != NULL; ) in finsh_heap_gc()
128 if (global_variable[i].value.ptr == finsh_block_get_data(header)) in finsh_heap_gc()
133 temp = header; in finsh_heap_gc()
134 header = header->next; in finsh_heap_gc()
147 void finsh_block_insert(struct finsh_block_header** list, struct finsh_block_header* header) in finsh_block_insert() argument
153 *list = header; in finsh_block_insert()
160 if (node > header) in finsh_block_insert()
162 /* insert node in the header of list */ in finsh_block_insert()
163 header->next = node; in finsh_block_insert()
164 *list = header; in finsh_block_insert()
172 if (node->next > header) break; in finsh_block_insert()
179 if (node->next != NULL) header->next = node->next; in finsh_block_insert()
180 node->next = header; in finsh_block_insert()
186 void finsh_block_remove(struct finsh_block_header** list, struct finsh_block_header* header) in finsh_block_remove() argument
191 if (node == header) in finsh_block_remove()
193 /* remove list header */ in finsh_block_remove()
194 *list = header->next; in finsh_block_remove()
195 header->next = NULL; in finsh_block_remove()
202 if (node->next == header) in finsh_block_remove()
204 node->next = header->next; in finsh_block_remove()
213 void finsh_block_split(struct finsh_block_header* header, size_t size) in finsh_block_split() argument
218 * split header into two node: in finsh_block_split()
219 * header->next->... in finsh_block_split()
221 next = BLOCK_HEADER((uint8_t*)header + sizeof(struct finsh_block_header) + size); in finsh_block_split()
222 next->length = header->length - sizeof(struct finsh_block_header) - size; in finsh_block_split()
223 header->length = size; in finsh_block_split()
224 next->next = header->next; in finsh_block_split()
226 header->next = next; in finsh_block_split()
229 void finsh_block_merge(struct finsh_block_header** list, struct finsh_block_header* header) in finsh_block_merge() argument
234 next_node = header->next; in finsh_block_merge()
236 if (*list == header) prev_node = NULL; in finsh_block_merge()
239 /* find out the previous header */ in finsh_block_merge()
242 if (prev_node->next == header) in finsh_block_merge()
252 == (uint8_t*)header)) in finsh_block_merge()
256 ((uint8_t*)header + header->length + sizeof(struct finsh_block_header) in finsh_block_merge()
260 prev_node->length += header->length + next_node->length + in finsh_block_merge()
267 prev_node->length += header->length + sizeof(struct finsh_block_header); in finsh_block_merge()
268 prev_node->next = header->next; in finsh_block_merge()
273 ((uint8_t*)header + header->length + sizeof(struct finsh_block_header) in finsh_block_merge()
276 header->length += next_node->length + sizeof(struct finsh_block_header); in finsh_block_merge()
277 header->next = next_node->next; in finsh_block_merge()