void mem_initialize(){ void* ptr = HEAP_START; void* end = HEAP_END; set_unused(ptr); set_block_size(ptr,(end - ptr) + 1); initialized = 1; }
void _free(void * ptr){ set_unused(ptr); void *next_ptr = NEXT_BLOCK(ptr); if( next_ptr!= NULL && !IS_USED(next_ptr)){ set_block_size(ptr, BLOCK_SIZE(ptr) + BLOCK_SIZE(next_ptr)); } void* pre_ptr = pre_block(ptr); if(pre_ptr != NULL && !IS_USED(pre_ptr)){ set_block_size(pre_ptr, BLOCK_SIZE(ptr) + BLOCK_SIZE(pre_ptr)); } }
static int remove_from_page (DirPage0 *page0, DirPage1 *page, unsigned pageno, unsigned off) { DirEntry *entry = &page->entry[off]; unsigned n, i; n = 1 + additional_entries (entry->name); if (pageno < MAXPAGES) page0->dheader.map[pageno] += n; entry->next = 0; entry->fid.Vnode = 0; entry->fid.Unique = 0; for (i = off + 1; i < off + n + 1; ++i) set_unused (page, i); return 0; }
void set_next_block(void *ptr, size_t ex_size, size_t size){ void* next = NEXT_BLOCK(ptr); set_unused(next); set_block_size(next, ex_size - size); }