* split an existing element into two smaller elements at the given * split_pt parameter. */
| 288 | * split_pt parameter. |
| 289 | */ |
| 290 | static void |
| 291 | split_elem(struct malloc_elem *elem, struct malloc_elem *split_pt) |
| 292 | { |
| 293 | struct malloc_elem *next_elem = elem->next; |
| 294 | const size_t old_elem_size = (uintptr_t)split_pt - (uintptr_t)elem; |
| 295 | const size_t new_elem_size = elem->size - old_elem_size; |
| 296 | |
| 297 | malloc_elem_init(split_pt, elem->heap, elem->msl, new_elem_size, |
| 298 | elem->orig_elem, elem->orig_size, elem->dirty); |
| 299 | split_pt->prev = elem; |
| 300 | split_pt->next = next_elem; |
| 301 | if (next_elem) |
| 302 | next_elem->prev = split_pt; |
| 303 | else |
| 304 | elem->heap->last = split_pt; |
| 305 | elem->next = split_pt; |
| 306 | elem->size = old_elem_size; |
| 307 | set_trailer(elem); |
| 308 | if (elem->pad) { |
| 309 | /* Update inner padding inner element size. */ |
| 310 | elem = RTE_PTR_ADD(elem, elem->pad); |
| 311 | elem->size = old_elem_size - elem->pad; |
| 312 | } |
| 313 | } |
| 314 | |
| 315 | /* |
| 316 | * our malloc heap is a doubly linked list, so doubly remove our element. |
no test coverage detected