X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibc.so_src%2Fheap.c;fp=Usermode%2FLibraries%2Flibc.so_src%2Fheap.c;h=6832738cce1b83ab740991d62cefe18d574bcd4c;hb=149b37ab41da1105db27303b38c43eb237b779da;hp=23df92a73f83e5f468c31e5f3b653ecf8cf31c15;hpb=df4e449c0972a703ce403332668a7bb3366d126a;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libc.so_src/heap.c b/Usermode/Libraries/libc.so_src/heap.c index 23df92a7..6832738c 100644 --- a/Usermode/Libraries/libc.so_src/heap.c +++ b/Usermode/Libraries/libc.so_src/heap.c @@ -34,7 +34,7 @@ EXPORT void free(void *mem); EXPORT void *realloc(void *mem, Uint bytes); EXPORT void *sbrk(int increment); LOCAL void *extendHeap(int bytes); -LOCAL uint brk(int delta); +LOCAL uint brk(Uint newpos); //Code @@ -260,7 +260,7 @@ EXPORT void *sbrk(int increment) static size_t oldEnd = 0; static size_t curEnd = 0; - //SysDebug("sbrk: (increment=%i)\n", increment); + //_SysDebug("sbrk: (increment=%i)\n", increment); if (oldEnd == 0) curEnd = oldEnd = brk(0); @@ -328,20 +328,25 @@ static void *FindHeapBase() return NULL; } -LOCAL uint brk(int delta) +LOCAL uint brk(Uint newpos) { static uint curpos; uint pages; uint ret = curpos; + int delta; + + //_SysDebug("brk: (newpos=0x%x)", newpos); // Find initial position if(curpos == 0) curpos = (uint)FindHeapBase(); // Get Current Position - if(delta == 0) - { - return curpos; - } + if(newpos == 0) return curpos; + + if(newpos < curpos) return newpos; + + delta = newpos - curpos; + //_SysDebug(" brk: delta = 0x%x", delta); // Do we need to add pages if(curpos & 0xFFF && (curpos & 0xFFF) + delta < 0x1000)