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; }