Usermode/GUI Terminal - Added scrolling and cursor/save restore
[tpg/acess2.git] / Usermode / Libraries / libc.so_src / heap.c
index 779b004..3cbd0b5 100644 (file)
@@ -94,13 +94,16 @@ EXPORT void *malloc(size_t bytes)
                        //Corrupt Heap\r
                        Heap_Dump();\r
                        _SysDebug("malloc: Corrupt Heap\n");\r
+                       exit(128);\r
                        return NULL;\r
                }\r
                curBlock = (heap_head*)((uintptr_t)curBlock + curBlock->size);\r
        }\r
        \r
        if((uintptr_t)curBlock < (uintptr_t)_heap_start) {\r
+               Heap_Dump();\r
                _SysDebug("malloc: Heap underrun for some reason\n");\r
+               exit(128);\r
                return NULL;\r
        }\r
        \r
@@ -185,7 +188,7 @@ EXPORT void free(void *mem)
        DEBUGS("free(%p) : 0x%x bytes", mem, head->size);\r
        \r
        //Unify Right\r
-       if((intptr_t)head + head->size < (intptr_t)_heap_end)\r
+       if((uintptr_t)head + head->size < (uintptr_t)_heap_end)\r
        {\r
                heap_head       *nextHead = (heap_head*)((intptr_t)head + head->size);\r
                if(nextHead->magic == MAGIC_FREE) {     //Is the next block free\r
@@ -194,7 +197,7 @@ EXPORT void free(void *mem)
                }\r
        }\r
        //Unify Left\r
-       if((intptr_t)head - sizeof(heap_foot) > (intptr_t)_heap_start)\r
+       if((uintptr_t)head - sizeof(heap_foot) > (uintptr_t)_heap_start)\r
        {\r
                heap_head       *prevHead;\r
                heap_foot       *prevFoot = (heap_foot *)((intptr_t)head - sizeof(heap_foot));\r
@@ -448,19 +451,17 @@ LOCAL uint brk(uintptr_t newpos)
 void Heap_Dump(void)\r
 {\r
        heap_head *cur = _heap_start;\r
-       while( cur < _heap_end )\r
+       while( cur < (heap_head*)_heap_end )\r
        {\r
-               switch( cur->magic )\r
-               {\r
-               case MAGIC:\r
+               if( cur->magic == MAGIC ) {\r
                        _SysDebug("Used block %p[0x%x] - ptr=%p", cur, cur->size, cur->data);\r
-                       break;\r
-               case MAGIC_FREE:\r
+               }\r
+               else if( cur->magic == MAGIC_FREE ) {\r
                        _SysDebug("Free block %p[0x%x] - ptr=%p", cur, cur->size, cur->data);\r
-                       break;\r
-               default:\r
+               }\r
+               else {\r
                        _SysDebug("Block %p bad magic (0x%x)", cur, cur->magic);\r
-                       return ;\r
+                       break ;\r
                }\r
                cur = (void*)( (char*)cur + cur->size );\r
        }\r

UCC git Repository :: git.ucc.asn.au