From: Oliver Schmidt Date: Thu, 20 Feb 2014 20:03:52 +0000 (+0100) Subject: Have _heapmaxavail() work as advertised. X-Git-Tag: V2.15~147 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=d001a6f1a0ec23366ab435d7673908f9690a99bb;p=cc65 Have _heapmaxavail() work as advertised. The cc65 doc explicitly states that the return value of _heapmaxavail() can be used as parameter of malloc(). To actually allow for that the size of HEAP_ADMIN_SPACE has to be substracted from the raw size of the largest free heap block. --- diff --git a/libsrc/common/_heapmaxavail.s b/libsrc/common/_heapmaxavail.s index 16fc10dde..4d44fadc1 100644 --- a/libsrc/common/_heapmaxavail.s +++ b/libsrc/common/_heapmaxavail.s @@ -61,7 +61,7 @@ __heapmaxavail: ; F = F->next; -@L2: iny ; Points to F->next +@L2: iny ; Points to F->next lda (ptr1),y tax iny @@ -69,8 +69,17 @@ __heapmaxavail: stx ptr1 jmp @L1 -; return Size; +; if (Size < HEAP_ADMIN_SPACE) return 0; @L3: lda ptr2 + sub #HEAP_ADMIN_SPACE ldx ptr2+1 + bcs @L5 + bne @L4 + txa rts + +; return Size - HEAP_ADMIN_SPACE; + +@L4: dex +@L5: rts