-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfree.c
46 lines (42 loc) · 1.07 KB
/
free.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/*
** free.c for in /home/jacqui_p/rendu/PSU_2016_malloc/
**
** Made by Pierre-Emmanuel Jacquier
** Login <[email protected]>
**
** Started on Mon Jan 30 11:07:14 2017 Pierre-Emmanuel Jacquier
** Last update Fri Feb 10 15:45:09 2017 Pierre-Emmanuel Jacquier
*/
#include "free.h"
void free(void *ptr)
{
t_memblock *tmp;
if (!ptr)
return ;
if (ptr > sbrk(0) || ptr < (void*)g_head)
return ;
tmp = (t_memblock *)ptr;
tmp = tmp - 1;
tmp->isfree = 1;
block_fusion(tmp);
}
void block_fusion(t_memblock *block)
{
if (block->prev && block->prev->isfree)
{
block->prev->memsize = (block->memsize +
block->prev->memsize + META_DATA_SIZE);
block->prev->next = block->next;
if (block->next)
block->next->prev = block->prev;
block = block->prev;
}
if (block->next && block->next->isfree)
{
block->memsize = block->memsize +
block->next->memsize + META_DATA_SIZE;
block->next = block->next->next;
if (block->next)
block->next->prev = block;
}
}