heap_free_page returns true if page was successfully deleted
This commit is contained in:
10
lib/heap.c
10
lib/heap.c
@@ -31,17 +31,17 @@ void heap_create(heap_t *heap)
|
|||||||
heap->pages = 0;
|
heap->pages = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void heap_free_page(heap_t *heap, page_t *page)
|
bool heap_free_page(heap_t *heap, page_t *page)
|
||||||
{
|
{
|
||||||
if (!page || !heap)
|
if (!page || !heap)
|
||||||
return;
|
return false;
|
||||||
|
|
||||||
if (page == heap->beg)
|
if (page == heap->beg)
|
||||||
{
|
{
|
||||||
heap->beg = heap->beg->next;
|
heap->beg = heap->beg->next;
|
||||||
page_delete(page);
|
page_delete(page);
|
||||||
--heap->pages;
|
--heap->pages;
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
page_t *prev = NULL, *next = NULL, *cur = NULL;
|
page_t *prev = NULL, *next = NULL, *cur = NULL;
|
||||||
@@ -55,7 +55,7 @@ void heap_free_page(heap_t *heap, page_t *page)
|
|||||||
|
|
||||||
if (!cur)
|
if (!cur)
|
||||||
// Couldn't find the page
|
// Couldn't find the page
|
||||||
return;
|
return false;
|
||||||
// Page was found
|
// Page was found
|
||||||
prev->next = next;
|
prev->next = next;
|
||||||
if (!next)
|
if (!next)
|
||||||
@@ -63,6 +63,8 @@ void heap_free_page(heap_t *heap, page_t *page)
|
|||||||
heap->end = prev;
|
heap->end = prev;
|
||||||
page_delete(page);
|
page_delete(page);
|
||||||
--heap->pages;
|
--heap->pages;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
page_t *heap_allocate(heap_t *heap, size_t requested)
|
page_t *heap_allocate(heap_t *heap, size_t requested)
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
#include "./base.h"
|
#include "./base.h"
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
typedef struct Page
|
typedef struct Page
|
||||||
@@ -34,7 +35,7 @@ typedef struct
|
|||||||
} heap_t;
|
} heap_t;
|
||||||
|
|
||||||
void heap_create(heap_t *);
|
void heap_create(heap_t *);
|
||||||
void heap_free_page(heap_t *, page_t *);
|
bool heap_free_page(heap_t *, page_t *);
|
||||||
page_t *heap_allocate(heap_t *, size_t);
|
page_t *heap_allocate(heap_t *, size_t);
|
||||||
void heap_stop(heap_t *);
|
void heap_stop(heap_t *);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user