X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibc.so_src%2Fheap.c;h=9b6799b00920c11b8be178c6f9580d88dd017229;hb=c7946415abcd9c7a86ecde867d44cb50a249c349;hp=bdf64de35fdc635674f8b91f55409dd401e17d3c;hpb=0eb50bc9e604f654bdb0409bb66da03b733f906c;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libc.so_src/heap.c b/Usermode/Libraries/libc.so_src/heap.c index bdf64de3..9b6799b0 100644 --- a/Usermode/Libraries/libc.so_src/heap.c +++ b/Usermode/Libraries/libc.so_src/heap.c @@ -94,13 +94,16 @@ EXPORT void *malloc(size_t bytes) //Corrupt Heap Heap_Dump(); _SysDebug("malloc: Corrupt Heap\n"); + exit(128); return NULL; } curBlock = (heap_head*)((uintptr_t)curBlock + curBlock->size); } if((uintptr_t)curBlock < (uintptr_t)_heap_start) { + Heap_Dump(); _SysDebug("malloc: Heap underrun for some reason\n"); + exit(128); return NULL; } @@ -174,7 +177,7 @@ EXPORT void *calloc(size_t __nmemb, size_t __size) EXPORT void free(void *mem) { heap_head *head = (void*)((intptr_t)mem-sizeof(heap_head)); - + // Sanity please! if(!mem) return; @@ -450,17 +453,15 @@ void Heap_Dump(void) heap_head *cur = _heap_start; while( cur < (heap_head*)_heap_end ) { - switch( cur->magic ) - { - case MAGIC: + if( cur->magic == MAGIC ) { _SysDebug("Used block %p[0x%x] - ptr=%p", cur, cur->size, cur->data); - break; - case MAGIC_FREE: + } + else if( cur->magic == MAGIC_FREE ) { _SysDebug("Free block %p[0x%x] - ptr=%p", cur, cur->size, cur->data); - break; - default: + } + else { _SysDebug("Block %p bad magic (0x%x)", cur, cur->magic); - return ; + break ; } cur = (void*)( (char*)cur + cur->size ); }