diff --git a/src/assert.h b/src/assert.h new file mode 100644 index 0000000..376b2c7 --- /dev/null +++ b/src/assert.h @@ -0,0 +1,10 @@ +#include + +#ifdef ENABLE_ASSERT +#define assert(cond) kernaux_assert((cond)) +#else +#define assert(cond) ((void)sizeof((cond))) +#endif + +#define assert_return(cond) { assert((cond)); if (!(cond)) return; } +#define assert_retval(cond, val) { assert((cond)); if (!(cond)) return (val); } diff --git a/src/pfa.c b/src/pfa.c index 29be692..70d6a41 100644 --- a/src/pfa.c +++ b/src/pfa.c @@ -5,6 +5,8 @@ #include #include +#include "assert.h" + #define PAGE_INDEX(page_addr) ((page_addr) / KERNAUX_PFA_PAGE_SIZE) #define FLAG_INDEX_FROM_INDEX(page_index) ((page_index) / 8) @@ -39,12 +41,14 @@ __attribute__((nonnull)); void KernAux_PFA_initialize(const KernAux_PFA pfa) { + assert(pfa); kernaux_memset(pfa->flags, 0, sizeof(pfa->flags)); } bool KernAux_PFA_is_available(const KernAux_PFA pfa, const size_t page_addr) { - if (page_addr % KERNAUX_PFA_PAGE_SIZE != 0) return false; + assert(pfa); + assert_retval(page_addr % KERNAUX_PFA_PAGE_SIZE == 0, false); return GET_FLAG_FROM_ADDR(pfa, page_addr); } @@ -71,7 +75,8 @@ void KernAux_PFA_mark( size_t start, size_t end ) { - if (start >= end) return; + assert(pfa); + assert_return(start < end); const size_t start_rem = start % KERNAUX_PFA_PAGE_SIZE; const size_t end_rem = (end + 1) % KERNAUX_PFA_PAGE_SIZE; @@ -98,6 +103,8 @@ void KernAux_PFA_mark( size_t KernAux_PFA_alloc_pages(const KernAux_PFA pfa, size_t mem_size) { + assert(pfa); + const size_t mem_rem = mem_size % KERNAUX_PFA_PAGE_SIZE; if (mem_rem != 0) { @@ -135,7 +142,8 @@ void KernAux_PFA_free_pages( const size_t page_addr, size_t mem_size ) { - if (page_addr % KERNAUX_PFA_PAGE_SIZE != 0) return; + assert(pfa); + assert_return(page_addr % KERNAUX_PFA_PAGE_SIZE == 0); const size_t mem_rem = mem_size % KERNAUX_PFA_PAGE_SIZE;